Linux

在不同的私有 IP 和介面別名上轉發數據包

  • June 20, 2013

我有一個有 2 個公共 IP 的伺服器。我配置了介面別名來保存第二個 IP:

# ifconfig
vmbr0   Link encap:Ethernet  HWaddr 4c:72:b9:4f:18:5f  
         inet addr:public.ip.number.1 Bcast:x.x.x.255  Mask:255.255.255.0

vmbr0:0   Link encap:Ethernet  HWaddr 4c:72:b9:4f:18:5f  
         inet addr:public.ip.number.2  Bcast:x.x.x.255  Mask:255.255.255.0

我想使用 iptables 將 vmbr0 埠 80 上的流量重定向到 10.0.0.100,並將 vmbr0:0 埠 80 上的流量重定向到 10.0.0.101。

我嘗試了什麼:

# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o vmbr0 -j SNAT --to public.ip.number.1
# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o vmbr0:0 -j SNAT --to public.ip.number.2
# iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.0.0.100:80
# iptables -t nat -A PREROUTING -i vmbr0:0 -p tcp --dport 80 -j DNAT --to 10.0.0.101:80

但無論我使用一個還是另一個公共 IP,所有流量都會流向 10.0.0.100:80。

有任何想法嗎?

我不確定您是否可以通過這種方式區分邏輯介面。試試吧

iptables -t nat -A PREROUTING -d public.ip.number.1 -p tcp --dport 80 -j DNAT --to 10.0.0.100:80
iptables -t nat -A PREROUTING -d public.ip.number.2 -p tcp --dport 80 -j DNAT --to 10.0.0.101:80

DNAT規則。我不知道該怎麼處理另一對,因為它們毫無意義。他們顯然想根據數據包發出的虛擬介面設置源地址 - 但選擇發出的虛擬介面將取決於源地址!如果他們應該修復通過 DNAT 規則進入的流量中的“返回一半”數據包,那麼別擔心,核心會為你做這件事。

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