rmo*_*njo 3 iptables port-forwarding filtering lxc
我正在使用 LXC 容器。我的每个容器在 10.0.3.0/24 中都有一个 ip 地址。我希望通过某个端口进入我的主机的数据包被重定向到一个容器,所以我使用以下规则:
iptables -t nat -A PREROUTING -p tcp --dport 3000 -j DNAT --to-destination 10.0.3.4:3000
Run Code Online (Sandbox Code Playgroud)
这允许做(外部数据包)# --> HOST:3000 --> CONTAINER:3000
它工作得很好。但是,当我在一个容器内(不是上一条规则中使用的那个),并且我想访问端口 3000 上的另一台主机(比如 HOST2)时,我的数据包被重定向到我的容器。它确实:
(容器包内)# --> 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
Run Code Online (Sandbox Code Playgroud)
为了说:如果数据包来自容器,请不要应用该规则,但这不起作用。任何帮助都会很棒,问候
这是我的 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
Run Code Online (Sandbox Code Playgroud)
不起作用我的意思是当我从容器内卷曲 3000 任何主机时,我被重定向到我的容器:3000
这些-s
标志仅选择与指定的主机或网络匹配的流量。如果要匹配除此之外的所有流量,请使用
! -s 10.0.3.0/24
Run Code Online (Sandbox Code Playgroud)
并且不要忘记!
使用引号或反斜杠将其从 shell 中转义。