在不同的私有 IP 和接口别名上转发数据包

在不同的私有 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。

有任何想法吗?

答案1

我不确定你是否能用这种方式区分逻辑接口。试试

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 规则传入的流量中的“返回一半”数据包,那么不用担心,内核会为您做到这一点。

相关内容