Para resolver esse problema, você precisará configurar ambos iptables e regras de roteamento. O problema específico que você está encontrando é que os pacotes SSH de saída estão sendo roteados através de sua interface de túnel VPN anônima, em vez de sua interface Ethernet. Isso está acontecendo porque seu software VPN configurou uma regra de roteamento para enviar todo e qualquer tráfego não manipulado por meio da interface do túnel. Bom para anonimizar seu tráfego de rede; ruim para estabelecer conexões SSH com o seu computador.
Existem algumas maneiras de corrigir este problema, mas vou compartilhar com você o 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 na nossa tabela no-VPN por quaisquer pacotes marcados com uma máscara específica de netfilter
- Adicione uma rota IP que direcione todo o tráfego em nossa tabela no-VPN para usar sua interface Ethernet em vez do túnel
- Adicione uma regra iptables para marcar todo o tráfego SSH com nossa máscara de netfilter designada
Nota: Eu estava trabalhando com o Raspbian enquanto fazia o seguinte, então você pode precisar ajustar um pouco os comandos para ajustar sua distribuição.
Criando uma nova tabela de regras de IP
Comece inspecionando o arquivo de definição de tabela do iproute2. Queremos ter certeza de que não usaremos o nome ou o número de nenhuma das tabelas de regras existentes.
cat /etc/iproute2/rt_tables
Você provavelmente verá algo ao longo destas linhas:
# 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 não 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 procurar a tabela no-VPN
Verifique as regras de ip existentes que lidam com as máscaras do netfilter:
ip rule show | grep fwmark
Se o grep não aparecer nada, você está 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 esteja em uso no momento. Como eu não tinha regras de fwmark, escolhi o número 65.
ip rule add fwmark 65 table novpn
O que isto faz é fazer com que qualquer pacote com o netfilter mask 65 consulte nossa nova tabela novpn
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 tabela novpn
a usar somente a interface Ethernet de hardware, em vez da interface de túnel virtual que sua VPN cria.
Agora seria um bom momento para liberar seu cache iproute, para garantir que suas novas regras e rotas tenham efeito imediato:
ip route flush cache
Instrua a regra de firewall para 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
Há muitas opções aqui para eu explicar em grande profundidade. Eu recomendo strongmente que você leia a página de manual do iptables para ter uma idéia do que está acontecendo aqui:
man iptables
Em suma: estamos anexando uma regra de saída à tabela mangle do firewall (para manipulação de pacotes especializados) que instrui para marcar qualquer pacote TCP originado da porta de origem 22 com nossa máscara de netfilter designada 65.
O que vem depois?
Neste ponto, você deve estar pronto para testar o SSH. Se tudo correr bem, você deve encontrar o prompt "login as" feliz.
Por questões de segurança, recomendo que você instrua seu firewall a descartar quaisquer solicitações SSH de entrada 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 temporárias (exceto para a criação da ID da tabela de regras) - elas serão apagadas na próxima vez em que você reiniciar o computador. Torná-los permanentes é um exercício que deixo para você.