【发布时间】:2015-04-02 12:58:03
【问题描述】:
很长一段时间以来,我在使用几个使用 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)配置错误造成的吗?
应用程序是否可以像使用 TCP 时一样侦听多个 IP 地址并从它在 UDP 上接收数据包的接口地址进行回复。
我知道您可以为特定 ip 绑定应用程序,但这不是可行的方法。
我看不出这种行为是由于 UDP 协议本身造成的,因为应用程序可以确定在哪个接口地址接收到数据包。
【问题讨论】:
标签: linux networking udp network-interface