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
gesetztem 1
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:
echo 1 > /proc/sys/net/ipv6/conf/eth0/proxy_ndp
/sbin/ip -6 neigh add proxy 2001:db8::100:abc:2 dev eth0
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.
# this prefix is handled out by the provider, replace it with your own prefix
prefix=2001:db8::abc
# netmask, 2001:db9::abc:0000 - 2001:db9::abc:FFFF
prefixlen=112
/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. Da client-connect
OpenVPN aufgerufen wird, nachdem es zu dem durch die User
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).
#!/bin/sh
. /etc/openvpn/variables
if [ -z "$ifconfig_pool_remote_ip" ]; then
echo "Missing environment variable."
exit 1
fi
ipp=$(echo "$ifconfig_pool_remote_ip" | cut -d. -f4)
if ! [ "$ipp" -ge 2 -a "$ipp" -le 254 ] 2>/dev/null; then
echo "Invalid IP part."
exit 1
fi
hexipp=$(printf '%x' $ipp)
/sbin/ip -6 neigh add proxy $pfx:$hexipp dev eth0
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ühren sudo visudo
und anhängen:
Defaults:vpn env_keep=ifconfig_pool_remote_ip
vpn ALL=NOPASSWD: /etc/openvpn/server-clientconnect.sh
/etc/openvpn/server-up.sh
Aktiviert IPv4, IPv6-Weiterleitung (eth0 + tap0 hat nicht funktioniert, es musste wirklich sein all
) und Nachbar-Proxy auf eth0. Die Gateway-Adresse wird auch den Servern tap0
hinzugefügt.
#!/bin/sh
. /etc/openvpn/variables
/sbin/ip -6 addr add $pfx:1/$pfxlen dev $dev
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
echo 1 > /proc/sys/net/ipv6/conf/eth0/proxy_ndp
Schließlich die OpenVPN-Konfigurationsdatei unter /etc/openvpn/internet.conf
:
proto udp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
script-security 2
up /etc/openvpn/server-up.sh
client-connect "/usr/bin/sudo -u root /etc/openvpn/server-clientconnect.sh"
# encrypt all traffic
push "redirect-gateway def1"
# keep the same IP addresses each time
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
cipher BF-CBC
comp-lzo
# OpenVPN will switch to this user, it is also used for sudo
user vpn
group vpn
persist-key
persist-tun
Der Vollständigkeit halber die Berechtigungen und das Eigentum an Dateien in /etc/openvpn
:
drwx------ root root .
-rw------- root root ca.crt
-rw------- root root dh1024.pem
drwx------ root root easy-rsa <-- left from creation of keys
-rw------- root root ipp.txt
-rwx------ root root server-clientconnect.sh
-rw------- root root internet.conf
-rw------- root root variables
-rwx------ root root server-up.sh
-rw------- root root server.crt
-rw------- root root server.key
-rw------- root root ta.key
-rwx------ root root update-resolv-conf <-- this was installed by default
Firewall-Einstellungen:
itpables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -i tap0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
ip6tables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A FORWARD -s 2001::db8::abc:0/112 -i tap0 -o eth0 -j ACCEPT
Konfiguration auf dem Client
/etc/openvpn/client.conf
::
client
dev tap
proto udp
remote 178.21.112.251 1194
script-security 2
up /etc/openvpn/client-up.sh
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert home.crt
key home.key
ns-cert-type server
tls-auth ta.key 1
cipher BF-CBC
comp-lzo
ta.key
und ca.key
sind die gleichen Dateien vom Server. home.key
und home.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):
#!/bin/sh
pfx='2001:db8::abc'
pfxlen=112
hexippart=`printf '%x' "$(echo $ifconfig_local | cut -d. -f4)"`
/sbin/ip -6 addr add $pfx:$hexippart/$pfxlen dev $dev
/sbin/ip -6 route add default via $pfx:1 dev $dev
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.
net.ipv6.conf.eth0.forwarding = 1
auf dem Server eingestellt?