socat UDP4-LISTEN:51820,fork,reuseaddr UDP6:[2a01:db8::1]:51820
Glasfaser Anschlüsse sind in Planung und der Anbieter sieht nur Anschüsse mit IP-V6 vor. Die den Router zugeteilte Adressen, sind im Bereich 100.64.0.0/10 (Carrier Grade NAT), sind nicht öffentlich und daher von außen nicht erreichbar.
Manche Geräte/Dienste in LAN können nur über IPv4 erreicht werden (SIP Telefonie der Fritzbox).
Manche Webseiten haben nur eine IPv4 Adresse (zeit.de, bild.de, rheinpfalz.de). Glücklicherweise sind dies Seiten über CG-NAT erreichbar. Dies wäre schlecht, wenn ein IPv4 Zugriff in irgend eine Art nicht erreichbar wäre.
Manche neuere Web-Präsenzen sind nur über IPv6 Erreichbar, die vorgestelle Lösung kann leicht für IPv6 erweitert werden.
Die Verwendung einen VPN wie Wireguard, Zerotier, OpenVPN erlaubt es aus der Ferne sich im Heimnetzwerk zu begeben.
Das VPN Tunnel kann über IPv6 erfolgen, die im Tunnel enthaltene werden entsprechend der Quelle (IPv4 oder IPv6) übertragen.
Ist man in einen Netzt, der keine IPv6 Verbindung erlaubt ist eine Vermittler notwendig.
Die Deutsche-Glasfaser verweist auf Dienste von:
Nachteil: - UDP wird nicht unterstüzt!!!
Es ist möglich sehr kostengünstive vServer zu mieten. Beispiele sind:
Am günstigsten ist Ionos mit ein Preis von 1 Euro pro Monat.
Socat fungiert, in unseren Fall, als Übersetzer zwischen IPv4 und IPv6 Telegramme.
Für jeden Dienst, welches über das Internet angeboten wird, ist einer entsprechende Instanz zu starten.
Kritrerien:
Meiner Wahl ist Wireguard
Auf der V-Server muss lediglich eine Instanz von socat laufen:
socat UDP4-LISTEN:51820,fork,reuseaddr UDP6:[2a01:db8::1]:51820
socat TCP4-LISTEN:80,fork,reuseaddr TCP6:[2a01:db8::1]:80
socat TCP4-LISTEN:443,fork,reuseaddr TCP6:[2a01:db8::1]:443
Am besten is es die Dienste über Systemd zu starten.
Siehe: https://www.mbuth.de/?cat=13
Die Wireguard Konfiguration sieht entsprechend so aus:
[Interface]Address = 192.168.0.2/32 PrivateKey =PRIVAT CLIENT KEY [Peer] PublicKey =SERVER PUBLIC KEY AllowedIPs = 192.168.0.0/24 Endpoint = 192.0.2.123:51820
192.0.2.123 steht für die IPv4 Adresse des V-Server.
IP4 IP6 IP4 Phone <--> V-Server <--> Wireguard <-> Sipxoxd <-> Tel Server Internet | LAN
[Interface] PrivateKey =PRIVAT SERVER KEY Address = 192.168.0.1 ListenPort = 51820 [Peer] PublicKey =PUBLIC CLIENT KEY AllowedIPs = 192.168.0.2/32
Auf Linphone ist anzugeben, dass die Route über das Siproxd Server (auf den gleichen Server wie wireguard) laufen muss.
SIP-Adresse [sip:12345678@192.168.178.1 ] SIP-Serveradresse [<sip:192.168.0.1;transport=udp> ] Route [sip:192.168.0.1 ]
Siproxd empfängt Daten aus den Internet und modifitiert auch Adressen im Payload. Betoffen sind die Port 5060 und 7070 bis 7089.
Es ist nicht möglich über der Adresse, die für der Telefonie eingerichet wurde den interne Netz zu erreichen (NAT notwendig).
[Interface] PrivateKey =PRIVATE KEY SERVER Address = 192.168.0.1 Address = 192.168.1.1 PostUp = sysctl net.ipv4.conf.all.forwarding=1 PostUp = sysctl -w net.ipv4.ip_forward=1 PostUp = iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT PostUp = iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -s 192.168.1.0/24 -j ACCEPT PostDown = iptables -t nat -D POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE ListenPort = 51820 [Peer] PublicKey =PUBLIC KEY CLIENT AllowedIPs = 192.168.0.2/32, 192.168.1.2/32, 192.168.0.0/16
[Interface] PrivateKey =PRIVATE KEY CLIENT Address = 192.168.0.2 Address = 192.168.1.2 [peer] PublicKey =PUBLIC KEY SERVER PostUp = ip r a 192.178.0/24 via 192.168.1.2 EndPoint = 192.0.2.123:51820 AllowedIp = 192.168.0.0/16
IP4 IP6 IP4 Phone <--> V-Server <--> Wireguard <-> Sipxoxd <-> Tel Server | | -> Nating <-> LAN Geräte Internet | LAN
Synology und QNAP unterstützen nicht wireguard (Kernel Module)
Wireguard bietet eine Userspace Version (in der Sprache go), das Original muss aber gepatcht werden.
Entware erlaubt es viele Linux Programme zu installieren und auf den NAS zu betreiben. Eine gepatche Version von wireguard (wireguard-go) kann unter Entware installiert werden.
Das Starten erfolgt mit ein Script, neispielsweise: /opt/etc/init.d/S62wireguard.sh
DESC=$PROCS PATH=/opt/sbin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin . /opt/etc/init.d/rc.func case $1 in start) wireguard-go wg0 wg setconf wg0 /opt/etc/wireguard/wg0.conf ip link set mtu 1420 up dev wg0 ip a a 192.168.0.1/24 dev wg0 sysctl -w net.ipv4.conf.all.forwarding=1 sysctl -w net.ipv4.ip_forward=1 ;; stop) ;; esac
Die meisten router verwenden ein Adresse im Bereich 192.168.0.0/16. Beliebt sind
Andere verwenden Adresse im Bereich 10.0.0.0/8. Auch Freifunk verwendet oft dieser Bereich.
Damit es nicht zur Kollision kommt dürfen die IP nicht mit der des Anbieter (Fremde Router, Freifunk, …) kollidieren.
Im Bereich 172.16.0.0/12 (172.16.x.x bis 172.31.x.x) sollte am besten geeignet sein. Allerdings habe ich Adressen aus den Bereich im Freifunk Netz gesichtet!!!
Das Ausweichen auf 100.64.0.0/10 ist auch keine Alternative.
25.0.0.0/8 RIPE NCC 1995-01 As of 2005-08-23 entire block assigned to UK Ministry of Defence
siehe auch: https://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xhtml
Siehe: https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml
Address Block |
Name |
RFC |
Allocation Date |
Termination Date |
Source |
Destination |
Forwardable |
Globally Reachable |
Reserved-by-Protocol |
… |
… |
[…] |
… |
… |
… |
… |
… |
… |
… |
192.168.0.0/16 |
Private-Use |
[RFC1918] |
1996-02 |
N/A |
True |
True |
True |
False |
False |
… |
… |
[…] |
… |
… |
… |
… |
… |
… |
… |
198.18.0.0/15 |
Benchmarking |
[RFC2544] |
1999-03 |
N/A |
True |
True |
True |
False |
False |
… |
… |
[…] |
… |
… |
… |
… |
… |
… |
… |
Default MTU ist 1420 (80 Bytes weniger als das Default von 1500 Bytes).
Bei den Tests, das fremdes Netz ging über Freifunk, konnte nicht immer eine Verbindung aufgebaut werden. Dies ist möglicherweise durch einer Konfigurationsfehler einen der FF-Server zurückzuführen.
Durch Reduzierung auf ein MTU von 1280 Bytes ging es.
#!/bin/bash MTU=1280 DNS=192.168.178.1 # 198.18.0.1 # Falls DNS-Server auf das WG-Server läuft # DOMAIN=fritz.box USERSPACE=TRUE getDevGw() { GATEWAY=`ip r get 1.1.1.1 | awk '{print $3;exit}'` DEV=`ip r get 1.1.1.1 | awk '{print $5,exit}'` SRC=`ip r get 1.1.1.1 | awk '{print $7;exit}'` }
case $1 in start|up) getDevGw if [ "$USERSPACE" == "TRUE" ]; then wireguard-go wg0 else ip l add dev wg0 type wireguard; fi wg setconf wg0 /etc/wireguard/wg0.conf ip link set mtu $MTU up dev wg0 ip a a 198.18.0.2/24 dev wg0 # Tunnel IP kein NAT, mit Route ip a a 198.18.1.2/24 dev wg0 # Tunnel IP mit NAT, mit Route ip r a 192.168.178.0/24 via 198.18.1.2 # Route für Zugriff mit NAT auf das Heimnetz if [ "$DNS" != "" ]; then echo nameserver $DNS | resolvconf -a wg0 -m 0 -x; resolvectl default-route $DEV 0 # DNS nur über unseren Netz fi if [ "$GATEWAY" == "192.168.178.1" ]; then ip r a 192.168.178.1 dev $DEV; fi # oder ip r d 192.0.2.123 via $GATEWAY dev $DEV src $SRC resolvectl domain wg0 $DOMAIN ;;
stop|down) if [ "$USERSPACE" == "TRUE" ]; then pkill wireguard-go else ip link del dev wg0; fi getDevGw if [ "$GATEWAY" == "192.168.178.1" ]; then ip r d 192.168.178.1 dev $DEV; fi # oder ip r d 192.0.2.123 via $GATEWAY dev $DEV src $SRC if [ "$DNS" != "" ]; then resolvectl default-route $DEV 1 # DNS wieder über der eigentlich Verbindung fi ;; esac
192.0.2.123 ist die Adresse unserer Socat Server
#!/bin/sh case $1 in start|up) if [ ! -e /var/run/dnsmasq.pid ] then dnsmasq -a 198.18.0.1 -S 192.168.178.1 -h -R -k & fi ;; stop|down) if [ -e /var/run/dnsmasq.pid ] then kill `cat /var/run/dnsmasq.pid` rm /var/run/dnsmasq.pid fi ;; esac
[peer] ... PersistentKeepAlive = 25
#!/bin/sh CMD= TEXT= ip l sh $WG >/dev/null 2>&1 if [ $? -eq 1 ]; then TEXT=Start; CMD=up; else TEXT=Stop; CMD=down; fi while true; do PASS=`zenity --forms --add-password=Passwort --text="$TEXT Wireguard" --title Wireguard` if [ $? -eq 1 ]; then exit; fi if [ "$PASS" != "" ]; then break; fi done sudo -k -S $HOME/bin/wgclient.sh $CMD <<! $PASS ! if [ $? -ne 0 ]; then zenity --error --text "$TEXT Gescheitert" --title Wireguard; fi
#!/bin/sh DTF=$HOME/.config/xfce4/panel/launcher-36/16194579951.desktop ICU=$HOME/.local/share/icons/wireguard/wg-up.svg ICD=$HOME/.local/share/icons/wireguard/wg-down.svg ip l | grep wg > /dev/null 2>&1 case $? in 0) sed -i -e "s@Icon.*@Icon=$ICU@" $DTF;; *) sed -i -e "s@Icon.*@Icon=$ICD@" $DTF;; esac
Anhang (Beispiele): beispiele/anhang.html
Beipiele Download: beispiele.tgz
/