如何跨网络命名空间设置透明代理(TPROXY 类型)?

如何跨网络命名空间设置透明代理(TPROXY 类型)?

我想设置一个跨网络命名空间的透明代理。我有两个网络命名空间,“nsx”和“nsy”,每个都有一个 veth 对,“nsx”对指向主机,“nsy”对指向“nsx”,方案如下(设置所有这些的命令):

ip netns add nsx
ip netns add nsy
ip link add vethx type veth peer name peerx netns nsx
ip link set vethx up
ip address add 10.0.0.1/24 dev vethx
ip netns exec nsx ip link set peerx up
ip netns exec nsx ip address add 10.0.0.2/24 dev peerx
ip netns exec nsx ip link add vethy type veth peer name peery netns nsy
ip netns exec nsx ip link set vethy up
ip netns exec nsx ip address add 10.0.1.1/24 dev vethy
ip netns exec nsx sysctl -w net.ipv4.conf.peerx.forwarding=1
ip netns exec nsx sysctl -w net.ipv4.conf.vethy.forwarding=1
ip netns exec nsx sysctl -w net.ipv4.ip_forward=1
ip netns exec nsy ip link set peery up
ip netns exec nsy ip address add 10.0.1.2/24 dev peery
ip netns exec nsy ip route add default via 10.0.1.1 dev peery
ip netns exec nsx ip rule add fwmark 1088 table 100
ip netns exec nsx ip route add local default dev vethy table 100
ip netns exec nsx iptables -t mangle -A PREROUTING -i vethy -p tcp -j TPROXY -s 10.0.1.2 --on-ip 10.0.0.1 --on-port 19040 --tproxy-mark 1088

透明配置在内部虚拟接口“vethy”中,指向运行在 10.0.0.1:19040 的透明代理。

当我尝试连接到网络命名空间“nsy”中的任何地址时,我会遇到超时并且连接不会被代理/转发。

iptables 规则中的透明代理没有“看到”地址:端口 10.0.0.1:19040

怎样才能使这一方案发挥作用呢?

相关内容