私のサーバーには珍しい設定があります。 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