文章标题有点绕口,简单解释下,也就是如果服务器存在多个IP,我们进行测试,两个IP的TCP数据包都可以同时到达,但是UDP数据包除了主IP外,其他IP会被本地链路全部丢弃。所以,此文章就是让多个服务器IP的TCP&UDP同时可以工作。
如何实现?
代码语言:javascript复制我们需要对非主IP进行UDP-NAT
因为副IP相对于主IP可以看作是内网IP,因此可以做DNAT操作。
假如一个机器存在以下IP:
代码语言:javascript复制192.168.100.1
192.168.100.2
网卡情况如下:
代码语言:javascript复制eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:16:3c:93:d6:09 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet 192.168.100.2/24 brd 192.168.100.255 scope global secondary noprefixroute eth0:0
valid_lft forever preferred_lft forever
主IP为192.168.100.1,副IP为192.168.100.2,我们对传入192.168.100.2的UDP数据包进行DNAT,这样可以实现每个IP的UDP都可以使用。
代码语言:javascript复制iptables -t nat -A PREROUTING -p udp --dst 192.168.100.2 -j DNAT --to-destination 192.168.100.1
iptables-save
测试正常后,我们可以将其写入开机自启:
代码语言:javascript复制echo 'iptables -t nat -A PREROUTING -p udp --dst 192.168.100.2 -j DNAT --to-destination 192.168.100.1' >>/etc/rc.local
chmod x /etc/rc.local
这样即可让服务器多个IP都可以正常使用UDP服务。