Iptables

轉發流量進出,NAT iptables

  • November 24, 2014

我有一個盒子設置為啟用了 NAT ipv4 轉發的 DHCP 伺服器。目前該盒子使用eth0連接到本地網路並可以訪問網際網路,它還有另外 3 個介面eth1eth2eth3連接到其他盒子。其他 3 個盒子都可以與主盒子相互通信。

我想允許其他 3 個盒子通過其eth0介面上的主盒子訪問網際網路,所以我相信我需要設置 iptable 規則。沒有特殊的埠規則或任何特定的東西,我只是希望來自eth1eth2eth3的流量在訪問公共網際網路時通過eth0 。

為了徹底,這是我的/etc/network/interface文件

auto lo

iface lo inet loopback
iface eth0 inet dhcp

iface eth1 inet static
 address 192.168.1.1
 netmask 255.255.255.0

iface eth2 inet static
 address 192.168.2.1
 netmask 255.255.255.0

iface eth3 inet static
 address 192.168.3.1
 netmask 255.255.255.0

從這里關於 SO 和網路的資訊來看,這就是我的 iptables-save 目前的樣子

*nat
:PREROUTING ACCEPT [1799:327587]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [23:2190]
-A POSTROUTING -j MASQUERADE 
COMMIT
*filter
:INPUT ACCEPT [3474:500657]
:FORWARD ACCEPT [24:1613]
:OUTPUT ACCEPT [857:128814]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -s 192.168.1.101 -i eth1 -o eth0 -m conntrack --ctstate NEW -j ACCEPT 
-A FORWARD -s 192.168.2.102 -i eth2 -o eth0 -m conntrack --ctstate NEW -j ACCEPT 
-A FORWARD -s 192.168.3.103 -i eth3 -o eth0 -m conntrack --ctstate NEW -j ACCEPT 
COMMIT

規則在通過重新啟動時保持不變pre-up

由於我對 iptable 規則沒有很好的理解,因此目前有關 serverfault 的問題很難理解/理解我實際上在做什麼。

您編寫規則的方式存在一些問題。

-A POSTROUTING -j MASQUERADE 

該規則適用範圍太廣。您只需要這樣的規則來處理從 LAN 離開您的網路的連接。一種方法是指定它適用於哪個傳出介面:

-A POSTROUTING -o eth0 -j MASQUERADE 

此外,您的過濾器表沒有多大意義:

*filter
:INPUT ACCEPT [3474:500657]
:FORWARD ACCEPT [24:1613]
:OUTPUT ACCEPT [857:128814]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -s 192.168.1.101 -i eth1 -o eth0 -m conntrack --ctstate NEW -j ACCEPT 
-A FORWARD -s 192.168.2.102 -i eth2 -o eth0 -m conntrack --ctstate NEW -j ACCEPT 
-A FORWARD -s 192.168.3.103 -i eth3 -o eth0 -m conntrack --ctstate NEW -j ACCEPT 
COMMIT

您的每個規則都根據特定標準接受數據包。然而,這一切都是多餘的,因為最終您將使用鏈的預設策略來接受它們。所以結果是你接受了一切,如果你刪除了所有的規則,情況也是如此。

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