Ist es für L2TP VPN möglich, während der Verbindung eine automatische Routenkonfiguration für den Client durchzuführen?

13

Wir haben mit diesem Tutorial einen L2TP-VPN-Server eingerichtet , alles funktioniert wie ein Zauber.

Das einzige Problem ist

  1. Wir möchten nicht, dass der Client den gesamten Datenverkehr über dieses VPN weiterleitet, sondern nur über ein bestimmtes Subnetz, z. B. 10.0.0.0/20

  2. Auf dem Mac müssen wir die Route manuell mit dem Befehl festlegen. Gibt es auf Mobilgeräten keine Möglichkeit, dies zu tun?

Ist es also möglich, für den Client automatisch das Subnetz "10.0.0.0/20" zu konfigurieren?

Howard
quelle
Haben Sie versucht, die Option "Gesamten Datenverkehr über VPN senden" oder eine ähnliche Option auf dem Client zu deaktivieren?
Bert

Antworten:

33

OK, diese Frage wird immer und immer wieder über das Internet gestellt und die meiste Zeit gibt es eine (halb-) falsche Antwort, die Sie nicht tun können, was im ursprünglichen Beitrag beschrieben wurde. Lass es mich ein für alle Mal klarstellen :)

Die kurze Antwort lautet: L2TP (und PPTP in diesem Fall) verfügen nicht über die Möglichkeit, Routing-Pushs innerhalb des Protokolls durchzuführen, sie können jedoch außerhalb des Protokolls durchgeführt werden.

Da es sich bei L2TP um eine Erfindung von Microsoft handelt, ist die beste Informationsquelle die technische Dokumentation (und sie sind übrigens recht gut darin). Die technische Beschreibung dessen, was ich unten erläutern werde, finden Sie unter VPN-Adressierung und -Routing . Die Schlüsselwörter für die ordnungsgemäße Einrichtung sind: DHCPINFORM und "klassenlose statische Routen".

Zuallererst, wie es funktioniert:

  1. Ein Client stellt eine Verbindung zum VPN-Server her
  2. Nach erfolgreicher Authentifizierung wird ein sicherer Tunnel aufgebaut
  3. Der Client verwendet eine DHCPINFORM-Nachricht nach der Verbindung, um die Option DHCP Classless Static Routes anzufordern. Diese DHCP-Option enthält eine Reihe von Routen, die automatisch zur Routing-Tabelle des anfordernden Clients hinzugefügt werden ( diese Zeile habe ich direkt aus der Microsoft-Dokumentation kopiert und eingefügt :)).
  4. Der VPN-Server antwortet auf diese Nachricht mit den entsprechenden Routen

Nun, es gibt eine Einschränkung:

  • Es gibt RFC-3442 , der "DHCP Classless Static Routes" beschreibt, und dort heißt es, dass der Code für diese Option 121 lautet. Microsoft hat beschlossen, das Rad (wie immer) neu zu erfinden, und verwendet Code 249 für diese Option. Um eine größere Anzahl von Kunden zu unterstützen, müssen wir daher mit beiden Codes antworten

Ich beschreibe eine typische Konfiguration unter Verwendung der Linux-Box als VPN-Server (Sie können MS-Server über den Link zur Microsoft-Dokumentation konfigurieren).

Um Routen auf den Clients zu konfigurieren, benötigen wir die folgenden Zutaten:

  • L2TP / IPSEC (oder PPTP) = accel-ppp ist zum Beispiel ein netter Open-Source-L2TP / PPTP-Server
  • DHCP-Server = es gibt viele, aber ich werde die Konfiguration von dnsmasq beschreiben

Das Folgende ist ein Speicherauszug einer funktionierenden accel-ppp-Konfiguration. Ich biete es in seiner Gesamtheit an, sonst wäre es schwierig zu erklären, was wohin geht. Wenn Ihr VPN bereits funktioniert, können Sie diese Konfigurationsdatei überspringen und sich auf die unten beschriebene DHCP-Konfiguration konzentrieren.

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

Zu diesem Zeitpunkt können unsere Clients eine Verbindung über L2TP (oder PPTP) herstellen und mit dem VPN-Server kommunizieren. Der einzige fehlende Teil ist also ein DHCP-Server, der die erstellten Tunnel überwacht und mit den erforderlichen Informationen antwortet. Unten finden Sie einen Auszug aus der dnsmasq-Konfigurationsdatei (ich biete nur DHCP-bezogene Optionen an):

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

Im obigen Auszug werden die Routen 192.168.70.0/24, 192.168.75.0/24 und 10.0.0.0/24 über 192.168.99.254 (den VPN-Server) übertragen.

