
Wireguard VPN을 실행하는 서버가 있고 10.0.1.254/24
Docker가 172.17.0.1/16
.
내 docker-compose.yaml
모습은 다음과 같습니다(단순화).
services:
container_a:
image: nginx:latest
ports:
- '10.0.1.254:80:80'
container_b:
image: alpine:latest
이제 wget http://10.0.1.254
호스트를 사용하여 nginx에 연결할 수 있습니다. VPN 피어(예: )에서도 동일한 방식으로 연결할 수 있습니다 10.0.1.1
. 하지만 다른 Docker 컨테이너(예: ) 내에서 이 작업을 수행하려고 하면 docker compose exec container_b wget http://10.0.1.254
시간 초과가 발생합니다. 하지만 호스트( docker compose exec container_b ping 10.0.1.254
)에 ping을 보낼 수는 있습니다.
내 생각에는 이것이 Docker가 호스트의 포트를 매핑하는 방식과 관련이 있는 것 같습니다. 하지만 이에 대한 정보는 많이 찾을 수 없습니다. 왜 이것이 작동하지 않는지 아는 사람이 있습니까?
답변1
알고 보니 인터페이스에서 이 포트로 들어오는 연결을 허용하도록 구성된 UFW가 아직 설치되어 있었습니다 wg0
. 그러나 시스템은 인터페이스에 대한 이 ACCEPT 규칙을 우회하여 하나의 가상 Docker 인터페이스에서 다른 가상 Docker 인터페이스로 직접 지름길을 택할 만큼 똑똑했습니다 wg0
.
를 사용한 tail +1f /var/log/ufw.log
다음 wget
다른 Docker 컨테이너에서 실패한 명령을 실행하여 이를 알아냈습니다.
sudo ufw disable
내 경우에는 UFW( )를 사용하지 않기 때문에 해결책은 간단히 UFW( )를 비활성화하는 것이었습니다 .