Linux下实现服务器多IP进行UDP通讯

2021-06-15 11:02:01 浏览数 (1)

文章标题有点绕口,简单解释下,也就是如果服务器存在多个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服务。

0 人点赞