Apache e duas redes - somente em um aceita conexões

0

Tenho o Raspberry Pi 3 com duas redes configuradas (uma via ethernet, uma via wifi):

eth0      Link encap:Ethernet  HWaddr b8:27:eb:82:ca:0c
          inet addr:192.168.1.200  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::57ac:b6e:33c1:8bbb/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:797 errors:0 dropped:0 overruns:0 frame:0
          TX packets:797 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:219915 (214.7 KiB)  TX bytes:117516 (114.7 KiB)

wlan0     Link encap:Ethernet  HWaddr b8:27:eb:d7:9f:59
          inet addr:192.168.2.200  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::6463:5ba:3b28:6d39/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1532 errors:0 dropped:1215 overruns:0 frame:0
          TX packets:201 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:364160 (355.6 KiB)  TX bytes:29417 (28.7 KiB)
sigma@sigma:~ $ ip route show table main
default via 192.168.1.1 dev eth0  metric 202
default via 192.168.2.1 dev wlan0  metric 303
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.200  metric 202
192.168.2.0/24 dev wlan0  proto kernel  scope link  src 192.168.2.200  metric 303

A porta 80 está sendo encaminhada para que o dispositivo esteja disponível nas redes ips públicas.

Mas o problema é que o Apache parece responder apenas quando a conexão vem da primeira rede ... da segunda rede Estou recebendo um erro (no navegador), esse site não está disponível.

No começo eu pensei que poderia ser algum problema de encaminhamento de porta, mas usando iftop eu posso ver que de ambas as redes o navegador está tentando se conectar (eu posso ver uma conexão quando conectando através de ambas as redes).

O que estou fazendo de errado? Como faço para que funcione em ambas as redes ao mesmo tempo?

PS. Como você pode ver, no wlan0 há muitos pacotes descartados ( dropped:1215 ).

    
por Flash Thunder 05.12.2016 / 20:16

1 resposta

1

Por padrão, o Linux escolhe rotas para cada pacote baseado puramente em destino . Se ambas as interfaces fornecerem rotas padrão, a que tiver a métrica mais baixa será sempre selecionada - mesmo que seja tecnicamente para a rede errada e até mesmo se o pacote inicial chegar por meio de uma interface diferente.

Atualmente, você pode contornar isso criando tabelas de roteamento adicionais :

ip route add default via 192.168.1.1 dev eth0 table 100
ip route add default via 192.168.2.1 dev wlan0 table 200

ip rule add from all lookup main suppress_prefixlength 0
ip rule add from 192.168.1.0/24 lookup 100
ip rule add from 192.168.2.0/24 lookup 200

(Isso provavelmente não é perfeito, e tem que ser feito manualmente caso você esteja usando DHCP. Algo usando fwmark pode funcionar melhor.)

Teste usando:

ip route get 8.8.8.8
ip route get 8.8.8.8 from 192.168.1.200
ip route get 8.8.8.8 from 192.168.2.200
    
por 05.12.2016 / 22:30