OK, tato otázka se na internetu pokládá znovu a znovu a většinou se objeví (polo)nesprávná odpověď, že nemůžete udělat to, co bylo popsáno v původním příspěvku. Dovolte mi to jednou provždy objasnit :)
Krátká odpověď je, že L2TP (a PPTP v tomto případě) nemají zařízení k provádění směrování v rámci protokolu, ale lze toho dosáhnout mimo protokol.
Vzhledem k tomu, že L2TP je vynález Microsoftu, nejlepším zdrojem informací je jejich technická dokumentace (a jsou v ní mimochodem docela dobří). Technický popis toho, co vysvětlím níže, lze nalézt na adrese VPN Addressing and Routing. Klíčová slova pro správné nastavení všeho (pokud se chystáte provést vlastní průzkum) jsou:DHCPINFORM a "classless static routes".
Za prvé, jak to funguje:
- klient se připojí k serveru VPN
- po úspěšné autentizaci je vytvořen zabezpečený tunel
- klient použije po připojení zprávu DHCPINFORM k vyžádání volby DHCP Classless Static Routes. Tato možnost DHCP obsahuje sadu tras, které jsou automaticky přidány do směrovací tabulky žádajícího klienta (Tento řádek jsem otrocky zkopíroval a vložil přímo z dokumentace společnosti Microsoft :) )
- Server VPN na tuto zprávu odpoví příslušnou sadou tras
Je tu jedno upozornění:
- je zde RFC-3442 popisující "DHCP Classless Static Routes" a tam je uvedeno, že kód pro tuto možnost je 121. Microsoft se rozhodl znovu vynalézt kolo (jako vždy) a pro tuto možnost používá kód 249. Proto, abychom podpořili širší okruh klientů, musíme odpovědět oběma kódy
Popíšu typickou konfiguraci pomocí Linux boxu jako VPN serveru (MS servery můžete nakonfigurovat pomocí odkazu na dokumentaci Microsoftu).
Ke konfiguraci tras na klientech budeme potřebovat následující ingredience:
- L2TP/IPSEC (nebo PPTP) =například accel-ppp je pěkný open source server L2TP/PPTP
- Server DHCP =existuje mnoho, ale popíšu konfiguraci dnsmasq
Následuje výpis funkční konfigurace accel-ppp. Uvádím jej celý, jinak by bylo těžké vysvětlit, co kam. Pokud již vaše VPN funguje, můžete tento konfigurační soubor přeskočit a soustředit se na konfiguraci DHCP popsanou níže.
[[email protected] ~]# 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
[[email protected] ~]#
===
V tomto okamžiku se naši klienti mohou připojit přes L2TP (nebo PPTP) a komunikovat s VPN serverem. Chybí tedy pouze DHCP server, který naslouchá na vytvořených tunelech a který odpovídá potřebnými informacemi. Níže je výňatek z konfiguračního souboru dnsmasq (poskytuji pouze možnosti související s DHCP):
[[email protected] ~]# 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
[[email protected] ~]#
Ve výše uvedeném úryvku posíláme trasy 192.168.70.0/24, 192.168.75.0/24 a 10.0.0.0/24 přes 192.168.99.254 (server VPN).
A konečně, pokud načtete síťový provoz (např. na serveru VPN), uvidíte jako odpověď na zprávu DHCPINFORM něco podobného:
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. Málem bych zapomněl na podstatnou část potřebnou pro úspěšné použití výše uvedené konfigurace. Dobře, bylo to popsáno v dokumentech společnosti Microsoft, na které jsem odkazoval, ale kdo četl dokumentaci? :) OK, klienti by měli být nakonfigurováni bez 'Použít výchozí bránu' na připojení VPN (ve Windows je to ve vlastnostech připojení -> Síť -> Internetový protokol verze 4 (TCP/IPv4) -> Vlastnosti -> Upřesnit -> Nastavení IP ). Na některých klientech je také možnost nazvaná 'Zakázat přidání cesty podle třídy' - musí být deaktivována, protože explicitně zakazuje funkci, kterou se snažíme implementovat.