Eu configurei uma conexão de ponte do meu celular conectado via USB ao meu laptop executando o Ubuntu 12.04 para outro computador conectado via cabo ethernet. A ponte conecta, assim, usb0
e eth0
. Eu configuro digitando os seguintes comandos no meu laptop:
$ ifconfig usb0 0.0.0.0 promisc up
$ brctl addbr br0
$ brctl addif br0 usb0 eth0
$ ifconfig br0 up
Agora, o outro computador (conectado ao meu laptop via ethernet) pode se conectar à internet. Agora eu uso os seguintes comandos para restaurar a conexão com a internet no meu laptop:
$ ifconfig br0 192.168.42.200 up
$ route del default
$ route add default gw 192.168.42.129 br0
Após esta operação, route
imprime a seguinte tabela de roteamento do kernel 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
Tudo funciona bem, os dois computadores podem se conectar à internet, mas de repente meu laptop perde a conexão.
Descobri que isso acontece porque a tabela de roteamento do kernel ip foi modificada. route
agora fornece a seguinte saída:
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
Aparentemente, o Ubuntu não gosta de estar conectado via br0
e, portanto, retorna para usb0
. A conexão pode ser restaurada, redefinindo novamente a tabela de rotas:
$ route del default
$ route add default gw 192.168.42.129 br0
Infelizmente, após alguns instantes, a conexão é perdida novamente. Uma vez que duraria até 5 minutos antes do Ubuntu decidir matá-lo novamente.
Como posso impedir o Ubuntu de modificar a tabela de roteamento do kernel?