同时通过两个网络接口连接到同一IP

同时通过两个网络接口连接到同一IP

我正在开发一个 Debian 8 系统,该系统有两个网络接口(一个以太网和一个 3G 调制解调器),并且应该有两个同时连接到 MQTT 代理的连接,即应该通过两个接口建立连接。我使用的语言是Python,MQTT客户端是Paho。

为 Paho 的连接方法提供名为 bind_address 的参数应该完全符合我的要求。我只需创建两个 Paho 实例,并为它们提供我的两个接口的 IP 地址。

问题是只有其中之一能够连接。

我尝试 ping 显式指定接口 ( ping -I ifname a.b.c.d) 的代理 IP,并且该接口适用于两个接口。此外,为 Paho 的两个实例提供相同的 IP(以太网 IP)也是可行的。

此时,我的猜测是这个问题与路由有关,但这是我不太熟悉的领域。

我怎样才能解决这个问题?

ip addr按要求输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:04:25:18:e9:a9 brd ff:ff:ff:ff:ff:ff
    inet 82.195.211.80/23 brd 82.195.211.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::204:25ff:fe18:e9a9/64 scope link
       valid_lft forever preferred_lft forever
3: sit0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default
    link/sit 0.0.0.0 brd 0.0.0.0
    inet6 ::127.0.0.1/96 scope host
       valid_lft forever preferred_lft forever
4: wwan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 0a:71:b0:b9:ca:39 brd ff:ff:ff:ff:ff:ff
    inet 10.36.124.58/30 brd 10.36.124.59 scope global wwan0
       valid_lft forever preferred_lft forever
    inet6 fe80::871:b0ff:feb9:ca39/64 scope link
       valid_lft forever preferred_lft forever

ip route按要求输出:

default via 82.195.210.1 dev eth0  metric 202
default via 10.36.124.57 dev wwan0  metric 204
default via 82.195.210.1 dev eth0  proto static  metric 1024
10.36.124.56/30 dev wwan0  proto kernel  scope link  src 10.36.124.58  metric 204
10.36.124.58 via 127.0.0.1 dev lo  metric 204
82.195.210.0/23 dev eth0  proto kernel  scope link  src 82.195.211.80  metric 202
82.195.211.80 via 127.0.0.1 dev lo  metric 202

答案1

简单源策略路由可能会解决你的问题。创建一个新的路由表,名为移动的任意未使用的数字(此处为 100;这是可选的,您可以只使用该数字):

echo 100 mobile >> /etc/iproute2/rt_tables

设置此表以路由至您的 3G 网关:

ip route add default via 10.36.124.57 dev wwan0 table mobile
ip route flush cache

最后,为您的 3G 源地址添加规则以使用新设置移动的桌子:

ip rule add from 10.36.124.58 table mobile

我从你的问题中获取了接口名称(wwan0)和地址。可以合理地预期接口名称会保持稳定(至少在您将另一个 3G 调制解调器连接到计算机之前),但本地地址和网关地址可能会在每次连接时发生变化。您可能想要编写此设置的脚本。

相关内容