Iptables

為什麼埠轉發在此設置中不起作用?

  • January 17, 2015

我正在嘗試設置一個 docker 虛擬化環境。這是這個問題的後續。

我有一個虛擬的 eth0:0 介面,我想使用 iptables 轉發它。

公共,主 I​​P 是 93.93.93.93

故障轉移 IP 為 5.6.7.8

我有一個配置 IP 別名的伺服器:

/etc/網路/介面

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
       address 93.93.93.93
       netmask 255.255.255.0
       network 93.93.93.0
       broadcast 93.93.93.255
       gateway 93.93.93.254

# IPFO 1
   post-up /sbin/ifconfig eth0:0 5.6.7.8 netmask 255.255.255.255 broadcast 5.6.7.8
   pre-down /sbin/ifconfig eth0:0 down

這樣,當我從外部 ping eth0:0 時,它可以工作。問題似乎是從路由開始的?

root@aldebaran:~# ip route
default via 93.93.93.254 dev eth0 
93.93.93.0/24 dev eth0  proto kernel  scope link  src 94.23.55.226 
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.42.1 

沒有 eth0.0 的跡象

然後我添加 iptables 規則:

iptables -A PREROUTING -t nat -i eth0:0 -p tcp --dport 80 -j DNAT --to 172.17.0.2:80
iptables -A FORWARD -p tcp -d 172.17.0.2 --dport 80 -j ACCEPT

然後我嘗試

root@aldebaran:~# curl 172.17.0.2:80
WORKS!
root@aldebaran:~# curl IP_FAILOVER
curl: (7) Failed to connect to IP_FAILOVER port 80: Connection refused

根據教程,我沒有正確設置路由。這是正確的嗎?我該如何解決?

問題是我使用了 IP 別名,它創建了一個 Iptables 無法使用的介面。Eth0:0 不是有效的目標。我應該改用:

iptables -t nat -I PREROUTING --dst 5.6.7.8 -p tcp --dport 80 -j DNAT --to 172.17.0.2:80
iptables -A FORWARD -p tcp -d 172.17.0.2 --dport 22 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.17.0.2 -j MASQUERADE

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