Ich möchte meinen kompletten Internetverkehr vom Fire TV über meinen VPServer leiten. Hintergrund ist, dass ich über Telekom Glasfaser regelmäßig mit Prime Probleme habe bzgl. Fallback auf HD. Über Nord VPN funktioniert das ohne Probleme allerdings kostet das 40€ im Jahr extra und Geoblocking will ich auf dem Weg aktuell eh nicht umgehen. Für Testzwecke habe ich aktuell eine Ubuntu VM auf Clientseite aufgesetzt, weil das Fire TV im Standard wenig Eingriffe zulässt. Insofern habe ich nun auf beiden Seiten des Tunnels Linux.
Geplantes Setup
VM PC / Fire TV mit Wireguard im Folgenden Client genannt (gesamter Verkehr) > Fritz Box > Wireguard Tunnel > VPS mit Wireguard im Folgenden Server genannt > Internet - Die Fritz Box soll nicht den Tunnel aufbauen, sondern der Client auf dem Endgerät (das soll in der finalen Konfiguration das Fire TV Cube selbst machen, aktuell macht es aus Testgründen die VM).
Nach kurzem Googeln erschien mir PIVPN die am wenigsten aufwendige Lösung zu sein. Allerdings geht der Wizard von der UFW Firewall aus, ich habe auf dem VPS aber firewalld aktiv. Der Teil der Autokonfiguration funktioniert somit nicht komplett.
Zuerst habe ich den PIVPN Wizard auf dem VPS durchlaufen, anschließend die Konfigurationsdatei zum Client (also Fire TV / Ubuntu Test VM) geschoben und Wireguard auf dem Client aktiviert. Im Server habe ich Port 51820 geöffnet. Die Wireguard Verbindung funktioniert. Ich kann vom Client beide Enden des Tunnels und die öffentliche IP des Servers pingen.
Zwecks forwarding habe ich folgende Einstellungen auf dem Server angepasst, da der Datenverkehr vom Wireguard Tunnel ins Internet weitergeleitet werden soll:
net.ipv4.ip_forward = 0 zu net.ipv4.ip_forward = 1 und das gleiche für IPV6 mit net.ipv6.conf.all.forwarding=1.
wg show auf dem Client (Ubuntu VM)
Ping auf Client zu Public server ip
Ping auf client für eigene wireguard ip (Aus client Sicht Anfang des Tunnels)
Ping auf client für server wireguard ip (aus Client Sicht Ende des Tunnels)
Wireguard Client config (Ubuntu VM)
Wireguard Server config (VPS Server)
Ausgabe auf dem Server beim Stard von Wireguard:
Was nicht läuft ist das Umleiten des Internetverkehrs vom Client. Die meisten Guides erwähnen iptables oder UFW, letzteres ist bei mir inaktiv und in iptables sind Einträge enthalten die teilweise von firewalld kommen und teilweise Programme auch selber da rein schreiben - das war mir bisher noch nicht so bewusst und könnte ggf. Probleme verursachen. Ich habe testweise firewalld auch mal deaktiviert, das bringt bzgl. der Thematik keinen für mich sichtbaren Unterschied.
Iptables auf dem Server:
Einige Regeln erscheinen mir auch nicht sinnvoll:
IP Tables NAT auf dem Server:
firewalld zones:
mysite:
mywg
Direct rules:
Pyvpn Konfigurationsdatei (die dürfte nach der initialen Konfiguration nicht mehr relevant sein:
Jemand eine Idee?
Geplantes Setup
VM PC / Fire TV mit Wireguard im Folgenden Client genannt (gesamter Verkehr) > Fritz Box > Wireguard Tunnel > VPS mit Wireguard im Folgenden Server genannt > Internet - Die Fritz Box soll nicht den Tunnel aufbauen, sondern der Client auf dem Endgerät (das soll in der finalen Konfiguration das Fire TV Cube selbst machen, aktuell macht es aus Testgründen die VM).
Nach kurzem Googeln erschien mir PIVPN die am wenigsten aufwendige Lösung zu sein. Allerdings geht der Wizard von der UFW Firewall aus, ich habe auf dem VPS aber firewalld aktiv. Der Teil der Autokonfiguration funktioniert somit nicht komplett.
Zuerst habe ich den PIVPN Wizard auf dem VPS durchlaufen, anschließend die Konfigurationsdatei zum Client (also Fire TV / Ubuntu Test VM) geschoben und Wireguard auf dem Client aktiviert. Im Server habe ich Port 51820 geöffnet. Die Wireguard Verbindung funktioniert. Ich kann vom Client beide Enden des Tunnels und die öffentliche IP des Servers pingen.
Zwecks forwarding habe ich folgende Einstellungen auf dem Server angepasst, da der Datenverkehr vom Wireguard Tunnel ins Internet weitergeleitet werden soll:
net.ipv4.ip_forward = 0 zu net.ipv4.ip_forward = 1 und das gleiche für IPV6 mit net.ipv6.conf.all.forwarding=1.
Code:
cat /proc/sys/net/ipv4/ip_forward
1
wg show auf dem Client (Ubuntu VM)
Code:
wg show
wg0
public key: <my key>
private key: (hidden)
listening port: 45706
fwmark: 0xca6c
peer: <my key>
preshared key: (hidden)
endpoint: <public server ip>:51820
allowed ips: 0.0.0.0/0, ::/0
latest handshake: 4 minutes, 37 seconds ago
transfer: 93.15 KiB received, 227.65 KiB sent
Ping auf Client zu Public server ip
Code:
ping <public server ip>
PING <public server ip> (<public server ip>) 56(84) bytes of data.
64 bytes from <public server ip>: icmp_seq=1 ttl=64 time=18.4 ms
Ping auf client für eigene wireguard ip (Aus client Sicht Anfang des Tunnels)
Code:
ping 10.143.176.2
PING 10.143.176.2 (10.143.176.2) 56(84) bytes of data.
64 bytes from 10.143.176.2: icmp_seq=1 ttl=64 time=0.031 ms
Ping auf client für server wireguard ip (aus Client Sicht Ende des Tunnels)
Code:
ping 10.143.176.1
PING 10.143.176.1 (10.143.176.1) 56(84) bytes of data.
64 bytes from 10.143.176.1: icmp_seq=1 ttl=64 time=21.9 ms
Wireguard Client config (Ubuntu VM)
Code:
[Interface]
PrivateKey = <my private key>
Address = 10.143.176.2/24,fd11:5ee:bad:c0de::2/64
DNS = 9.9.9.9, 149.112.112.112
[Peer]
PublicKey = <my public key>
PresharedKey = <pre shared key>
Endpoint = <myserverip>:51820
AllowedIPs = 0.0.0.0/0, ::0/0
Wireguard Server config (VPS Server)
Code:
[Interface]
PrivateKey = <myprivate key>
Address = 10.143.176.1/24,fd11:5ee:bad:c0de::1/64
MTU = 1420
ListenPort = 51820
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; iptables -A FORWARD -o %i -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens18 -j MASQUERADE; iptables -D FORWARD -o %i -j ACCEPT
### begin firetv ###
[Peer]
PublicKey = <my public key>
PresharedKey = <my preshared key>
AllowedIPs = 10.143.176.2/32,fd11:5ee:bad:c0de::2/128
### end firetv ###
Ausgabe auf dem Server beim Stard von Wireguard:
Code:
wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.143.176.1/24 dev wg0
[#] ip -6 address add fd11:5ee:bad:c0de::1/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens18 -j MASQUERADE; iptables -A FORWARD -o wg0 -j ACCEPT
Was nicht läuft ist das Umleiten des Internetverkehrs vom Client. Die meisten Guides erwähnen iptables oder UFW, letzteres ist bei mir inaktiv und in iptables sind Einträge enthalten die teilweise von firewalld kommen und teilweise Programme auch selber da rein schreiben - das war mir bisher noch nicht so bewusst und könnte ggf. Probleme verursachen. Ich habe testweise firewalld auch mal deaktiviert, das bringt bzgl. der Thematik keinen für mich sichtbaren Unterschied.
Iptables auf dem Server:
Code:
sudo iptables -L -v -n
Chain INPUT (policy ACCEPT 161K packets, 205M bytes)
pkts bytes target prot opt in out source destination
20 1296 ACCEPT all -- * * 10.143.176.0/24 0.0.0.0/0 /* wireguard subnet */
0 0 ACCEPT all -- * * 0.0.0.0/0 10.143.176.0/24 /* wireguard subnet */
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
677 45957 DOCKER-ISOLATION-STAGE-1 all -- * * 0.0.0.0/0 0.0.0.0/0
677 45957 DOCKER-USER all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * docker0 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 DOCKER all -- * docker0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- docker0 !docker0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- docker0 docker0 0.0.0.0/0 0.0.0.0/0
677 45957 ACCEPT all -- wg0 ens18 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- * wg0 0.0.0.0/0 0.0.0.0/0 /* wireguard subnet */
0 0 ACCEPT all -- * * 10.143.176.0/24 0.0.0.0/0 /* wireguard subnet */
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain DOCKER (1 references)
pkts bytes target prot opt in out source destination
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
pkts bytes target prot opt in out source destination
677 45957 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-ISOLATION-STAGE-2 (0 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-USER (1 references)
pkts bytes target prot opt in out source destination
677 45957 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Einige Regeln erscheinen mir auch nicht sinnvoll:
Code:
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 10.143.176.0/24 /* wireguard subnet */
0 0 ACCEPT all -- * wg0 0.0.0.0/0 0.0.0.0/0 /* wireguard subnet */
IP Tables NAT auf dem Server:
Code:
sudo iptables -L -v -n -t nat
Chain PREROUTING (policy ACCEPT 5482 packets, 1423K bytes)
pkts bytes target prot opt in out source destination
809 43992 DOCKER all -- * * 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 2410 packets, 170K bytes)
pkts bytes target prot opt in out source destination
1329 81808 DOCKER all -- * * 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT 2410 packets, 170K bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0
Chain DOCKER (2 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- docker0 * 0.0.0.0/0 0.0.0.0/0
firewalld zones:
mysite:
Code:
sudo firewall-cmd --zone=mysite --add-rich-rule='rule family="ipv4" source address="10.143.176.0/24" masquerade'
sudo firewall-cmd --zone=mysite --add-source=<mypublic ip>/32 UDP Port 51820 open
mywg
Interface WG0
Direct rules:
Code:
ipv4 filter foeward -o wg0 -j ACCEPT -m comment --comment 'wireguard subnet'
ipv4 filter forward -i wg0 -o ens18 -j ACCEPT
ipv4 filter forward -s 10.143.176.0/24 -j ACCEPT -m comment --comment 'wireguard subnet'
ipv4 filter input -s 10.143.176.0/24 -j ACCEPT -m comment --comment 'wireguard subnet'
ipv5 filter input -d 10.143.176.0/24 -j ACCEPT -m comment --comment 'wireguard subnet'
Pyvpn Konfigurationsdatei (die dürfte nach der initialen Konfiguration nicht mehr relevant sein:
Code:
PLAT=Ubuntu
OSCN=jammy
USING_UFW=0
IPv4dev=ens18
IPv6dev=ens18
install_user=admin
install_home=/home/admin
VPN=wireguard
pivpnPORT=51820
pivpnDNS1=9.9.9.9
pivpnDNS2=149.112.112.112
pivpnHOST=<my vpn public ip>
pivpnPROTO=udp
pivpnMTU=1420
pivpnDEV=wg0
pivpnNET=10.143.176.0
subnetClass=24
pivpnenableipv6=1
pivpnNETv6="fd11:5ee:bad:c0de::"
subnetClassv6=64
ALLOWED_IPS="0.0.0.0/0, ::0/0"
UNATTUPG=0
INSTALLED_PACKAGES=(grepcidr qrencode)
INPUT_CHAIN_EDITED=1
FORWARD_CHAIN_EDITED=1
Jemand eine Idee?
Zuletzt bearbeitet: