Para resolver esse problema, você precisará configurar as tabelas de ipt e as regras de roteamento. O problema específico que você está enfrentando é que os pacotes SSH de saída estão sendo roteados através da sua interface de túnel VPN anônima, em vez da sua interface Ethernet. Isso está acontecendo porque o seu software VPN estabelece uma regra de roteamento para enviar todo e qualquer tráfego não tratado pela interface do túnel. Bom para anonimizar o tráfego da sua rede; ruim para estabelecer conexões SSH com o seu computador.
Existem algumas maneiras de corrigir esse problema, mas compartilharei com você a que funcionou para mim em uma situação idêntica. Aqui está o que precisamos fazer:
- Crie uma nova tabela de regras de IP para lidar com tráfego não VPN
- Adicione uma regra de IP para procurar em nossa tabela sem VPN os pacotes marcados com uma máscara específica de filtro de rede
- Adicione uma rota IP que direcione todo o tráfego em nossa tabela sem VPN para usar sua interface Ethernet em vez do túnel
- Adicione uma regra do iptables para marcar todo o tráfego SSH com nossa máscara de filtro de rede designada
Nota: Eu estava trabalhando com o Raspbian enquanto fazia o seguinte, portanto, pode ser necessário ajustar um pouco os comandos para ajustar-se à sua distribuição.
Criando uma nova tabela de regras de IP
Comece inspecionando o arquivo de definição de tabela do iproute2. Queremos garantir que não usemos o nome ou o número de nenhuma tabela de regras existente.
cat /etc/iproute2/rt_tables
Você provavelmente verá algo nesse sentido:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
Escolha um número e nome arbitrários para sua nova tabela de regras - qualquer coisa que não seja usada acima. Usarei o número 201 e o nome novpn
para o restante desta resposta.
Anexe uma definição diretamente ao arquivo de definição ou edite-a no editor de texto de sua escolha:
echo "201 novpn" >> /etc/iproute2/rt_tables
Adicione uma nova regra de IP para pesquisar a tabela sem VPN
Verifique se existem regras de IP existentes que lidam com máscaras do netfilter:
ip rule show | grep fwmark
Se o grep não aparecer, você estará livre. Se imprimir algumas linhas, anote o número hexadecimal à direita da palavra fwmark
em cada linha. Você precisará escolher um número que não está em uso no momento. Como não tinha regras fwmark existentes, escolhi o número 65.
ip rule add fwmark 65 table novpn
O que isso faz é que qualquer pacote com máscara de filtro de rede 65 procure nossa nova novpn
tabela para obter instruções sobre como rotear os pacotes.
Direcione todo o tráfego em nossa nova tabela para usar a interface Ethernet
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
O importante a ser observado aqui é dev eth0
. Isso força todo o tráfego que passa pela novpn
tabela a usar apenas a interface Ethernet de hardware, em vez da interface de túnel virtual criada por sua VPN.
Agora seria um bom momento para liberar seu cache de iproute, para garantir que suas novas regras e rotas tenham efeito imediato:
ip route flush cache
Instrua a regra de firewall a marcar todo o tráfego SSH com a máscara de filtro de rede designada
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
Existem muitas opções aqui para eu explicar com grande profundidade. Convido você a ler a página de manual do iptables para ter uma idéia do que está acontecendo aqui:
man iptables
Em poucas palavras: estamos anexando uma regra de saída à tabela mangle do firewall (para manipulação especializada de pacotes) que instrui a marcar quaisquer pacotes TCP originários da porta de origem 22 com nossa máscara de filtro de rede designada 65.
Qual o proximo?
Neste ponto, você deve estar pronto para testar o SSH. Se tudo correr bem, você deverá receber o prompt "login como".
Por questões de segurança, recomendo que você instrua seu firewall a eliminar quaisquer solicitações SSH recebidas da interface do túnel:
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
Observe que todas as instruções acima são transitórias (exceto para a criação do ID da tabela de regras) - elas serão limpas na próxima vez que você reiniciar o computador. Torná-los permanentes é um exercício que deixo para você.