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@externalip
está funcionandossh -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@externalip
está 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 main
tabela:
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 32764
et 32765
como exceções à entrada 32766
que consulta a main
tabela 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.200
na 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 32764
e 32765
garantirã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 wlan0
agora a preferência ao não informar o IP de origem, aumente a 202
métrica de eth0
para 1000
ter wlan0
a rota padrão, assim o IP será escolhido primeiro. Declarar explicitamente o IP de origem ainda corresponderá diretamente às regras 32764
ou 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
main
tabela (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 usando
iptables
emarcase usar essas marcas como seletor emip 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