Como uso o OpenVPN para todo o tráfego diferente das portas 80 e 22 (entrada e saída)? [fechadas]

1

Eu uso um serviço de DNS dinâmico que é enviado atualizações de endereço IP do meu roteador. Nas configurações do roteador, as portas 22 e 80 são encaminhadas para o meu servidor em 192.168.1.10. Eu tenho um servidor web e sshd em execução no meu servidor. De fora da minha rede local, posso ir para mydomain.dyndns.org ou ssh no meu servidor. Isso funciona bem até eu me conectar ao OpenVPN. Quando conecto meu servidor ao meu provedor OpenVPN, não consigo mais ssh no meu servidor de fora da minha rede local. Tempo limite de http e ssh. Mesmo se eu cortar o material do dyndns e apenas usar o IP da WAN, ele ainda fica com o OpenVPN conectado e funciona quando eu paro o OpenVPN.

Meu provedor OpenVPN (não controle) que envia rotas para mim (o cliente). Especificamente, ao se conectar ao openvpn, os seguintes comandos são executados:

/sbin/ifconfig tun0 10.15.0.74 pointopoint 10.15.0.73 mtu 1500
/sbin/route add -net 141.255.164.66 netmask 255.255.255.255 gw 192.168.1.1
/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.15.0.73
/sbin/route add -net 128.0.0.0 netmask 128.0.0.0 gw 10.15.0.73
/sbin/route add -net 10.15.0.1 netmask 255.255.255.255 gw 10.15.0.73

e as rotas adicionadas são removidas com del quando a conexão vpn é fechada.

O problema é que isso roteia tudo através da VPN. Em vez disso, gostaria que meu servidor usasse o openvpn para todo o tráfego diferente das portas 80 e 22 (entrada e saída). Por exemplo, gostaria de poder me conectar ao meu servidor usando http e ssh.

Acredito que perguntas semelhantes foram feitas, mas elas parecem ser todas de roteamento de portas específicas através da VPN e de todo o resto, não embora a vpn. Eu não consegui adaptá-los para meus propósitos.

EDITAR:

Meu roteador é 192.168.1.1 (um roteador dd-wrt). Meu palpite é que o tráfego ssh / http deve ser marcado e configurado para usar 192.168.1.1 como o gateway padrão. No entanto, não sei como.

EDIT 2:

Seguindo o conselho dos leucos, tentei o seguinte:

root@FILESERVER:~# curl ipecho.net/plain; echo
###.###.135.118
root@FILESERVER:~# echo "Connecting to OpenVPN in other terminal"
Connecting to OpenVPN in other terminal
root@FILESERVER:~# curl ipecho.net/plain; echo
###.###.164.93
root@FILESERVER:~# echo "1 NOVPN" >> /etc/iproute2/rt_tables
root@FILESERVER:~# ip route add default via 192.168.1.1 dev p4p1 table NOVPN
root@FILESERVER:~# ip route show table NOVPN
default via 192.168.1.1 dev p4p1 
root@FILESERVER:~# ip rule add from all fwmark 0x1 lookup NOVPN
root@FILESERVER:~# iptables -t mangle -I PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
root@FILESERVER:~# iptables -t mangle -I PREROUTING -p tcp --dport 80 -j MARK --set-mark 1
root@FILESERVER:~# curl ipecho.net/plain; echo
###.###.164.93

Agora eu não sei exatamente como funciona o ipecho.net, mas meu palpite é que ele recebeu algo de ###. ###. 164.93, que (eu acho) significa porta 80 o tráfego não foi encaminhado através do p4p1 (minha interface nativa), mas foi roteado através do tun0 (setup pelo OpenVPN). Tentar se conectar fora da minha rede também continuou com o tempo limite.

    
por bkanuka 23.02.2014 / 19:59

2 respostas

1

As decisões de encaminhamento "normais" baseiam-se nos prefixos e máscaras da tabela de destino e de encaminhamento. Se você quiser fazer decisões de roteamento com base em outros dados (por exemplo, portas TCP), será necessário usar ip rule .

Com ip rule , você pode basicamente pedir ao kernel para usar uma tabela de roteamento alternativa quando alguma condição ocorrer. Você normalmente usa marcação de pacotes no iptables para isso.

Aqui está um exemplo, não testado, você pode querer tentar isso (não brinque com isso se você tiver apenas uma conexão remota com o seu servidor!).

# Create an alternate routing table
echo "1 NOVPN" >> /etc/iproute2/rt_tables

# Create the routes for this table
# Actually, you just want to set the default gateway
ip route add default via 192.168.1.1 dev eth0 table NOVPN

# Check results with
ip route show table NOVPN

# Now tell the kernel that this routing table should be used when 
# a packet waiting to be routed has a specific "mark"
ip rule add from all fwmark 0x1 lookup NOVPN

# Then mark all the required packets with the same mark use above
iptables -t mangle -I OUTPUT -p tcp --sport 22 -j MARK --set-mark 1 
iptables -t mangle -I OUTPUT -p tcp --sport 80 -j MARK --set-mark 1 

Boa sorte.

EDITAR:

Talvez seja necessário ajustar seu endereço de origem também:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.10

Se isso não funcionar, verifique o que acontece com:

tcpdump -enieth0 port 80

(Eu suponho nas minhas respostas que a interface Ethernet de outbount adequada é eth0)

    
por 23.02.2014 / 20:40
0

Isso faz com que todo o tráfego passe pela VPN

/sbin/route add -net 0.0.0.0 netmask 128.0.0.0 gw 10.15.0.73
/sbin/route add -net 128.0.0.0 netmask 128.0.0.0 gw 10.15.0.73

Você talvez especificou isso no arquivo de configuração? De acordo com os documentos OpenVPN , a diretiva de configuração relevante é redirect-gateway

    
por 23.02.2014 / 20:14