很长一段时间以来,我在使用几个使用 UDP 协议进行通信的软件(Teamspeak 3、netcat、openvpn 的早期版本)时遇到了麻烦。今天我发现了问题。
我的主要目标是在 udp 上使用 openvpn,这似乎不适用于具有多个 ip 地址的服务器(运行 Ubuntu Server Kernel 3.2.0-35-generic)。
使用以下配置:
# ifconfig -a
eth0 Link encap:Ethernet HWaddr 11:11:11:11:11:11
inet addr:1.1.1.240 Bcast:1.1.1.255 Mask:255.255.255.224
...
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 1.1.1.240
broadcast 1.1.1.255
netmask 255.255.255.224
gateway 1.1.1.225
up ip addr add 1.1.1.249/27 dev eth0
down ip addr del 1.1.1.249/27 dev eth0
up ip addr add 2.2.2.59/29 dev eth0
down ip addr del 2.2.2.59/29 dev eth0
up route add -net 2.2.2.56 netmask 255.255.255.248 gw 2.2.2.57 eth0
# default route to access subnet
up route add -net 1.1.1.224 netmask 255.255.255.224 gw 1.1.1.225 eth0
问题:
服务器上的一个简单 tcpdump 显示在2.2.2.59收到的 udp 数据包(使用 netcat 和 openvpn 测试)是从1.1.1.240(客户端:123.11.22.33)回复的
13:55:30.253472 IP 123.11.22.33.54489 > 2.2.2.59.1223: UDP, length 5
13:55:36.826658 IP 1.1.1.240.1223 > 123.11.22.33.54489: UDP, length 5
问题:
这个问题是由于网络接口或应用程序本身(OpenVPN、netcat)的错误配置造成的吗?
/一个应用程序是否可以侦听多个IP地址并从它在UDP上接收数据包的接口地址进行回复,就像它在使用TCP时所做的那样。
我知道您可以为特定 IP 绑定应用程序,但这不是可行的方法。
我看不出这种行为是由于 UDP 协议本身造成的,因为应用程序可以确定在哪个接口地址接收到数据包。