Linux
在不同的私有 IP 和介面別名上轉發數據包
我有一個有 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 規則進入的流量中的“返回一半”數據包,那麼別擔心,核心會為你做這件事。