到目前为止我还没有找到解决方案。我在 IPTables 方面经验不是很丰富,因此我们将不胜感激您提供的任何支持。
我有一台服务器,上面有一些虚拟机。主节点有一个远程IP和一个子网。每个虚拟机都是使用 Linux 虚拟化和路由网络创建的,并分配有一个本地 IP。然后,我使用 IP 表通过将所有流量从其专用远程 IP 转发到其本地 IP 来为它们分配远程 IP。这似乎在大多数情况下都有效,但从每个虚拟机发出的任何流量似乎都来自节点主 IP,而不是我转发到虚拟机的远程 IP。
这是我的 IPTables 规则:
iptables -t nat -A POSTROUTING -s 192.168.123.0/24 ! -d 192.168.123.0/24 -j MASQUERADE
iptables -A FORWARD -d 192.168.123.0/24 -o virbr1 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 192.168.123.0/24 -i virbr1 -j ACCEPT iptables -A FORWARD -i virbr1 -o virbr1 -j ACCEPT
然后对于每个虚拟机:
iptables -t nat -A PREROUTING -d {Their-remote-IP} -j DNAT --to-destination 192.168.123.3
iptables -A FORWARD -p tcp -d 192.168.123.3 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m udp -p udp -d 192.168.123.3 -j ACCEPT
iptables -A FORWARD -m icmp -p icmp -d 192.168.123.3 -j ACCEPT
设置示例
Primary Node IP: X.X.X.172
Additional IP X.X.X.173 1 (NATed to VM 1) to local address 192.168.123.2
Additional IP X.X.X.174 1 (NATed to VM 2) to local address 192.168.123.3
Additional IP X.X.X.175 1 (NATed to VM 3) to local address 192.168.123.4
但是,来自虚拟机的所有出站流量均通过 XXX172 发出
您能提供的任何建议将不胜感激。
答案1
这正是它的MASQUERADE
作用:它用数据包即将发出的接口的地址覆盖原始源地址。如果您想保留原始地址,请不要使用伪装。