Docker: 개인 IP이지만 다른 네트워크

Docker: 개인 IP이지만 다른 네트워크

최근에 나는 이것이 도커에게 "개인" IP를 제공할 수 있다는 것을 발견했습니다.

ip addr del 10.1.1.133/24 dev eth0
ip link add link eth0 dev eth0m type macvlan mode bridge
ip link set eth0m up
ip addr add 10.1.1.133/24 dev eth0m
route add default gw 10.1.1.1

내가 한 컨테이너에

CID=$(docker run -d ...)
pipework eth0 $CID 10.1.1.133/[email protected]

이는 호스트와 Docker 컨테이너가 모두 동일한 서브넷(이 경우 10.1.1.0/24)에 있는 경우 효과적이지만, Docker에 대해 다른 서브넷을 사용하려면 어떻게 해야 합니까? 예를 들어 10.2.2.0/24?

iptables 위장을 시도했지만 아무것도 작동하지 않습니다. 도커 컨테이너는 외부 네트워크(인터넷)에 ping을 보내거나 연결할 수 없습니다.

iptables -t nat -A POSTROUTING -m iprange --src-range 10.2.2.2-10.2.2.255 -o eth0 -j MASQUERADE

물론 IP 전달이 활성화되어 있습니다.

답변1

해결책을 찾으세요. 호스트는 라우터로 설정되어야 하며, iptables NAT를 활성화하고 새 IP 클래스로의 라우팅을 활성화해야 합니다. 이 경우 eth0m은 브리지된 네트워크입니다.

iptables -A FORWARD -i eth0m -o eth0m -j ACCEPT
iptables -A FORWARD -i eth0m -o eth0m  -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -t nat  -A POSTROUTING -o eth0m -j MASQUERADE

파이프는 새 라우터(이 경우 192.168.0.254)를 사용해야 합니다.

pipework eth0 $DOCKID 10.8.3.1/[email protected]

마지막으로 경로를 추가해야 합니다. 이 경우 10.8.3.0은 또 다른 IP 클래스입니다.

route add -net 10.8.3.0 netmask 255.255.255.0  dev eth0m

관련 정보