Eu tenho um VPS executando o CentOS 7 ao qual me conecto com o SSH. Eu gostaria de executar um cliente OpenVPN no VPS para que o tráfego da Internet seja roteado através da VPN, mas ainda permita a conexão com o servidor via SSH. Quando inicio o OpenVPN, minha sessão SSH é desconectada e não consigo mais me conectar ao meu VPS. Como posso configurar o VPS para permitir que as conexões SSH (porta 22) de entrada sejam abertas no IP real do VPS (104.167.102.77), mas ainda roteie o tráfego de saída (como um navegador da Web no VPS) através da VPN?
O serviço OpenVPN que eu uso é PrivateInternetAccess, e um exemplo de arquivo config.ovpn é:
cliente dev tun proto udp remote nl.privateinternetaccess.com 1194 resolver-repetir infinito nobind chave persistente persist-tun ca ca.crt tls-client servidor remote-cert-tls auth-user-pass comp-lzo verbo 1 reneg-sec 0 crl-verifica crl.pem
Endereço IP do VPS:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN link / loopback 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 host do escopo inet 127.0.0.1/8 lo valid_lft forever preferência_lft forever host do escopo inet6 :: 1/128 valid_lft forever preferência_lft forever 2: ens33: mtu 1500 qdisc estado pfifo_fast UP qlen 1000 link / éter 00: 50: 56: be: 16: f7 brd ff: ff: ff: ff: ff: ff inet 104.167.102.77/24 brd 104.167.102.255 escopo global ens33 valid_lft forever preferência_lft forever inet6 fe80 :: 250: 56ff: febe: link do escopo 16f7 / 64 valid_lft forever preferência_lft forever 4: tun0: mtu 1500 qdisc estado pfifo_fast DESCONHECIDO qlen 100 link / nenhum escopo global in0 10.172.1.6 ponto 10.172.1.5/32 valid_lft forever preferência_lft forever
Rota IP do VPS:
0.0.0.0/1 via 10.172.1.5 dev tun0 padrão via 104.167.102.1 dev ens33 proto estática métrica 1024 10.172.1.1 via 10.172.1.5 dev tun0 10.172.1.5 dev tun0 proto kernel scope link src 10.172.1.6 104.167.102.0/24 dev ens33 proto kernel scope link src 104.167.102.77 109.201.154.177 via 104.167.102.1 dev ens33 128.0.0.0/1 via 10.172.1.5 dev tun0
route
ouip route show
) e a excluí?Pode ser um pouco tarde, mas ...
O problema é que o gateway padrão é alterado pelo OpenVPN e interrompe sua conexão SSH atual, a menos que você configure rotas apropriadas antes de iniciar o OpenVPN.
O que segue funciona para mim. Ele usa iptables e ip (iproute2). Abaixo, supõe-se que a interface de gateway padrão antes do OpenVPN ser iniciado seja "eth0". A idéia é garantir que quando uma conexão com eth0 for estabelecida, mesmo que eth0 não seja mais a interface de gateway padrão, os pacotes de resposta para a conexão retornem novamente a eth0.
Você pode usar o mesmo número para a marca de conexão, marca de firewall e tabela de roteamento. Usei números distintos para tornar as diferenças entre eles mais aparentes.
===
ATUALIZAR:
O acima funciona bem para mim no Debian Jessie. Mas em um sistema Wheezy antigo, acabei de descobrir que preciso adicionar "via" à entrada da tabela de roteamento:
"12.345.67.89" deve ser o gateway não VPN original.
fonte
ip route add default
)? Recebo "Respostas RTNETLINK: o arquivo existe". Estou executando o Ubuntu Xenial. "via" não ajuda. Eu apenas tentei no Arch Linux, primeiroip route add default
parece ter sucesso, mas aip route
saída não muda. Qualquer execução subsequente resulta na mensagem "arquivo existe".ip route show table all | grep 3412
. E sem "via" conexões não estabelecidas (se não me engano), pare para funcionar (Ubuntu Xenial). Pelo menos eu sou capaz de corrigir a tabela de roteamento. No entanto, não consigo acessar o servidor depois de executaropenvpn
.Com base na resposta do @MrK, escrevi aqui um código simples para agilizar o trabalho, para que você não precise verificar interfaces / IP:
Eu tentei esse script em 4 dos meus VPS e está funcionando perfeitamente.
fonte
hmm soa como sobreposição de sub-rede ip .... sem saber mais sobre o seu esquema de ip, além do ip público da sua terminação vpn como nl.privateinternetaccess.com, não posso ter certeza.
por exemplo, se a sub-rede remota do outro lado de nl.privateinternetaccess.com for 10.32.43.0/24 e sua instância estiver em um aws vpc cuja sub-rede seja 10.32.44.0/24. mas seu cliente ssh de origem vive em 10.32.43.0/24 (seu lado do aws vpc), ele não funcionará, pois o tráfego ssh de retorno será enviado erroneamente sobre o vpn para os países baixos.
forneça informações completas sobre ip / sub-rede para obter mais ajuda com isso.
...
ok, então ... parece que sua rota padrão está no túnel, depois que você se conectar ao nl:
para que você possa mudar isso depois de se conectar. Muitas vezes, os servidores VPN oferecem rotas falsas. especialmente no corpo desleixado. nesse caso, eles estão enviando uma rota padrão para você, para que todo o tráfego da caixa vps vá para nl. altere a rota padrão para 104.167.102.x ou qualquer outro gateway de sub-rede no seu provedor de vps.
fonte
Quando você abre a VPN, seu gateway padrão é substituído. Isso significa que qualquer tráfego gerado ou roteado pela sua caixa será encaminhado para o gateway da VPN.
Uma solução simples é filtrar todo o tráfego que você não deseja rotear pela VPN e fazer outra coisa com ele. Uma possibilidade é pegar o tráfego gerado na sua caixa com o endereço de origem local e encaminhá-lo através do gateway local. Isso permite que serviços como SSH funcionem corretamente.
Nós vamos fazer isso aqui. Primeiro, crie uma nova tabela de roteamento e adicione uma rota padrão que roteie tudo pelo seu gateway local:
Em seguida, crie uma nova regra de filtro de pacotes que marque todo o tráfego que sai da sua caixa de um determinado endereço de origem com algum identificador.
Por fim, crie uma política de roteamento que escolha todo o tráfego marcado acima mencionado e o direcione usando a tabela gerada acima.
Mais uma vez, os valores
<mark>
e<table>
são identificadores arbitrários de sua própria escolha.fonte
Para mim, ao executar o servidor OpenVPN eu mesmo no pfSense, desmarquei a configuração "Forçar todo o tráfego IPv4 gerado pelo cliente através do túnel".
fonte