Ich habe es geschafft, OpenVPN für die vollständige IPv4-Konnektivität mit tap0 einzurichten. Jetzt möchte ich dasselbe für IPv6 tun.
Adressen und Netzwerkeinrichtung (beachten Sie, dass mein echtes Präfix durch 2001 ersetzt wird: db8):
2001:db8::100:0:0/96 my assigned IPv6 range
2001:db8::100:abc:0/112 OpenVPN IPv6 range
2001:db8::100:abc:1 tap0 (on server) (set as gateway on client)
2001:db8::100:abc:2 tap0 (on client)
2001:db8::1:2:3:4 gateway for server
Home laptop (tap0: 2001:db8::100:abc:2/112 gateway 2001:db8::100:abc:1/112)
| | | (running Kubuntu 10.10; OpenVPN 2.1.0-3ubuntu1)
| wifi | |
router |
| OpenVPN
INTERNET |
eth0 | /tap0
VPS (eth0:2001:db8::1:2:3:4/64 gateway 2001:db8::1)
(tap0: 2001:db8::100:abc:1/112)
(running Debian 6; OpenVPN 2.1.3-2)
Der Server verfügt sowohl über native IPv4- als auch über IPv6-Konnektivität. Der Client verfügt nur über IPv4.
Ich kann über OpenVPN von und zu meinem Server pingen, aber nicht auf andere Computer (zum Beispiel ipv6.google.com
).
net.ipv6.conf.all.forwarding
ist auf eingestellt 1
, ich habe auch versucht net.ipv6.conf.all.accept_ra
, ohne Glück zu deaktivieren .
Wenn tcpdump
ich sowohl auf dem Server als auch auf dem Client verwende, kann ich sehen, dass Pakete tatsächlich über tap0 nach eth0 übertragen werden. Der Router (2001: db8 :: 1) sendet eine Nachbaranfrage für den Client (2001: db8 :: 100: abc: 2) an eth0, nachdem er die ICMP6-Echoanforderung empfangen hat. Der Server reagiert nicht auf diese Aufforderung, wodurch die ICMP6-Echoanforderung nicht an das Ziel weitergeleitet wird.
Wie kann ich diese IPv6-Verbindung herstellen?
net.ipv6.conf.eth0.forwarding = 1
auf dem Server eingestellt?Antworten:
Die Antwort von Timothy Baldwins brachte mich auf den richtigen Weg, obwohl die Antwort ziemlich kryptisch war. IPv6-Nachbarwerbung / -werbung ist wie ARP für IPv6. Es wird verwendet, um andere Computer im Netzwerk zu "sehen". Der Router sendet eine Nachbarwerbung, auf die der Computer (Server oder Client) mit einer Nachbarwerbung antworten soll.
Auch bei
net.ipv6.conf.all.forwarding
gesetztem1
Wert werden Nachbarwerbung und Werbung nicht weitergeleitet. Um Nachbarwerbung und -werbung von eth0 weiterzuleiten, sollte eth0 als Proxy für die IPv6-Adresse des Clients hinter tap0 festgelegt und das Proxy für Nachbarmaterial für eth0 aktiviert sein:Leider ist es nicht möglich, die Liste der hinzugefügten Proxys abzurufen, und es werden auch keine
ip -6
Fehlermeldungen angezeigt, wenn der Befehl wiederholt ausgeführt wird. Ich bin mir auch nicht sicher, ob "neigh del proxy" funktioniert, es gibt keine Fehlermeldung und die C-Quelle ist für mich nicht wirklich aussagekräftig.Da ich nicht alles manuell erledigen möchte, habe ich ein Skript erstellt, das die Arbeit für mich erledigt.
Serverkonfiguration
IPv6-Adressen basieren auf dem IPv4-Teil (die 1 in 10.8.0. 1 ). Das Präfix und die Netzmaske werden in gespeichert
/etc/openvpn/variables
.Die nächsten Schritte werden zum Einrichten von OpenVPN mit verschlüsselter IPv4 / IPv6-Konnektivität zum Internet über eine native IPv4-Verbindung ausgeführt. RSA-Schlüssel und tls-auth werden zur Authentifizierung und MITM-Verhinderung verwendet.
/etc/openvpn/variables
enthält Variablen, die für das up-Skript (beim Start nach der Erstellung des tap0-Geräts ausgeführt) und das Client-Verbindungsskript (nach der Authentifizierung des Clients ausgeführt) verwendet werden./etc/openvpn/server-clientconnect.sh
wird als root ausgeführt und stellt sicher, dass IPv6 ordnungsgemäß weitergeleitet wird, indem die IPv6-Adresse zum eth0-Proxy hinzugefügt wird. Daclient-connect
OpenVPN aufgerufen wird, nachdem es zu dem durch dieUser
Einstellung angegebenen Benutzer gewechselt wurde ,sudo
ist es erforderlich, dem Skript ausreichende Berechtigungen zum Ausführen als Root zu erteilen. Natürlich sollten Variablen vor der Verwendung überprüft werden, die Nummer sollte zwischen und einschließlich 2 und 254 liegen. (1 ist das Gateway, 255 die Broadcast-Adresse).Damit dies funktioniert,
vpn
sollte es dem Benutzer gestattet sein, das Skript unter Beibehaltung$ifconfig_pool_remote_ip
der IPv4-Adresse des Remotenetzwerks auszuführen . Fügen Sie der sudoers-Datei die nächsten Zeilen hinzu, indem Sie Folgendes ausführensudo visudo
und anhängen:/etc/openvpn/server-up.sh
Aktiviert IPv4, IPv6-Weiterleitung (eth0 + tap0 hat nicht funktioniert, es musste wirklich seinall
) und Nachbar-Proxy auf eth0. Die Gateway-Adresse wird auch den Serverntap0
hinzugefügt.Schließlich die OpenVPN-Konfigurationsdatei unter
/etc/openvpn/internet.conf
:Der Vollständigkeit halber die Berechtigungen und das Eigentum an Dateien in
/etc/openvpn
:Firewall-Einstellungen:
Konfiguration auf dem Client
/etc/openvpn/client.conf
::ta.key
undca.key
sind die gleichen Dateien vom Server.home.key
undhome.crt
sind Dateien, die auf dem Server erstellt wurden.client-up.sh
fügt die IPv6-Adresse und -Route hinzu (basierend auf der IPv4-Adresse):Die Anleitung unter http://www.ipsidixit.net/2010/03/24/239/ war sehr hilfreich und die OpenVPN-Handbuchseite ist nützlich, um Informationen zu verschiedenen Einstellungen zu erhalten.
quelle
eth0
ist die Schnittstelle, die standardmäßig den gesamten Datenverkehr (einschließlich IPv6) weiterleitet .Der Upstream-Router ist für 2001: db8 :: 100: abc: 2 so konfiguriert, dass er sich auf dem direkt angeschlossenen Link befindet. Setzen Sie net.ipv6.conf.eth0.proxy_ndp = 1, um dies vorzutäuschen.
quelle