setup: o linux é configurado com a interface Eth0 e wwan0. Eth0 está conectado a ethernet e wwan0 está conectado via dongle. Ambos da conexão estão tendo conectividade com a Internet.
Problema: Quando eu levanto o meu dispositivo, a rota padrão é eth0 e também posso fazer ping da eth0. Embora wwan0 também esteja ativo, mas não é possível fazer ping através de eth0. Se eu desconectar eth0, o ping funciona bem com o wwan0. Agora, se eu inserir a ethernet novamente, não posso fazer ping com eth0. No meu caso de teste, eu preciso lidar com a inserção frequente de ethernet e dongle.
ifconfig -a
eth0 Link encap:Ethernet HWaddr 70:B3:D5:9A:EF:FC
inet addr:192.168.2.166 Bcast:192.168.3.255 Mask:255.255.252.0
inet6 addr: fe80::72b3:d5ff:fe9a:effc%1996138192/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:129768 errors:0 dropped:0 overruns:0 frame:0
TX packets:61524 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12669568 (12.0 MiB) TX bytes:1411543 (1.3 MiB)
wlan0 Link encap:Ethernet HWaddr 60:F1:89:39:07:8E
inet addr:192.168.42.1 Bcast:192.168.42.255 Mask:255.255.255.0
inet6 addr: fe80::62f1:89ff:fe39:78e%1996138192/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2865 errors:0 dropped:0 overruns:0 frame:0
TX packets:704 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:530933 (518.4 KiB) TX bytes:152134 (148.5 KiB)
wwan0 Link encap:Ethernet HWaddr 00:1E:10:1F:00:00
inet addr:10.166.235.232 Bcast:10.166.235.239 Mask:255.255.255.240
inet6 addr: fe80::21e:10ff:fe1f:0%1996138192/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:194 errors:0 dropped:0 overruns:0 frame:0
TX packets:476 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:30622 (29.9 KiB) TX bytes:40449 (39.5 KiB)
Rota quando eth0 é padrão
default 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
8.8.8.8 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
10.166.235.224 * 255.255.255.240 U 0 0 0 wwan0
59.144.127.17 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.0 * 255.255.252.0 U 0 0 0 eth0
192.168.2.1 * 255.255.255.255 UH 0 0 0 eth0
192.168.42.0 * 255.255.255.0 U 0 0 0 wlan0
Status do ping no momento:
# ping -I eth0 -c 3 -W 10 www.google.com
PING www.google.com (172.217.166.36): 56 data bytes
64 bytes from 172.217.166.36: seq=0 ttl=57 time=17.688 ms
64 bytes from 172.217.166.36: seq=1 ttl=57 time=16.523 ms
64 bytes from 172.217.166.36: seq=2 ttl=57 time=16.279 ms
--- www.google.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 16.279/16.830/17.688 ms
# ping -I wwan0 -c 3 -W 10 www.google.com
PING www.google.com (172.217.166.36): 56 data bytes
--- www.google.com ping statistics ---
3 packets transmitted, 0 packets received, 100% packet loss
Rota de rastreamento para wwan0
# traceroute -i wwan0 www.google.com
traceroute to www.google.com (172.217.166.36), 30 hops max, 38 byte packets
1 local (10.166.235.232) 2996.178 ms !H 2995.670 ms !H 2999.194 ms !H
Here packets are getting dropped at wwan0 interface only.
Iptable -L
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpts:0:1023
ACCEPT udp -- anywhere anywhere udp dpts:0:1023
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 192.168.0.0/16
ACCEPT all -- 192.168.0.0/16 anywhere
ACCEPT all -- anywhere 192.168.0.0/16
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
A tabela IP é a mesma quando wwan0 é a rota padrão.
Em suma, entre duas interfaces, posso sempre fazer ping apenas na interface com o padrão. Por favor me ajude para que eu possa pingar em qualquer interface a qualquer momento.
Eu tentei adicionar rota padrão para wwan0 com
ip route change to default dev wwan0 via 10.166.235.230
mas depois disso eu posso pingar através do wwan0 mas não através do eth0.
EDIT1
Eu posso resolver esse problema adicionando rotas para eth0 e wwan0 toda vez que eu as conecto de volta. Mas agora, preciso adicionar o gateway para rotear cada interface. Na minha tabela de rotas de alguma forma, eu posso ver apenas um gateway (padrão), não o outro. Se eu puder obter o gateway para a interface, posso executar um script que será executado assim que algum plug / un-plug acontecer e possa adicionar rota novamente. Por favor me ajude com relação a isso.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.2.1 0.0.0.0 UG 0 0 0 eth0
8.8.8.8 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
**10.177.88.96 * 255.255.255.240 U 0 0 0 wwan0**
59.144.127.17 192.168.2.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.0 * 255.255.252.0 U 0 0 0 eth0
192.168.2.1 * 255.255.255.255 UH 0 0 0 eth0