我如何知道我的多个网络接口是否正常工作?

我如何知道我的多个网络接口是否正常工作?

在 Ubuntu 14.04 x86-64 上,我有一个无线宽带连接和一个 USB 网络共享连接(它是 4G,不是同一个无线连接):

路线-n
内核 IP 路由表
目标网关 Genmask 标志 指标参考使用 Iface
0.0.0.0 192.168.42.129 0.0.0.0 UG 0 0 0 usb0
192.168.0.0 0.0.0.0 255.255.255.0 U 9 0 0 WLAN1
192.168.42.0 0.0.0.0 255.255.255.0 U 1 0 0 usb0

我还有以下内容:

是否配置

...

usb0 链路封装:以太网 HWaddr 02:36:2c:04:05:7c  
          inet 地址:192.168.42.248 广播:192.168.42.255 掩码:255.255.255.0
          inet6 地址:fe80::36:2cff:fe04:57c/64 范围:链接
          上行广播运行多播 MTU:1500 度量:1
          RX 数据包:3367 错误:1 丢弃:0 超限:0 帧:1
          TX 数据包:3669 错误:0 丢弃:0 超限:0 载波:0
          碰撞:0 txqueuelen:1000
          RX 字节:2434689 (2.4 MB) TX 字节:637911 (637.9 KB)

wlan1 链路封装:以太网 HWaddr 14:cc:20:75:e1:8d  
          inet 地址:192.168.0.4 Bcast:192.168.0.255 掩码:255.255.255.0
          inet6 地址:fe80::16cc:20ff:fe75:e18d/64 范围:链接
          上行广播运行多播 MTU:1500 度量:1
          RX 数据包:3806 错误:0 丢弃:0 超限:0 帧:0
          TX 数据包:4110 错误:0 丢弃:0 超限:0 载波:0
          碰撞:0 txqueuelen:1000
          RX 字节:2283536 (2.2 MB) TX 字节:583794 (583.7 KB)

一切看起来都按预期工作(即两个网络连接都已启动,我的机器有 2 个 IP,...)。
然后我想使用绑定 垫片强制一个连接(或另一个连接)上的进程,并且只有当我指定默认连接/网关。
以下工作(请注意,这是在绑定的 USB - 4G 上):

BIND_ADDR="192.168.42.248" LD_PRELOAD=./bind.so chromium-浏览器

而这不行(我的宽带):

BIND_ADDR="192.168.0.4" LD_PRELOAD=./bind.so chromium-浏览器

当然,当我拔下 USB 电话时,wlan0神奇地又开始工作了......

我做错了什么?有什么想法吗?

答案1

绑定不起作用的原因与绑定无关,这也是我使用的技巧,并且与您在 NIC 上只有一个默认网关有关,usb0而您应该在任一 NIC 上都有一个默认网关,否则到 WAN 站点的连接wlan0将不会被路由。

Linux 允许在 的规则下存在多个网关(每个接口一个,无论是否是虚拟的)policy-based routing。您需要做的是拥有两个单独的路由表,一个用于usb0,一个用于wlan0,以及一条规则告诉内核使用哪一个;然后,binding任一接口的应用程序都将允许您访问 WAN 站点。

您可以按如下方式处理两个路由表:首先,创建两个表(用合理的名称替换和,例如 IP1、DEV1 等):

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

向每个路由表添加一个网关(如果需要):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

然后是默认路由:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

然后根据源地址选择路由表的规则:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

现在您可以将应用程序绑定到任一接口。

相关内容