Linux

iptables:如何將目標埠為 80 的數據包從 eth0 轉發到 eth1?

  • October 15, 2012

我的 Linux 機器上有來自多台機器的 http 和 https 流量到我的 eth0,但我想將這些流量轉發到可以訪問網際網路的 eth1。並對來自 80 和 443 的流量進行互補操作,將它們從 eth1 路由到 eth0,以便它們到達創建 Web 請求的機器。

我嘗試了以下 iptables 命令,但沒有幫助:

iptables -A FORWARD -p tcp --dport 80 -o eth1 -j ACCEPT
iptables -A FORWARD -p tcp --sport 80 -o eth0 -j ACCEPT

我不知道該怎麼做。

=====================

的輸出ip addr show

$ /sbin/ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
   link/ether <mac_address_of_eth0> brd ff:ff:ff:ff:ff:ff
   inet 10.10.12.131/24 brd 10.10.12.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
   link/ether <mac_address_of_eth1> brd ff:ff:ff:ff:ff:ff
   inet 172.16.1.1/24 brd 172.16.1.255 scope global eth1

首先,這是一個與兩個介面之間的 iptables 轉發非常相似的問題。

話雖如此,您希望您的主機成為網關,但更具體地說,僅適用於協議HTTPHTTPS(80 / 443)。為此,您應該:

  1. 能夠在這兩個介面之間轉發流量
  2. 轉發目標埠為 80 (HTTP) 的數據包
  3. 使用目標埠 443 (HTTPS) 轉發數據包
  4. 由於iptables( netfilter) 是stateless packet filtering system, 接受返回的數據包
  5. 源 NAT(更改原始 IP 地址)到您主機的 IP

翻譯成iptables:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 80  -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED \
  -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

假設您網路上的其他主機正在使用您的主機訪問網際網路(這意味著您的 linux 機器充當網關)。

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