È possibile che L2TP VPN esegua la configurazione del routing automatico per il client durante la connessione?


13

Abbiamo configurato un server VPN L2TP con questo tutorial , tutto funziona come un fascino.

L'unico problema è

  1. Non vogliamo che il client instrada tutto il traffico utilizzando questa VPN, solo una particolare sottorete, ad esempio 10.0.0.0/20

  2. Su Mac, dobbiamo impostare il percorso manualmente usando il comando, ma per i dispositivi mobili, sembra che non ci sia modo di farlo?

Quindi, è possibile configurare automaticamente il client per la sottorete "10.0.0.0/20"?


Hai provato a disabilitare l'opzione "invia tutto il traffico tramite VPN" o simile sul client?
Bert,

Risposte:


33

OK, questa domanda viene posta più volte su Internet e il più delle volte c'è una risposta (semi) errata che non puoi fare ciò che è stato descritto nel post originale. Vorrei chiarirlo una volta per tutte :)

La risposta breve è che L2TP (e PPTP del resto) non dispongono di strutture per eseguire push di route all'interno del protocollo, ma può essere realizzato al di fuori del protocollo.

Poiché L2TP è un'invenzione di Microsoft, la migliore fonte di informazioni è la loro documentazione tecnica (e comunque sono abbastanza bravi a farlo). La descrizione tecnica di ciò che ho intenzione di spiegare di seguito è disponibile all'indirizzo e indirizzamento VPN . Le parole chiave per impostare tutto correttamente (se hai intenzione di fare le tue ricerche) sono: DHCPINFORM e "route statiche senza classi".

Prima di tutto, come funziona:

  1. un client si connette al server VPN
  2. dopo l'autenticazione riuscita viene stabilito un tunnel sicuro
  3. il client utilizza un messaggio DHCPINFORM dopo la connessione per richiedere l'opzione Percorsi statici senza classi DHCP. Questa opzione DHCP contiene una serie di route che vengono automaticamente aggiunte alla tabella di routing del client richiedente ( ho copiato e incollato questa riga in modo diretto direttamente dalla documentazione Microsoft :))
  4. il server VPN risponde a quel messaggio con una serie appropriata di rotte

Bene, c'è un avvertimento:

  • c'è RFC-3442 che descrive "DHCP Classless Static Route" e afferma che il codice per questa opzione è 121. Microsoft ha deciso di reinventare la ruota (come sempre) e usa il codice 249 per questa opzione. Pertanto, per supportare una gamma più ampia di clienti dobbiamo rispondere con entrambi i codici

Descriverò una tipica configurazione usando Linux box come server VPN (puoi configurare i server MS usando il collegamento alla documentazione Microsoft).

Per configurare i percorsi sui client avremo bisogno dei seguenti ingredienti:

  • L2TP / IPSEC (o PPTP) = ad esempio, accel-ppp è un bel server L2TP / PPTP open source
  • Server DHCP = ce ne sono molti, ma ho intenzione di descrivere la configurazione di dnsmasq

Di seguito è riportato un dump di una configurazione accel-ppp funzionante. Lo sto fornendo nella sua interezza, altrimenti sarebbe difficile spiegare cosa va dove. Se hai già la tua VPN funzionante, puoi saltare questo file di configurazione e concentrarti sulla configurazione DHCP descritta di seguito.

[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 ~]# 
===

A questo punto i nostri clienti possono connettersi tramite L2TP (o PPTP) e comunicare con il server VPN. Quindi, l'unica parte mancante è un server DHCP che è in ascolto sui tunnel creati e che risponde con le informazioni necessarie. Di seguito è riportato un estratto dal file di configurazione di dnsmasq (sto fornendo solo opzioni relative al 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 ~]#

Nell'estratto sopra stiamo spingendo i percorsi 192.168.70.0/24, 192.168.75.0/24 e 10.0.0.0/24 tramite 192.168.99.254 (il server VPN).

Infine, se annusi il traffico di rete (ad es. Sul server VPN) vedrai qualcosa di simile al seguente per la risposta sul messaggio 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

