====== WireGuard-DynDNS-Proxy ======
Wer kennt das Problem nicht? 😀
Privat hat man nur eine dynamisch wechselnde IP-Addresse, will aber ein VPN darauf aufbauen. Wireguard verlangt z.B. eine statische IP. Die Scripts, die diesen Umstand umgehen zu versuchen funktionieren unter Android nicht wirklich.
Allerdings sind vServer mittlerweile schon sehr günstig geworden (z.B. Strato ab 1€/Mon). Mit denen kann man super einen "Zwischenserver" aufbauen. Braucht ja auch kaum Ressourcen. Allerdings erhöht sich natürlich der Ping.
Unter Linux kann man solche Forwardings relativ einfach mit iptables lösen (net.ipv4.ip_forward muss 1 sein). Allerdings kann iptables nicht mit Namen umgehen.
Daher habe ich ein Script geschrieben, das die iptables steuert und regelmäßig die Domain neu auflöst und ggf. iptables anpasst. Es basiert auf der [[https://github.com/ldx/python-iptables|python-iptables]]-Bibliothek, welche man über PIP installieren kann. Als Domain wird die DynDns (die z.B. in der FritzBox hinterlegt ist) eingetragen.
import time
import os
import socket
import iptc
remote_host_last = ''
while True:
try:
remote_host = socket.gethostbyname("domain")
#print(remote_host)
if remote_host != remote_host_last:
chain1 = iptc.Chain(iptc.Table(iptc.Table.NAT), 'PREROUTING')
chain2 = iptc.Chain(iptc.Table(iptc.Table.NAT), "POSTROUTING")
for rule in chain1.rules:
if rule.matches[0].dport=='51820':
chain1.delete_rule(rule)
for rule in chain2.rules:
if rule.protocol=='udp':
chain2.delete_rule(rule)
rule = iptc.Rule()
rule.protocol = 'udp'
match = rule.create_match('udp')
match.dport= '51820'
target = rule.create_target('DNAT')
target.to_destination = remote_host + ':51820'
chain1.insert_rule(rule)
rule = iptc.Rule()
rule.protocol = "udp"
target = iptc.Target(rule, "MASQUERADE")
rule.target = target
chain2.insert_rule(rule)
remote_host_last = remote_host
except:
pass
time.sleep(60 * 3)
Anschließend in den Autostart damit. Beispielsweise mit einem Cronjob:
crontab -e
Diese Zeile einfügen:
@reboot python3 /root/iptables.py
{{tag>[linux iptables wireguard python]}}
\\ ~~DISQUS~~