Usando 'ip route' para mudar a interface de rede alterando a rota padrão [duplicada]

0

Meu PC (Ubuntu 16.04) está conectado à rede doméstica por um cabo Ethernet. Eu quero mudar para outro quarto e usar Wifi. Eu quero mudar o mais perfeitamente possível (para evitar a desconexão VPN, por exemplo). Eu posso conectar a Wifi e Ethernet, mas se nesse ponto eu desligar os aplicativos Ethernet recebo um erro de conexão.

Então, acho que preciso de uma maneira de forçar o tráfego a usar a interface Wi-Fi antes de desconectar o fio. Com ambas as interfaces ativas, ip route diz:

default via 192.168.0.254 dev enp0s31f6  proto static  metric 100 
default via 192.168.0.254 dev wlp4s0  proto static  metric 600 
192.168.0.0/24 dev enp0s31f6  proto kernel  scope link  src 192.168.0.43  metric 100 
192.168.0.0/24 dev wlp4s0  proto kernel  scope link  src 192.168.0.7  metric 600 

Se eu usar:

ip route del default via 192.168.0.254 dev enp0s31f6 

o tráfego vai para um rastreamento.

Então, eu acho que tenho que ser um pouco mais sutil e manter as duas interfaces ativas por um tempo, mas tornar o Wi-Fi o preferido. Acredito que isso seja conseguido com uma métrica menor na interface Wifi do que na Ethernet. No entanto, se eu fizer:

ip route change default via 192.168.0.254 dev enp0s31f6 proto static metric 600

Eu recebo:

default via 192.168.0.254 dev enp0s31f6  proto static  metric 100 
default via 192.168.0.254 dev enp0s31f6  proto static  metric 600 

O comando parece substituir qualquer interface que tenha a métrica fornecida. E se eu tentar usar qualquer outro valor de métrica que seja 100 ou 600, obtenho:

RTNETLINK answers: No such file or directory

É claro que, se eu estiver em Wi-Fi e me reconectar à Ethernet, o tráfego mudará perfeitamente para ele ...

Então, quais das minhas suposições estão erradas? Existe uma solução?

    
por xenoid 04.09.2017 / 23:54

2 respostas

0

A solução mencionada por Hauke seria um caminho a percorrer. A desvantagem dessa abordagem é que você deve manter a interface ethernet (com fio) conectada até que todas as conexões "apaguem".

Outra abordagem, mais suave, mas também mais elaborada (por exemplo, não sei se você pode conseguir isso usando o NetworkManager, que sua métrica de rotas sugere que você esteja usando) seria usar a ligação para unir as interfaces . Dessa forma, ao desconectar sua conexão ethernet com fio, as conexões falhariam no uso de Wi-Fi de forma automática.

Eu já dei uma explicação mais detalhada sobre como configurar a ligação para conexões WiFi e com fio na minha resposta a Utilizar a porta WiFi como ligação redundante .

    
por 05.09.2017 / 07:40
0

Você deve eliminar a interface ethernet. Você pode fazer isso com a ajuda de iptables e do roteamento avançado. Com

iptables -m conntrack --ctstate NEW

você pode encontrar novas conexões em sua cadeia OUTPUT e marcá-las com --set-mark .

Você pode usar ip rule para rotear os pacotes com esta marca pelo WiFi.

Passado algum tempo, todos ou pelo menos a maior parte do seu tráfego utilizará o Wi-Fi sem sofrer interrupções.

Se você controlar o roteador, provavelmente poderá até salvar conexões que duram para sempre usando o SNAT.

    
por 05.09.2017 / 00:43