내 서버에 특이한 설정이 있습니다. 3개의 나가는 이더넷 포트가 있고 모두 브리지 인터페이스에 연결되어 있으며 이를 2개의 VLAN으로 분할합니다.
ip link add veth type bridge
ip link set veth address 01:23:45:67:89:0A
ip link set dev eth1 master veth
ip link set dev eth2 master veth
ip link set dev eth3 master veth
[...]
ip link add veth name veth.10 type vlan id 10
ip link add veth name veth.20 type vlan id 20
ip link add veth.20-local link veth.20 type macvlan mode bridge
[...]
docker network create --driver=macvlan --subnet=192.168.XXX.0/24 --opt com.docker.network.driver.mpu=1500 --gateway 192.168.XXX.1 --opt parent=veth.20-local dockerbr20
내 서버 내에 해당 주소에 연결되는 도커 이미지가 있고 veth.20
해당 이미지는 veth.20
.
목적지에 상관없이 iptables
인터페이스에서 내 서버를 제외하고 나가는 패킷을 다루는 규칙을 추가하고 싶습니다 . (일부 패킷은 인터페이스 내에 veth.20
남아 있어야 하며 일부 패킷은 다른 VLAN으로 라우팅될 수 있습니다.)veth.20
다음 규칙을 시도했는데 어떤 이유로든 veth.20
도커 컨테이너에서 남겨진 패킷이 표시되지 않는 것 같습니다.
iptables -A POSTROUTING -t mangle -o veth.20 -j MARK --set-mark 3
iptables -A PREROUTING -t mangle -i veth.20 -j MARK --set-mark 3
iptables -A POSTROUTING -t nat -o veth.20 -j MARK --set-mark 3
iptables -A PREROUTING -t nat -i veth.20 -j MARK --set-mark 3
iptables -A OUTPUT -t mangle -o veth.20 -j MARK --set-mark 3
iptables -A INPUT -t mangle -i veth.20 -j MARK --set-mark 3
iptables -A FORWARD -i veth.20 -j MARK --set-mark 3
iptables -A FORWARD -o veth.20 -j MARK --set-mark 3
즉, 이러한 규칙은 다른 VLAN의 호스트에서 나가는 패킷 에 적용되지 iptables -L -n -v -t mangle
않는 것으로 보입니다.iptables -L -n -v -t nat
veth.20
ifconfig
나는 도커 이미지의 모든 패킷이 서버를 떠날 것임을 확인했습니다 veth.20
.
iptables -A OUTPUT -t mangle -o veth.20 -j MARK --set-mark 3
서버 또는 Docker 이미지에서 VLAN 20의 외부 시스템으로 패킷을 보내면 규칙이 적용되지만 veth.20
외부 VLAN 10 또는 VLAN 30 주소(표시되지 않음)로 라우팅되는 Docker 인터페이스를 통해 패킷을 보내면 규칙이 적용됩니다. 어떤 태그도 적용되지 않습니다.
나는 이것이 간단한 문제라고 생각하지만, 내가 시도한 어떤 것도 상자를 떠나는 데 사용한 인터페이스를 기반으로 패킷에 태그를 지정할 수 없습니다. 내가 무엇을 놓치고 있나요?
답변1
다른 규칙이 태그 규칙보다 먼저 나오는 것 같습니다.
iptables -I
대신 사용해 볼게요iptables -A