PS Ho quasi dimenticato una parte essenziale richiesta per il corretto utilizzo della configurazione di cui sopra. Bene, è stato descritto nei documenti Microsoft a cui mi riferivo, ma chi ha letto la documentazione? :) OK, i client devono essere configurati senza "Usa gateway predefinito" sulla connessione VPN (su Windows è nelle proprietà della connessione -> Rete -> Protocollo Internet versione 4 (TCP / IPv4) -> Proprietà -> Avanzate -> Impostazioni IP ). Su alcuni client esiste anche un'opzione chiamata "Disabilita aggiunta route basata su classe": deve essere disinserita poiché disabilita esplicitamente la funzionalità che stiamo cercando di implementare.


Comprendo che il classico L2TP incapsula i pacchetti PPP su UDP. Potrei sbagliarmi, ma non credo che il DHCP sia supportato su PPP, in particolare inviando percorsi extra. La versione 3 di L2TP (ancora abbastanza nuova nella terra del kernel linux) ti consente di incapsulare i frame ethernet, quindi potrebbe essere possibile lì, ma sono abbastanza sicuro che il chilometraggio possa variare su quanto è supportato sui dispositivi mobili.
Matthew Ife,

Matthew, non so davvero come affrontare correttamente la tua domanda poiché hai mescolato così tante cose in una sola frase :) Bene, iniziamo con quanto segue: la configurazione fornita funziona su centinaia di guerrieri della strada che sto supervisionando. Quindi, è un esempio funzionante. Puoi Google per DHCP su PPP e leggere molta documentazione tecnica su come è implementato da Cisco, Juniper, ecc. Se non vuoi immergerti, immagina che L2TP incapsuli PPP su UDP, PPP è un punto- punto-punto in cui è possibile utilizzare IP, DHCP è un protocollo su IP, quindi qui siamo bravi :)
galaxy

1
Inoltre, è abbastanza strano ottenere questo tipo di commenti quando ho incluso un collegamento alla documentazione tecnica di Microsoft per L2TP in cui descrivono come impostare correttamente le cose usando DHCPINFORM. Riesco a capire quando le persone non vogliono leggere la risposta (anche se include file di configurazione da un sistema funzionante) dal momento che la ricerca di qualcuno, ma dicendo "Non credo che il DHCP sia supportato su PPP" quando c'è una specifica tecnica da il creatore del protocollo in cui afferma che questo è il modo in cui è stato progettato è un po 'strano.
galassia,

Bene per chiarire il mio punto "DHCP non è supportato su PPP", intendo che l'assegnazione dell'indirizzo IP avviene tramite il protocollo di controllo del collegamento PPP (punto a punto non ha la nozione di un indirizzo "broadcast"). Quindi penso che tu abbia frainteso quello a cui stavo arrivando. Capisco ora che intendi dire che DHCPINFORM si verifica all'interno del tunnel dopo aver stabilito la connessione e non ha nulla a che fare con la connessione iniziale. Sono d'accordo ora che questo schema funziona, a condizione che il client invierà un messaggio DHCPINFORM dopo l'installazione della connessione.
Matthew Ife,

Mathew, grazie :). Sì, non stiamo usando DHCP per l'assegnazione dell'indirizzo, è fatto da IPCP (e non da LCP come hai detto, ma questo è irrilevante), tuttavia, la documentazione tecnica di Microsoft afferma che un client valido dovrebbe inviare il messaggio DHCPINFORM con l'opzione 249 per ottenere configurazione del percorso, ed è esattamente quello che ho descritto nella mia risposta. Beh, qualcuno ha già votato verso il basso la mia risposta, sebbene sia una risposta valida e funzionante :)
galaxy

1

Non credo che tu possa spingere un percorso verso il client in una VPN L2TP / IPSEC. Dovrai eseguire la configurazione direttamente sul client.

Con quale client mobile hai problemi? È più facile fornire alcuni input se conosciamo il sistema operativo e il software che stai utilizzando.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.