f8b94183
docs(faq): Docker on a host silently drops guest outbound traffic
a73x 2026-07-29 12:40
Commit message
docs/faq.md
| Old | New | ||
|---|---|---|---|
| @@ -11,3 +11,24 @@ To serve traffic from a VM, or to reach one directly from another network, | |||
| 11 | install [Tailscale](https://tailscale.com) (or WireGuard) inside it — it is | 11 | install [Tailscale](https://tailscale.com) (or WireGuard) inside it — it is |
| 12 | a normal Linux machine. A public gateway is on the | 12 | a normal Linux machine. A public gateway is on the |
| 13 | [roadmap](../ROADMAP.md). | 13 | [roadmap](../ROADMAP.md). |
| 14 | |||
| 15 | ## VMs boot and SSH works, but have no outbound network — why? | ||
| 16 | |||
| 17 | Docker. Installing (or starting) Docker on a host sets the kernel's iptables | ||
| 18 | `FORWARD` policy to drop, which silently discards the guests' NAT'd traffic — | ||
| 19 | the agent's own forwarding and masquerade rules are still in place, and a | ||
| 20 | drop in any chain wins. The symptoms are exactly this shape: the guest pings | ||
| 21 | its gateway, the jump gate still works (that path is tunnelled, not | ||
| 22 | forwarded), but DNS and everything outbound time out. | ||
| 23 | |||
| 24 | Docker reserves the `DOCKER-USER` chain for the host admin. Allow the eitri | ||
| 25 | bridge through it: | ||
| 26 | |||
| 27 | ```sh | ||
| 28 | sudo iptables -I DOCKER-USER -i eitri0 -j ACCEPT | ||
| 29 | sudo iptables -I DOCKER-USER -o eitri0 -j ACCEPT | ||
| 30 | ``` | ||
| 31 | |||
| 32 | Docker re-creates its rules on every daemon start, so persist these (e.g. | ||
| 33 | `iptables-persistent`, or a systemd unit ordered after `docker.service`) — | ||
| 34 | a plain one-off insert is gone after the next reboot. | ||