iptables 端口转发只针对特定范围的 IP

iptables 端口转发只针对特定范围的 IP

我正在使用 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

这允许执行(外部数据包)# --> 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

意思是:如果数据包来自容器,则不应用规则,但这不起作用。任何帮助都很好,问候

这是我的 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

不起作用的意思是,当我从容器内 curl 3000 个主机时,我会被重定向到我的容器:3000

答案1

标志-s仅选择与指定主机或网络匹配的流量。如果要匹配所有流量除了即使用

! -s 10.0.3.0/24

并且不要忘记!使用引号或反斜杠将其从 shell 中转义。

相关内容