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.