ネットワークネームスペースで実行されるサービスがあり、それを外部の世界に公開するiptablesルールはほとんどありません。
次のコマンドは私の設定の例です。
sudo ip netns add ns1
sudo ip link add veth1_ type veth peer name veth1
sudo ip link set veth1_ netns ns1
sudo ip netns exec ns1 ifconfig veth1_ 192.168.0.2/24 up
sudo ifconfig veth1 192.168.0.1/24 up
sudo iptables -P FORWARD ACCEPT
sudo iptables -t nat -A POSTROUTING -o veth1 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -p tcp -m tcp --dport 50000 -j DNAT --to-destination 192.168.0.2:8000
sudo ip netns exec ns1 netcat -l 8000
:50000ポートを介してサービスにアクセスできるため、これまで問題はありません。
また、このネットワーク名前空間から開始され、特別なインターフェイスを介して特定のIPアドレスに送信されるパケットをルーティングする必要があります。これにはソースルーティングポリシーを使用します。
sudo ip route add 172.23.23.23 via X.X.X.X table 1000
sudo ip rule add from 192.168.0.2 iif veth1 to 172.23.23.23 lookup 1000
ホスト172.23.23.23でサービスにアクセスしようとすると、他のホストでは機能しますが機能しません。
私の質問は、このソースベースのポリシールーティングがトラフィックに影響を与えるのはなぜですか? veth1に入ってくるパケットは偽装されているので、答えはこれらの規則と一致してはいけません。私の推論は間違っていますか?
ありがとう、