Я установил мостовое соединение со своего мобильного телефона, подключенного через USB, к ноутбуку, на котором установлена Ubuntu 12.04, с другим компьютером, подключенным через кабель Ethernet. Таким образом, мост соединяет usb0
и eth0
. Я установил его, набрав на своем ноутбуке следующие команды:
$ ifconfig usb0 0.0.0.0 promisc up
$ brctl addbr br0
$ brctl addif br0 usb0 eth0
$ ifconfig br0 up
Теперь другой компьютер (подключенный к моему ноутбуку через Ethernet) может подключаться к Интернету. Теперь я использую следующие команды для восстановления интернет-соединения на моем ноутбуке:
$ 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 ядра?
Хорошо, в случае, если у кого-то еще есть такая же проблема, вот как я ее решил: я просто отключил сетевой менеджер, набрав следующую команду:
$ stop network-manager
Обратите внимание, что сетевой менеджер очищает таблицу маршрутизации. и отключает все соединения до его выхода, поэтому вам необходимо восстановить все необходимые интерфейсы.
Мне пришлось дополнительно ввести следующие команды, чтобы мой мост снова заработал:
$ ifconfig usb0 up
$ ifconfig eth0 up
Далее мне нужно было отредактировать /etc/resolv.conf
, чтобы восстановить разрешение адреса. Я добавил следующие строки, которые устанавливают DNS-серверы Google в качестве серверов имен:
nameserver 8.8.8.8
nameserver 8.8.4.4
Теперь все работает как положено, оба компьютера подключены к Интернету.