ssh através de múltiplas interfaces eth0 wlan0 para internet

ssh através de múltiplas interfaces eth0 wlan0 para internet

Estou tentando abrir vários túneis ssh reversos por meio de interfaces diferentes (em um raspberry pi com raspbian strech) para um substituto.

Dito isto, tenho problemas para abrir conexões ssh de saída em diferentes interfaces. Neste momento existe:

  • eth0 como IP estático (192.168.1.200)
  • wlan0 via dhcp (192.168.178.100)

Vincular o ssh ao endereço IP está funcionando para "eth0", mas não para "wlan0":

  • ssh -b 192.168.1.200 user@externalipestá funcionando
  • ssh -b 192.168.178.100 user@externalipéNÃOtrabalhando

além disso, posso rastrear a rota através de ambas as interfaces para a internet:

  • ssh -b 192.168.1.200 user@externalipestá funcionando

sudo traceroute -i wlan0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.178.1 (192.168.178.1)  12.528 ms  17.229 ms  21.757 ms
 2  192.0.0.1 (192.0.0.1)  26.576 ms  41.445 ms  47.408 ms ...
  ...

sudo traceroute -i eth0 google.com

traceroute to google.com (172.217.21.14), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  0.537 ms  0.404 ms  0.570 ms
  ...

Alguma idéia de como fazer o ssh funcionar em ambas as interfaces?

rota -n:

0.0.0.0         192.168.1.1     0.0.0.0         UG    202    0        0 eth0
0.0.0.0         192.168.178.1   0.0.0.0         UG    303    0        0 wlan0
192.168.0.0     0.0.0.0         255.255.252.0   U     202    0        0 eth0
192.168.178.0   0.0.0.0         255.255.255.0   U     303    0        0 wlan0

Responder1

Por padrão, apenas a primeira entrada correspondente na tabela de roteamento (principal) será usada para determinar a rota até o destino. Além disso, um pacote que não for recebido nesta entrada correspondente será descartado devido arp_filter.

Sua configuração requer política de roteamento: a rota agora deve depender não apenas do destino, mas também da origem, armazenando múltiplas rotas em múltiplas tabelas de roteamento e selecionando a tabela adequada, portanto rotear, dependendo da origem. A afirmação anterior permanece verdadeira: a primeira rota correspondente na tabela será escolhida, mas poderá ser escolhida em (uma) tabela(s) diferente(s).

Então você primeiro define tabelas de roteamento adicionais (valores de tabela escolhidos "arbitrariamente") para complementar o que não funcionaria apenas usando a maintabela:

ip route add table 1921681    default via 192.168.1.1 dev eth0
ip route add table 192168178  default via 192.168.178.1 dev wlan0

Então o seletor de fonte direito é usado para escolher a tabela adequada comip rule. Aqui apenas uma nova regra seria suficiente, mas por uma questão de simetria, ambas serão adicionadas, permitindo mais flexibilidade na tabela de roteamento principal, por exemplo, ao alterar métricas (veja mais adiante):

ip rule add from 192.168.0.0/22   lookup 1921681
ip rule add from 192.168.178.0/24 lookup 192168178

As regras agora são:

# ip rule
0:  from all lookup local 
32764:  from 192.168.178.0/24 lookup 192168178 
32765:  from 192.168.0.0/22 lookup 1921681 
32766:  from all lookup main 
32767:  from all lookup default 

Considere as entradas 32764et 32765como exceções à entrada 32766que consulta a maintabela usual.

É isso, agora seus comandos anteriores funcionarão como pretendido, ambas as rotas poderão funcionar ao mesmo tempo, quando você indicar o IP de origem com a opção -b.

Se você não indicar o IP de origem, o sistema não corresponderá imediatamente às regras adicionais e às tabelas de roteamento e adotará como padrão a escolha feita ao usar a tabela principal: a primeira rota correspondente vencerá, selecionando assim a origem 192.168.1.200na sua configuração atual .

Para repetir novamente, se você não indicar explicitamente um IP de origem (como normalmente é o caso), sua rota principal ainda selecionará o IP de origem.padrãorota padrão e o IP de origem padrão correspondente, então as regras 32764e 32765garantirão que continue funcionando corretamente em qualquer caso. Assim, você pode brincar com as métricas para escolher qual rota e IP terá precedência.

Exemplo, para ter wlan0agora a preferência ao não informar o IP de origem, aumente a 202métrica de eth0para 1000ter wlan0a rota padrão, assim o IP será escolhido primeiro. Declarar explicitamente o IP de origem ainda corresponderá diretamente às regras 32764ou 32765. Conexões previamente estabelecidas contam como "declaração do IP de origem", portanto não serão perturbadas.

ip route add default via 192.168.1.1 dev eth0 metric 1000
ip route del default via 192.168.1.1 dev eth0 metric 202

Algumas notas adicionais:

  • Não tente remover todas as rotas padrão na maintabela (normal), ou suas conexões não serão mais estabelecidas se o aplicativo não indicar o IP de origem (" Network is unreachable").
  • Casos mais complexos são possíveis, incluindo ter o mesmo IP em duas redes diferentes, mas isso exigirá configurações adicionais e provavelmente ajuda do netfilter e do iptables.
  • É até possível balancear a carga dessas rotas usandoiptablesemarcase usar essas marcas como seletor em ip rule, mas é mais complexo fazê-lo funcionar corretamente em todos os casos, especialmente ao misturar conexões onde o IP de origem é declarado e onde o IP de origem é deixado para ser escolhido pelo sistema, e também especialmente para UDP. Pode então também exigir um uso estranho de NAT e afrouxamentorp_filter.

Responder2

Certifique-se de ter ativado as interfaces

ip link set dev eth0 up
ip link set dev wlan0 up

informação relacionada