Pergunta em poucas palavras: Como faço para obter tráfego de um host em uma rede interna, usando o NAT por trás de um roteador, para usar uma conexão VPN configurada no roteador?
Eu tenho um roteador do FreeBSD 9 com 4 interfaces de rede. Um externo conectado ao meu provedor e os outros conectados a sub-redes internas. As interfaces internas usam NAT (por pf) para se conectar ao mundo externo.
Agora, gostaria que todo o tráfego de um host em uma das sub-redes usasse uma conexão VPN PPTP configurada na máquina FreeBSD. O resultado final seria que um host na rede interna usa uma VPN sem ter que usar um cliente VPN no próprio host.
Consegui configurar o cliente VPN com o mpd5. Conectando a partir do roteador para o servidor VPN com mpd5, recebo uma nova interface de rede - ng0 - com um endereço IP.
O meu problema é que não sei para onde ir a partir daqui. Há apenas uma interface (ng0) com um endereço IP. Como faço para que o tráfego da rede interna, NATed, use a conexão VPN?
Se você está tentando responder ou me apontar na direção certa, pode começar com a suposição de que eu não sei ou entendo nada sobre VPNs, roteamento, NAT ou pf - o que eu claramente não sei. (Adicionando uma rota de onde para onde? Adicionando regras pf fazendo o que a entrada e saída de pacotes? Etc.)
Configuração
Isso ocorre logo após a conexão ao servidor VPN do roteador.
Meu/etc/pf.conf:
ext_if="em0"
local_if = "em1"
wifi_if = "em2"
misc_if = "em3"
localnet = "{" $local_if:network $wifi_if:network $misc_if:network "}"
nat on $ext_if from $localnet to any -> ($ext_if)
pass in all
pass out all keep state
Tabela de roteamento:
Destination Gateway Flags Refs Use Netif Expire
default 188.60.52.1 UGS 0 998893 em0
10.0.1.0/24 link#10 U 0 159240 em1
10.0.1.1 link#10 UHS 0 358 lo0
10.0.2.0/24 link#11 U 0 503719 em2
10.0.2.1 link#11 UHS 0 0 lo0
10.0.3.0/24 link#12 U 0 3773731 em3
10.0.3.1 link#12 UHS 0 0 lo0
98.158.118.1 link#15 UH 0 0 ng0
98.158.118.63 link#15 UHS 0 0 lo0
127.0.0.1 link#13 UH 0 0 lo0
188.60.52.0/22 link#9 U 0 0 em0
188.60.55.17 link#9 UHS 0 0 lo0
Para se conectar ao servidor VPN, eu tenho isso em /usr/local/etc/mpd/mpd.conf:
strongvpn:
create bundle static B1
set bundle yes compression
set ipcp ranges 0.0.0.0/0 0.0.0.0/0
set ccp yes mppc
set mppc yes e128
set mppc yes stateless
# Not using these yet, as I don't know what to put in them ...
#set iface up-script /usr/local/etc/mpd5/ip-up.sh
#set iface down-script /usr/local/etc/mpd5/ip-down.sh
create link static L1 pptp
set link action bundle B1
set auth authname XXXXXXXXX
set auth password XXXXXXXXX
set link max-redial 0
set link mtu 1460
set link keep-alive 20 75
set pptp peer 98.158.112.17
set pptp disable windowing
open