我正在使用LXC容器。 我的每个容器都有一个在10.0.3.0/24中的IP地址。 我希望进入我的主机在某个端口的数据包被redirect到一个容器,所以我使用这个规则:
iptables -t nat -A PREROUTING -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000
这允许做(外包)# – >主机:3000 – >容器:3000
它工作很好。 然而,当我在一个容器(不是在这个先前的规则中使用的),并且我想要访问另一个主机(如HOST2)在端口3000,我的数据包被redirect到我的容器。 它确实:
(在容器包内)# – > HOST2:3000 – > HOST:3000 – > CONTAINER:3000
而不是(在容器包内)# – > HOST2:3000 – > HOST:3000 – > HOST2:3000
我试图改变我的规则
iptables -t nat -A PREROUTING -s 10.0.3.0/24 -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000
为了说:如果数据包来自一个容器,不适用规则,但是这是行不通的。 任何帮助将是伟大的,关心
这是我的iptables规则:
Chain PREROUTING (policy ACCEPT 154 packets, 29925 bytes) pkts bytes target prot opt in out source destination 4 240 DNAT tcp -- * * 10.0.3.0/24 0.0.0.0/0 tcp dpt:3000 to:10.0.3.5:3000 3 180 DNAT tcp -- * * 10.0.3.0/24 0.0.0.0/0 tcp dpt:3001 to:10.0.3.6:3001 Chain INPUT (policy ACCEPT 126 packets, 28400 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 25 packets, 1900 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 29 packets, 2140 bytes) pkts bytes target prot opt in out source destination 28 1525 MASQUERADE all -- * * 10.0.3.0/24 !10.0.3.0/24
通过不起作用,我的意思是,当我从容器内curl3000任何主机,我被redirect到我的容器:3000
-s标志只select与指定的主机或networking相匹配的stream量。 如果您想匹配除此之外的所有stream量,请使用
! -s 10.0.3.0/24
不要忘记逃避! 从引号或反斜杠的shell。