Wenn Sie den Netzwerkverkehr abhören (z. B. auf dem VPN-Server), wird für die Antwort auf die DHCPINFORM-Nachricht Folgendes angezeigt:

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 Ich habe fast einen wesentlichen Teil vergessen, der für die erfolgreiche Verwendung der obigen Konfiguration erforderlich ist. Nun, es wurde in den Microsoft-Dokumenten beschrieben, auf die ich mich bezog, aber wer hat die Dokumentation gelesen? :) OK, Clients sollten für die VPN-Verbindung ohne "Standard-Gateway verwenden" konfiguriert werden (unter Windows finden Sie dies in den Eigenschaften der Verbindung -> Netzwerk -> Internetprotokoll Version 4 (TCP / IPv4) -> Eigenschaften -> Erweitert -> IP-Einstellungen ). Auf einigen Clients gibt es auch die Option "Klassenbasiertes Hinzufügen von Routen deaktivieren". Diese Option muss deaktiviert werden, da die von uns zu implementierende Funktionalität explizit deaktiviert wird.

Galaxis
quelle
Ich verstehe, dass klassisches L2TP PPP-Pakete über UDP kapselt. Ich könnte mich irren, glaube aber nicht, dass DHCP über PPP unterstützt wird, insbesondere beim Senden zusätzlicher Routen. Mit L2TP Version 3 (in Linux-Kernelland noch recht neu) können Sie Ethernet-Frames einkapseln, sodass dies möglicherweise dort möglich ist. Ich bin mir jedoch ziemlich sicher, dass die Anzahl der Kilometer davon abweicht, wie gut dies über Mobilgeräte unterstützt wird.
Matthew Ife
Matthew, ich weiß nicht wirklich, wie ich deine Frage richtig beantworten soll, da du so viele Dinge in einen Satz verwechselt hast. Es ist also ein funktionierendes Beispiel. Sie können mit Google nach DHCP über PPP suchen und eine Menge technischer Dokumentation darüber lesen, wie es von Cisco, Juniper usw. implementiert wird. to-point-Protokoll, bei dem Sie IP verwenden können, DHCP ist ein Protokoll über IP, also sind wir hier gut :)
Galaxie
1
Es ist auch ziemlich seltsam, diese Art von Kommentaren zu erhalten, wenn ich einen Link zur technischen Dokumentation von Microsoft für L2TP hinzufüge, in dem beschrieben wird, wie die Dinge mit DHCPINFORM richtig eingerichtet werden. Ich kann verstehen, wenn Leute die Antwort nicht lesen möchten (obwohl sie Konfigurationsdateien von einem funktionierenden System enthält), da dies von jemandem recherchiert wurde, aber ich sage "Ich glaube nicht, dass DHCP über PPP unterstützt wird", wenn es eine technische Spezifikation von gibt Der Schöpfer des Protokolls, in dem es heißt, dass es so entworfen wurde, ist irgendwie seltsam.
Galaxy
Nun, um meinen Punkt zu verdeutlichen: "DHCP wird über PPP nicht unterstützt", meine ich, dass die IP-Adresszuweisung über das PPP-Verbindungssteuerungsprotokoll erfolgt (Punkt zu Punkt haben keine Ahnung von einer "Broadcast" -Adresse). Ich glaube, Sie haben falsch verstanden, worauf ich hinauswollte. Ich sehe jetzt, was Sie meinen, ist, dass die DHCPINFORM innerhalb des Tunnels nach dem Verbindungsaufbau auftritt und nichts mit der anfänglichen Verbindung zu tun hat. Ich bin damit einverstanden, dass dieses Schema funktioniert, vorausgesetzt, der Client sendet eine DHCPINFORM-Nachricht, nachdem die Verbindung hergestellt wurde.
Matthew Ife
Mathew, danke :). Ja, wir verwenden DHCP nicht für die Adresszuweisung, es wird von IPCP ausgeführt (und nicht von LCP, wie Sie sagten, dies ist jedoch irrelevant). In der technischen Dokumentation von Microsoft wird jedoch angegeben, dass ein gültiger Client die DHCPINFORM-Nachricht mit Option 249 senden sollte, um sie abzurufen Routenkonfiguration, und genau das habe ich in meiner Antwort beschrieben. Nun, jemand hat meine Antwort bereits abgelehnt, obwohl es eine funktionierende, gültige Antwort ist :)
Galaxy
1

Ich glaube nicht, dass Sie in einem L2TP / IPSEC-VPN eine Route zum Client übertragen können. Sie müssen die Konfiguration direkt auf dem Client vornehmen.

Mit welchem ​​mobilen Client haben Sie Probleme? Es ist einfacher, Eingaben zu machen, wenn wir das Betriebssystem und die Software kennen, die Sie verwenden.

pehrs
quelle