如何在本地模拟LAN地址?

如何在本地模拟LAN地址?

我遇到这种情况:一个软件获得了硬编码的 IP 地址(假设它是 196.10.10.100:20000),它绑定了一个套接字并将 TCP 和 UDP 流量发送到 196.10.10.9:20000(也是硬编码的)。问题是,为了使系统正常工作,该软件的多个实例应该位于不同的不同主机上。没有机会修改软件。

原始设置涉及某种非 RFC 兼容的网络硬件,该硬件将第一个 LAN 中的 MAC 映射到第二个 LAN 中的 MAC。现在需要在没有任何额外网络硬件的情况下对其进行模拟 - 只需客户端的每个实例和服务器的主机即可。有(新的)服务器软件期望接受数据包并响应,为每个实例使用单独的 NIC,允许 IP 地址位于任意子网中。

我没有看到服务器部分有任何问题,但现在有一种方法可以将具有相同 IP 的主机连接到服务器。我认为使用系统软件来解决它没有问题,但我不知道如何在客户端主机上模拟具有所需IP的接口并将流量重定向到服务器,以将流量从服务器发送到客户端软件(这会期望它)来自不存在的 196.10.10.9)。有人告诉我可以使用 iptables,但我所知道的 iptables 是数据包过滤\NAT 软件。我可能会怀疑这个建议,因为告诉我这个建议的人知道的甚至比我还少。我有部分解决方案,没有 DMZ 并将流量重定向到正确的 ip

ip netns add vn
ip link add v-eth0 type veth peer name v-local
ip link set v-local netns vn

ip addr add 196.10.10.1/24 dev v-eth0
ip netns exec vn ip addr add 196.10.10.100/24 dev v-local
ip link set v-eth0 up
ip netns exec vn ip link set v-local up

ip netns exec vn ip route add default via 196.10.10.1
echo 1 > /sys/net/ipv4/ip_forward
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 196.10.10.0/255.255.255.0 -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o v-eth0 -j ACCEPT
iptables -A FORWARD -o eth0 -i v-eth0 -j ACCEPT

此设置允许命名空间容器中的进程访问真实网络,但不允许我需要的重定向。假设 eth0 的 IP 地址为 196.10.20.100,服务器的 IP 地址为 196.10.20.9。我应该如何修改上面的脚本才能

1) 将数据包从 196.10.10.100 重定向到 196.10.10.9,因此它们将被发送到 196.10.20.9,并且

2) 将 196.10.20.100 收到的数据包重定向到 10.10.10.100?

相关内容