Skip to content

[awf] network-isolation: cli-proxy cannot reach the external DIFC proxy (ENETUNREACH to host gateway) on GitHub-hosted runners, no Tailscale - variant of #6704 #7063

Description

@raman-anyware

Problem

From v0.27.43+ (observed on v0.27.44), in network-isolation/topology mode with the CLI proxy connecting to an external DIFC proxy on the runner host, the awf-cli-proxy container never becomes healthy: its tcp-tunnel gets ENETUNREACH dialing the host gateway, the DIFC liveness probe exhausts its retries, and the workflow fails fast — the agent is never invoked.

The same workflow on the same runner pool works on v0.27.26 (pre-rework).

Key data point for #6704: this is a GitHub-hosted ubuntu-latest runner with no Tailscale — so the route-capture mechanism validated there cannot be the cause of this variant. The isolation-mode container→host path appears broken on a stock runner.

Evidence (v0.27.44, GitHub-hosted ubuntu-latest)

[INFO] CLI proxy enabled: connecting to external DIFC proxy at host.docker.internal:18443
[WARN] Host access enabled with host.docker.internal in allowed domains
[WARN] Network-isolation: removing 1 non-portable DNS server(s) that may become unreachable
       from Docker bridge containers when host routing is modified by tools like Tailscale: 168.63.129.16
[WARN] Network-isolation: no portable DNS servers remain after filtering; falling back to 8.8.8.8, 8.8.4.4.
 Container awf-cli-proxy  Error
dependency failed to start: container awf-cli-proxy is unhealthy
[cli-proxy] DIFC proxy probe failed (attempt 1/10, diagnosis=unknown), retrying in 1s...
...
[cli-proxy] DIFC proxy probe failed (attempt 6/10, diagnosis=unknown), retrying in 30s...
[tcp-tunnel] Upstream error (::1:39718): connect ENETUNREACH 172.17.0.1:18443 - Local (0.0.0.0:0)
[ERROR] Fatal error: Error: AWF firewall failed to start: awf-cli-proxy could not connect to the
        external DIFC proxy (or exited before establishing a connection). Failing fast to avoid
        repeated in-agent retries. The agent was never invoked.

Note the third line: "Host access enabled with host.docker.internal in allowed domains" is logged, yet the tunnel still cannot reach the host — the upstream dial goes to 172.17.0.1 (the default bridge gateway), which is not reachable from the isolated topology-mode network. This suggests the #6657 host-access-with-isolation plumbing does not cover the cli-proxy → external-DIFC path: host.docker.internal resolves to the default bridge's gateway rather than the gateway of the network the cli-proxy actually sits on.

Version matrix (same workflow, same runner pool)

firewall outcome
v0.27.26 ✅ cli-proxy healthy, agent runs, reviews post
v0.27.44 awf-cli-proxy is unhealthy, ENETUNREACH 172.17.0.1:18443, agent never starts

Environment

  • Compiler: gh-aw v0.79.8 (sandbox.agent.version override selects the firewall version), Copilot engine 1.0.60
  • Runner: GitHub-hosted ubuntu-latest (Azure DNS 168.63.129.16 auto-detected); no Tailscale, no custom host routing
  • CLI proxy in external-DIFC mode (host.docker.internal:18443)
  • Trigger: slash_command workflow (issue_comment), permissions: contents: read, pull-requests: read
  • Runs are in a private repository; happy to share full logs/awf-resolved-config.json with maintainers.

Ask

Either resolve host.docker.internal to the gateway of the isolation-mode network the cli-proxy is attached to (or add an explicit host route/alias for it), or extend the #6657 host-access plumbing to the cli-proxy sidecar. If there is a supported flag combination that restores container→host access for the external DIFC proxy under topology mode, a Runner Doctor entry for this failure signature would also help — the current message gives no hint that the firewall version is the variable.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions