route http e ssh traffic normalmente, tudo mais via vpn tunnel

2

Eu li um pouco e estou perto, eu sinto, e estou tirando meu cabelo ... por favor ajude!

Eu tenho um cliente do OpenVPN cujo servidor define rotas locais e também altera o padrão do gw (eu sei que posso evitar isso com o -route-nopull). Eu gostaria de ter todo o tráfego de saída HTTP e SSH através do gw local, e todo o resto via vpn.

  • O IP local é 192.168.1.6/24, gw 192.168.1.1.
  • O IP local do OpenVPN é 10.102.1.6/32, gw 192.168.1.5
  • O servidor OpenVPN está em {OPENVPN_SERVER_IP}

Aqui está a tabela de rotas após a conexão openvpn:

# ip route show table main
0.0.0.0/1 via 10.102.1.5 dev tun0 
default via 192.168.1.1 dev eth0  proto static 
10.102.1.1 via 10.102.1.5 dev tun0 
10.102.1.5 dev tun0  proto kernel  scope link  src 10.102.1.6 
{OPENVPN_SERVER_IP} via 192.168.1.1 dev eth0 
128.0.0.0/1 via 10.102.1.5 dev tun0 
169.254.0.0/16 dev eth0  scope link  metric 1000 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.6  metric 1

Isso faz com que todos os pacotes passem para o túnel VPN, exceto aqueles destinados a 192.168.1.0/24.

Fazer wget -qO- http://echoip.org mostra o endereço do servidor vpn, como esperado, os pacotes têm 10.102.1.6 como endereço de origem (o vpn local ip) e são roteados via tun0 ... conforme relatado por tcpdump -i tun0 ( tcpdump -i eth0 não vê nenhum desses tráfegos).

O que eu tentei foi:

  • crie uma segunda tabela de roteamento contendo as informações de roteamento 192.168.1.6/24 (copiadas da tabela main acima)
  • adicione uma regra iptables -t mangle -I PREROUTING para marcar os pacotes destinados à porta 80
  • adicione um ip rule para corresponder ao pacote desconfigurado e aponte para a segunda tabela de roteamento
  • adicione uma regra de IP para to 192.168.1.6 e from 192.168.1.6 para apontar para a segunda tabela de roteamento (embora isso seja supérfluo)
  • alterou a validação do filtro ipv4 para nenhum em net.ipv4.conf.tun0.rp_filter=0 e net.ipv4.conf.eth0.rp_filter=0

Eu também tentei uma regra iptables mangle output , iptables nat prerouting . Ainda falha e não tenho certeza do que estou perdendo:

  • iptables mangle prerouting : pacote ainda via vpn
  • iptables mangle output : tempo limite do pacote

Não é o caso que para alcançar o que eu quero, então ao fazer wget http://echoip.org eu deveria mudar o endereço de origem do pacote para 192.168.1.6 antes de desabilitá-lo? Mas se eu fizer isso, a resposta do servidor http seria roteada de volta para 192.168.1.6 e wget não o veria, pois ainda está vinculado a tun0 (a interface vpn)?

Pode uma alma gentil por favor ajudar? Quais comandos você executaria depois que o openvpn se conecta para alcançar o que eu quero?

Ansioso para o crescimento do cabelo ...

    
por Normadize 19.10.2013 / 06:48

1 resposta

0

0.0.0.0/1 via 10.102.1.5 dev tun0 Este é o seu problema.

0.0.0.0/1 é uma faixa de IP insanamente grande (0.0.0.0 - 127.255.255.255) e é a primeira entrada em sua tabela de roteamento para que qualquer endereço IP que caia nesse intervalo seja forçado a redirecionar para baixo tun0 . O intervalo é tão grande que engloba uma grande parte do espaço IP roteado na Internet. Então echoip.org, que para mim, resolve 69.163.172.52 está contido dentro de 0.0.0.0/1 (0.0.0.0 - 127.255.255.255).

Para ver se estou correto tente um wget para link , que para mim resolve 198.252.206.16, e veja se ele sai eth0 . Deve porque está fora de (0.0.0.0 - 127.255.255.255).

Em geral, costumo tornar meu espaço de tun0 IP o mais específico possível. 10.102.0.0/16 via 10.102.1.5 por exemplo.

A menos que seu objetivo seja rotear todo o seu tráfego da Internet através de um ponto de saída específico por razões de segurança / monitoramento, eu tentaria restringir o espaço do seu IP de túnel.

    
por 06.12.2013 / 00:18