绑定在第二个网络接口上不起作用

绑定在第二个网络接口上不起作用

我有两个网络接口 eth0 和 usb0。当 eth0 断开连接且仅 usb0 连接时,一切正常。

当两者连接时,指定 usb0 接口的地址时 ping -I 或 ssh -b 不起作用。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.22.2.0    0.0.0.0         255.255.255.0   U     1      0        0 eth0
192.168.2.0    0.0.0.0         255.255.255.0   U     1      0        0 usb0
0.0.0.0         172.22.2.1    0.0.0.0         UG    0      0        0 eth0

我错过了什么?

ping -I 192.168.2.10 216.58.217.142
PING 216.58.217.142 (216.58.217.142) from 192.168.2.10 : 56(84) bytes of data.
^C
--- 216.58.217.142 ping statistics ---
6 packets transmitted, 0 received, 100% packet loss, time 5404ms

另外,我没有 root 权限。

回答完下面的几个问题后,我意识到当只有 usb0 开启时,默认网关是 usb0 上的 ip。当两个都开启时,默认网关是 eth0 上的 ip。有没有办法在不使用 root 的情况下更改此行为?

答案1

您需要添加一个 IP 规则(基于源 IP 地址的路由)和一个单独的路由表。以下命令可以实现此目的:

$ sudo ip rule from 192.168.2.10 table 100
$ sudo ip route add default via 192.168.2.129 dev usb0 table 100

此后,您的ping -I命令应该可以正常工作。请注意,table 100可以为 分配任何未使用的数字。这只是一个任意数字,在上面显示的两个命令中应该相同。这两个命令告诉内核使用 IP192.168.2.129作为所有源 IP 为 的数据包的默认网关192.168.2.10

其它数据包将使用主表的默认网关172.22.2.1

您可能需要了解 Linux 高级路由文档

请注意,这些命令需要 root 权限!

相关内容