인터페이스에서 Docker 컨테이너로 인바운드 트래픽 전달

인터페이스에서 Docker 컨테이너로 인바운드 트래픽 전달

192.168.72.0/28내 컴퓨터에서 주소가 있고 모드에서 실행 중인 eth0동일한 컴퓨터에서 실행되는 컨테이너 로 트래픽을 전달해야 합니다 .172.7.0.4bridge

라우팅 규칙을 추가해 보았습니다.

ip route add 192.168.72.0/28 via 172.17.0.4

인터페이스에서는 트래픽을 볼 수 있지만 eth0Docker 컨테이너의 인터페이스에서는 볼 수 없습니다.

DNAT도 시도했지만 운이 없었습니다.

iptables -t nat -I PREROUTING -i eth0 -s 192.168.72.0/28 -j DNAT --to-destination 172.17.0.4

내가 무엇을 놓치고 있나요?

문제는 컨테이너가 브리지에서 실행되고 있고 비표준 이름을 가진 네트워크 인터페이스가 있다는 것입니다. 이 상황에서는 일반적으로 어떤 접근 방식이 사용됩니까?

답변1

/etc/iproute2/rf_tables추가 아래에 새 라우팅 테이블을 만듭니다.2 connect

그런 다음 다음 명령을 실행합니다.

ip rule add from 192.168.72.0/28 table connect
ip route add default via 172.17.0.4 table connect

172.17.0.4Docker 컨테이너의 IP는 어디에 있습니까? 귀하의 경우에는 다를 수 있습니다.

iptables그렇다면 이제 규칙을 따라야 할 때입니다

iptables -A INPUT -s 192.168.72.0/28 -j ACCEPT
iptables -A FORWARD -d 192.168.72.0/28 -j ACCEPT
iptables -A FORWARD -s 192.168.72.0/28 -j ACCEPT
iptables -A OUTPUT -d 192.168.72.0/28 -j ACCEPT

이 시점에서 모든 트래픽은 Docker 컨테이너를 통과하고 정상적으로 작동합니다.

관련 정보