我已经建立了一个桥接连接,从通过 USB 连接到运行 Ubuntu 12.04 的笔记本电脑的手机到通过以太网电缆连接的另一台计算机。因此,桥接连接了usb0
。eth0
我通过在笔记本电脑上输入以下命令来设置它:
$ ifconfig usb0 0.0.0.0 promisc up
$ brctl addbr br0
$ brctl addif br0 usb0 eth0
$ ifconfig br0 up
现在另一台计算机(通过以太网连接到我的笔记本电脑)可以连接到互联网。我现在使用以下命令恢复笔记本电脑上的互联网连接:
$ ifconfig br0 192.168.42.200 up
$ route del default
$ route add default gw 192.168.42.129 br0
该操作完成后,route
会打印出以下内核ip路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.42.129 0.0.0.0 UG 0 0 0 br0
link-local * 255.255.0.0 U 1000 0 0 usb0
192.168.42.0 * 255.255.255.0 U 0 0 0 br0
192.168.42.0 * 255.255.255.0 U 1 0 0 usb0
一切正常,两台计算机都可以连接到互联网,但突然我的笔记本电脑失去了连接。
我发现发生这种情况是因为内核 IP 路由表被修改了。route
现在给出以下输出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.42.129 0.0.0.0 UG 0 0 0 usb0
link-local * 255.255.0.0 U 1000 0 0 usb0
192.168.42.0 * 255.255.255.0 U 1 0 0 usb0
显然,Ubuntu 不喜欢通过 连接br0
,因此切换回usb0
。不过,可以通过再次重置路由表来恢复连接:
$ route del default
$ route add default gw 192.168.42.129 br0
不幸的是,过了一会儿,连接又断开了。有一次,它甚至持续了 5 分钟,然后 Ubuntu 决定再次将其关闭。
如何防止 Ubuntu 修改内核 IP 路由表?
答案1
好的,如果其他人遇到同样的问题,下面是我解决问题的方法:我只需通过输入以下命令来禁用网络管理器:
$ stop network-manager
请注意,网络管理器在退出之前会清除路由表并关闭所有连接,因此您必须重新启动所需的所有接口。
我必须另外输入以下命令才能使我的桥再次工作:
$ ifconfig usb0 up
$ ifconfig eth0 up
我需要进一步编辑/etc/resolv.conf
以使地址解析恢复工作。我添加了以下几行,将 Google DNS 服务器设置为名称服务器:
nameserver 8.8.8.8
nameserver 8.8.4.4
现在一切都按预期运行,两台计算机都已连接互联网。