Iptables

iptables 埠轉發只針對一定範圍的IP

  • November 15, 2013

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

不起作用我的意思是當我從一個容器中捲曲 3000 個主機時,我被重定向到我的容器:3000

-s標誌只選擇與指定的主機或網路匹配的流量。如果要匹配除此之外的所有流量,請使用

! -s 10.0.3.0/24

並且不要忘記!使用引號或反斜杠將其從 shell 中轉義。

引用自:https://serverfault.com/questions/555232