NAT um IP específico para ir para ppp0 e outros para ir para eth0 vindo da interface wi-fi interna

1
Basicamente eu tenho uma distro do armbian configurada como NAT onde wlan0 é a interface interna e eth0 é a interface "pubic" que fornece internet (este conjunto é fornecido fora da caixa por armbian-config).

Meus dispositivos se conectam através do wlan0 pegando um IP, digamos 172.24.1.114

Eu adicionei uma VPN a uma rede remota, resultando na criação de ppp0, com IP 10.10.10.12

Tendo essas informações, o que eu quero alcançar é:

  • Somente um IP (por exemplo, 172.24.1.114) tem que ir sempre para o ppp0 (que é todo o tráfego de ida e volta deve ir para ppp0, para que eu possa acessar máquinas e navegar na internet com o IP remoto)

  • Todos os outros IPs podem normalmente ir para eth0

A partir do NAT configurado a partir do armbian-config, adicionei as regras extras do iptables:

-A FORWARD -i wlan0 -o ppp0 -j ACCEPT (this is before -A FORWARD -i wlan0-o eth0 -j ACCEPT created by armbian-config)
-A POSTROUTING -o ppp0 -j MASQUERADE (order shouldn't impact with -A POSTROUTING -o eth0 -j MASQUERADE created by armbian-config)
-A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT (just to be sure!)

Estas regras extras + a do armbian-config parecem funcionar bem:

From 172.24.1.114 client I can see content of a remote web server, say http://10.10.10.20 ( so apparently it goes thru ppp0)
From 172.24.1.114 client I can navigate on internet, but unfortunately checking the IP I go out with (using a geo ip website), it still results the one from eth0
All other clients correctly navigate going out thru eth0

Para resumir, agora posso acessar a rede remota pela VPN para esse IP, mas ele não consegue navegar pelo ppp0

Como última tentativa, encontrei o caminho para definir políticas de regras, como neste guia ( link ), para que eu possa especifique que o IP de origem 172.24.1.114 vai para uma tabela personalizada diferente da principal; então eu adicionei nesta nova tabela o gateway padrão de 10.10.10.1 dev ppp0. Isso leva à falta de navegação na web para esse IP.

    
por AlterX 10.10.2018 / 11:14

2 respostas

1

Eu resolvi tudo. Primeiro as regras do iptables requeridas são (estas dão acesso às máquinas da VPN remota):

-A FORWARD -i wlan0 -o ppp0 -j ACCEPT
-A POSTROUTING -o ppp0 -j MASQUERADE

Em seguida, para indicar qual IP ou intervalo de IPs precisa ter uma rota diferente, você precisa de regras de política:

  • abra /etc/iproute2/rt_tables e coloque sua entrada (nome da tabela do ID):

    100   my_custom_table
    
  • ip rule add from 172.24.1.114/24 table my_custom_table (informa para ir para outra tabela diferente da principal para o IP de origem 172.x.x.x)

  • ip route add 172.24.1.0/24 dev wlan0 table my_custom_table (necessário para receber pacotes de volta de ppp0)

  • ip route add default via 10.10.10.1 dev ppp0 table my_custom_table (encaminha o pacote para o gateway da VPN)

Verifique se o firewall no servidor VPN permite o tráfego de entrada de IPs de VPN.

    
por 10.10.2018 / 16:09
0

A criação de um ip rule para esse endereço de origem é a abordagem correta.

Para diagnosticar esses problemas, tcpdump é útil.

O próprio cliente VPN pode acessar a internet através da VPN?

  • Se sim, você precisa adicionar NAT no cliente VPN para o seu endereço.
  • Se não, você precisa adicionar NAT no servidor VPN e verificar se ele não está bloqueado.
por 10.10.2018 / 11:32