OK, esta pergunta é feita repetidamente pela Internet e na maioria das vezes há uma resposta (semi) incorreta que você não pode fazer o que foi descrito no post original. Deixe-me esclarecer de uma vez por todas:)
A resposta curta é L2TP (e PPTP para esse assunto) não tem facilidades para fazer rota empurra dentro do protocolo, mas pode ser alcançado fora do protocolo.
Como o L2TP é uma invenção da Microsoft, a melhor fonte de informação é a documentação técnica (e eles são muito bons nisso, a propósito). A descrição técnica do que vou explicar abaixo pode ser encontrada em Endereçamento e roteamento VPN . As palavras-chave para configurar tudo corretamente (se você for fazer sua própria pesquisa) são: DHCPINFORM e "rotas estáticas sem classes".
Primeiro, como funciona:
- um cliente se conecta ao servidor VPN
- após a autenticação bem-sucedida, é estabelecido um túnel seguro
- o cliente usa uma mensagem DHCPINFORM após a conexão para solicitar a opção Rotas estáticas sem classe do DHCP. Esta opção DHCP contém um conjunto de rotas que são automaticamente adicionadas à tabela de roteamento do cliente solicitante ( eu copiei e colei esta linha diretamente da documentação da Microsoft :))
- o servidor VPN responde a essa mensagem com o conjunto de rotas adequado
Bem, há uma ressalva:
- há RFC-3442 descrevendo "Rotas Estáticas sem Classes de DHCP" e ali indica que o código para este A opção é 121. A Microsoft decidiu reinventar a roda (como sempre) e usa o código 249 para essa opção. Assim, para apoiar uma gama mais ampla de clientes, precisamos responder com os dois códigos
Vou descrever uma configuração típica usando a caixa Linux como servidor VPN (você pode configurar servidores MS usando o link para a documentação da Microsoft).
Para configurar rotas nos clientes, precisaremos dos seguintes ingredientes:
- L2TP / IPSEC (ou PPTP) = por exemplo, o accel-ppp é um bom servidor L2TP / PPTP de código aberto
- Servidor DHCP = existem muitos, mas vou descrever a configuração do dnsmasq
O seguinte é um despejo de uma configuração de accel-ppp de trabalho. Eu estou fornecendo em sua totalidade, caso contrário, seria difícil explicar o que vai para onde. Se você já tem sua VPN funcionando, você pode pular este arquivo de configuração e se concentrar na configuração DHCP descrita abaixo.
[root@vpn ~]# cat /opt/accel-ppp/config/accel-ppp.conf
[modules]
log_syslog
pptp
l2tp
auth_mschap_v2
ippool
sigchld
chap-secrets
logwtmp
[core]
log-error=/var/log/accel-ppp/core.log
thread-count=4
[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
check-ip=1
single-session=replace
mppe=require
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1
[lcp]
lcp-echo-interval=30
lcp-echo-failure=3
[auth]
#any-login=0
#noauth=0
[pptp]
echo-interval=30
echo-failure=3
verbose=1
[l2tp]
host-name=access-vpn
verbose=1
[dns]
dns1=192.168.70.251
dns2=192.168.70.252
[client-ip-range]
disable
[ip-pool]
gw-ip-address=192.168.99.254
192.168.99.1-253
[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
log-debug=/var/log/accel-ppp/debug.log
copy=1
level=3
[chap-secrets]
gw-ip-address=192.168.99.254
chap-secrets=/etc/ppp/chap-secrets
[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001
[root@vpn ~]#
===
Neste ponto, nossos clientes podem se conectar via L2TP (ou PPTP) e se comunicar com o servidor VPN. Portanto, a única parte ausente é um servidor DHCP que está escutando nos túneis criados e que responde com as informações necessárias. Abaixo está um trecho do arquivo de configuração do dnsmasq (estou fornecendo apenas opções relacionadas ao DHCP):
[root@vpn ~]# grep -E '^dhcp' /etc/dnsmasq.conf
dhcp-range=192.168.99.254,static
dhcp-option=option:router
dhcp-option=121,192.168.70.0/24,192.168.99.254,192.168.75.0/24,192.168.99.254,10.0.0.0/24,192.168.99.254
dhcp-option=249,192.168.70.0/24,192.168.99.254,192.168.75.0/24,192.168.99.254,10.0.0.0/24,192.168.99.254
dhcp-option=vendor:MSFT,2,1i
[root@vpn ~]#
No trecho acima, estamos enviando as rotas 192.168.70.0/24, 192.168.75.0/24 e 10.0.0.0/24 via 192.168.99.254 (o servidor VPN).
Por fim, se você detectar o tráfego da rede (por exemplo, no servidor VPN), verá algo semelhante à seguinte para a resposta na mensagem DHCPINFORM:
19:54:46.716113 IP (tos 0x0, ttl 64, id 10142, offset 0, flags [none], proto UDP (17), length 333)
192.168.99.254.67 > 192.168.99.153.68: BOOTP/DHCP, Reply, length 305, htype 8, hlen 6, xid 0xa27cfc5f, secs 1536, Flags [none]
Client-IP 192.168.99.153
Vendor-rfc1048 Extensions
Magic Cookie 0x63825363
DHCP-Message Option 53, length 1: ACK
Server-ID Option 54, length 4: 192.168.99.254
Domain-Name Option 15, length 18: "vpn.server.tld"
Classless-Static-Route-Microsoft Option 249, length 24: (192.168.70.0/24:192.168.99.254),(192.168.75.0/24:192.168.99.254),(10.0.0.0/24:192.168.99.254)
Vendor-Option Option 43, length 7: 2.4.0.0.0.1.255
P.S. Eu quase esqueci uma parte essencial necessária para o uso bem-sucedido da configuração acima. Bem, isso foi descrito nos documentos da Microsoft aos quais me referi, mas quem leu a documentação? :) OK, os clientes devem ser configurados sem 'Usar gateway padrão' na conexão VPN (no Windows está nas propriedades da conexão - > Rede - > Protocolo Internet versão 4 (TCP / IPv4) - > Propriedades - > Avançado - > Configurações de IP). Em alguns clientes, há também uma opção chamada 'Desativar adição de rota baseada em classe' - ela deve ser desativada, pois desativa explicitamente a funcionalidade que estamos tentando implementar.