
Ich habe einen Server, auf dem ein Wireguard-VPN läuft, 10.0.1.254/24
und Docker läuft auf 172.17.0.1/16
.
Meines docker-compose.yaml
sieht so aus (vereinfacht):
services:
container_a:
image: nginx:latest
ports:
- '10.0.1.254:80:80'
container_b:
image: alpine:latest
Jetzt kann ich nginx über wget http://10.0.1.254
auf dem Host erreichen. Auf die gleiche Weise kann ich es auch von einem VPN-Peer aus erreichen (z. B. 10.0.1.1
). Aber wenn ich versuche, dies von einem anderen Docker-Container aus zu tun (z. B. docker compose exec container_b wget http://10.0.1.254
), erhalte ich ein Timeout. Ich kann den Host jedoch anpingen ( docker compose exec container_b ping 10.0.1.254
).
Ich vermute, dass dies etwas mit der Art und Weise zu tun hat, wie Docker Ports auf dem Host zuordnet. Aber ich kann dazu nicht viele Informationen finden. Weiß jemand, warum das nicht funktioniert?
Antwort1
Es stellte sich heraus, dass ich immer noch UFW installiert hatte, das so konfiguriert war, dass eingehende Verbindungen zu diesem Port der wg0
Schnittstelle zugelassen wurden. Das System war jedoch intelligent genug, eine Abkürzung zu nehmen, direkt von einer virtuellen Docker-Schnittstelle zur anderen, und diese ACCEPT-Regel für die wg0
Schnittstelle zu umgehen.
Ich habe dies herausgefunden tail +1f /var/log/ufw.log
, indem ich verwendet und dann den fehlgeschlagenen wget
Befehl vom anderen Docker-Container aus ausgeführt habe.
In meinem Fall bestand die Lösung darin, UFW ( sudo ufw disable
) einfach zu deaktivieren, da ich es sowieso nicht verwende.