Linux
iptables:如何將目標埠為 80 的數據包從 eth0 轉發到 eth1?
我的 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 轉發非常相似的問題。
話雖如此,您希望您的主機成為網關,但更具體地說,僅適用於協議
HTTP
和HTTPS
(80 / 443)。為此,您應該:
- 能夠在這兩個介面之間轉發流量
- 轉發目標埠為 80 (HTTP) 的數據包
- 使用目標埠 443 (HTTPS) 轉發數據包
- 由於
iptables
(netfilter
) 是stateless packet filtering system
, 接受返回的數據包- 源 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 機器充當網關)。