【问题标题】:Why are UDP packets sent from default interface address instead of the address where the client packet is received?为什么UDP数据包是从默认接口地址而不是接收客户端数据包的地址发送的?
【发布时间】: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


【解决方案1】:

具体来说,openvpn 有 --multihome 选项可以正确处理这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2012-05-05
    相关资源
    最近更新 更多