VPN com xl2tpd e racoon - como o tráfego NAT fora do endereço IP não padrão

1

Eu tenho um servidor rodando Debian que tem uma rede como esta:

eth0 - has public IP address 1.2.3.4
eth1 - has public IP address 1.2.3.5

Estou tentando configurar uma VPN no servidor com a qual posso me conectar a partir do meu smartphone Android. Eu segui as instruções no link para instalar e configurar o xl2tpd e o racoon. Tudo funciona, mas tenho um último ajuste que quero fazer: quando conecto meu telefone à VPN, meu endereço IP público do qual o tráfego do telefone está roteado é o da eth0, ou seja, 1.2.3.4. Eu gostaria que o tráfego de VPN fosse NAT por trás do endereço IP da eth1, ou seja, 1.2.3.5 (idealmente, com os clientes VPN continuando a se conectar à 1.2.3.4).

Minhas regras de firewall são assim:

VPN_CLIENT_RANGE=192.168.200.0/24
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT
# Enable VPN traffic on the ppp+ adapters (only active when a call is established)
# to go through the machine using SNAT/masquerading.
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s $VPN_CLIENT_RANGE -j MASQUERADE

Eu esperava que mudar eth0 para eth1 nas últimas três linhas atingisse o efeito certo, mas não - o cliente VPN pode se conectar, mas não pode mais ver a internet, e os logs mostram o tráfego de clientes VPN (pppX interfaces no servidor) ainda sendo enviadas da eth0 (que o firewall bloqueia sem as últimas três linhas).

Preciso configurar um endereço de origem no pppd de alguma forma? Ou altere a rota padrão para interfaces ppp?

    
por David North 01.04.2013 / 17:38

1 resposta

0

Eu trabalhei nisso.

Quando um cliente se conecta à VPN, uma conexão PPP é estabelecida.

Os pacotes fluem do cliente para a interface pppN no servidor. O que faz com que eles fluam de lá para a internet através do endereço IP "errado" é a tabela de roteamento padrão do servidor:

$ ip route show
default dev eth0 scope link

i.e. todo o tráfego de saída passa pela eth0.

Supondo que não queremos alterar a rota padrão, o que precisamos é criar uma tabela de roteamento separada com uma rota padrão via eth1 e fazer a VPN usá-la.

Adicione uma entrada para a nova tabela em / etc / iproute2 / rt_tables:

101 vpn

O número pode ser qualquer coisa única no arquivo; o nome é descritivo para o trabalho em questão.

Agora adicione uma rota padrão via eth1 a esta tabela:

# ip route add table vpn default dev eth1 scope link

Finalmente, force o tráfego VPN de entrada (nas interfaces pppN) a ser roteado de acordo com nossa nova tabela. A maneira mais simples é usar o mecanismo /etc/ppp/ip-up.d e ip-down.d para adicionar e excluir regras conforme as interfaces ppp são ativadas e desativadas.

/etc/ppp/ip-up.d/vpn-routing:

#!/bin/sh
IF=$1
ip rule add dev $IF table vpn

/etc/ppp/ip-down.d/vpn-routing:

#!/bin/sh
IF=$1
ip rule delete dev $IF table vpn

Para fazer tudo isso sobreviver a uma reinicialização, você precisa colocar a linha 'ip route add' em algo executado na inicialização - por exemplo, seu script de firewall - ou como uma linha 'up' em / etc / network / interfaces em eth0.

    
por 04.04.2013 / 23:22