Wireguard VPN - Verbindung klappt nicht

  • Hallo, vielleicht kann mir hier jemand helfen.

    Ich habe auf meinem RS 1000 G9 Archlinux installiert, und versuche gerade einen VPN-Server aufzusetzen.

    Habe zuerst OpenVPN mit diesem Script versucht zu installieren: https://github.com/angristan/openvpn-install

    Das hat nicht funktioniert - der Server lief, aber ich konnte gar nicht erst verbinden, und es wurde von meinem PC aus nicht einmal der OpenVPN-Port des Servers als offen angezeigt, z.B. wenn ich mit nmap nachgeschaut habe.


    Habe dann noch Wireguard ausprobiert, mit diesem Script am Server installiert: https://github.com/angristan/wireguard-install

    Hier aber dasselbe Problem, es kam keine Verbindung zustande.

    Am Client wird mir die Verbindung angezeigt:

    Der Server tut aber so, als hätte er keine Verbindung:

    Code
    1. v2202006123605121186% sudo wg
    2. interface: wg0
    3. public key: YgZK3/ZP9TUi95I2cFCp4+KwE5SvwuDtn8zVhpFZkVE=
    4. private key: (hidden)
    5. listening port: 52664
    6. peer: +U9TRtj7yJaif35Gt7GNL7dhT1mDZ/fJQI18U2Mkuho=
    7. preshared key: (hidden)
    8. allowed ips: 10.66.66.2/32, fd42:42:42::2/128

    Wenn ich am Client mit dem Wireguard-Device wg0 verbunden bin und versuche, 10.66.66.1 zu pingen (die Wireguard-IP des Servers), kommt nichts zurück.


    Port-Scan vom Server auf sich selbst:

    Port-Scan vom Client aus:


    Woran kann es liegen, dass ich keine Verbindung kriege, bzw. dass der VPN von außen nicht erreichbar ist?

  • Mahlzeit

    Kannst du bitte mal die Wireguard Konfig selbst posten? Den Nmap scan würde ich mal gegen deine Public IP machen, nicht gegen die 127.0.0.1 vom Server selbst aus.


    Momentan schwanke ich noch zwischen falschem Port und evtl Firewall die dazwischenfunkt.


    Gruß

  • Wenn ich nmap scan auf meine public IP mache (vom Server auf sich selbst), kommt das gleiche Ergebnis:

    Hier ist die Wireguard-Config am Server:

    Hier ist die Wireguard-Config am Client:

    Hier sind die iptables am Server:

  • Ich habe jetzt noch ein bisschen herumprobiert, und einmal einen einfachen TCP-Server mit Port 22223 aufgemacht. Müsste eigentlich möglich sein zu verbinden, mein Webserver auf Port 80/443 funktioniert ja auch ohne Probleme.


    Der Verbindungsaufbau von außen wird jedoch abgelehnt:

    Code
    1. [root@simon-desktop wireguard]# nc -v XX.XXX.XXX.XX 22223
    2. v2202006123605121186.ultrasrv.de [XX.XXX.XXX.XX] 22223: Verbindungsaufbau abgelehnt


    Wenn ich nginx herunterfahre, und den selben TCP-Server auf Port 80 laufen lasse, funktioniert es wie erwartet:

    Code
    1. [root@simon-desktop wireguard]# nc -v 45.129.182.19 80
    2. v2202006123605121186.ultrasrv.de [45.129.182.19] 80 (http) open


    Jetzt meine Frage bzw. Vermutung: Kann es sein, dass netcup selbst eine Firewall davor geschalten hat, die nur bestimmte Standardports wie SSH oder HTTPS offen lässt? Oder gibt es irgendwas außer iptables, das mir die Ports von außen blockieren könnte?

  • Ist sichergestellt, dass dein Client auf den Ports ausgehend kommunizieren darf?

    Ja. Habe gerade den selben TCP-Server, es ist ein ganz einfacher Echo-Server, auf einem anderen VPS, ebenfalls Port 22223 laufen, und dort ist eine Verbindung von außen möglich.

  • Dann ist es jetzt an der Zeit mit tcpdump zu schauen, was am Server ankommt. Und überprüfe mit netstat -tulpen, welche Ports auf welchen Interfaces offen sind.


    Übrigens Hinweis: Ich halte absolut gar nichts von diesen Installations-Scripten. Die fuhrwerken sonstowo in der Konfiguration rum, wo sie absolut gar nichts verloren haben. Wer weiß, was die angerichtet haben.

  • Na ja, zu Installations-Scripts kann ich sagen, besser als alles von Hand machen. Und so ein Script ist ja jederzeit einsehbar.


    Aber ich habe jetzt das Problem gefunden - es war zusätzlich zu iptables noch nftables konfiguriert, und das hat mir die entsprechenden Ports blockiert. Ein netstat -tulpen hätte mir das aber auch nicht gesagt, da wurde der Port immer als offen angezeigt :/


    Ich bin jetzt nur draufgekommen, weil ich gegoogelt habe, welche Firewalls es gibt, und dann eben nach der Reihe durchgeschaut ob davon irgendwas installiert ist. Hat jemand eine Idee, wie ich so etwas in Zukunft besser diagnostizieren könnte?

  • Die nftables habe ich damals selbst aufgesetzt, manuell ohne Script und dann vergessen im Laufe der Zeit. Ich hatte heute angenommen, es wäre außer iptables nichts drauf, also komplett mein Fehler. Es gibt wohl keinen guten Trick, so einen Fehler effektiver zu finden, als alle Möglichkeiten abzuklappern. Oder kann man beim Linux-Kernel irgendwie auslesen, welche Firewalls aktiv sind?

    Trotzdem danke für die Lösungsansätze, ich weiß die Hilfe sehr zu schätzen!

  • Ich verwalte Iptables als auch Paketinstallation mittlerweile komplett über Ansible. Wenn ich einen neuen Port brauche, weiß ich, dass ich eine Anpassung machen muss. Andernfalls ist der Port zu.

    Im Firewall Skript kannst du halt die Möglichkeiten abklappern um zu prüfen, ob die bekannten Paketfilter aktiv sind, das ist ja noch überschaubar. IPtables verwalte ich auch mit Ansible Templates und kann dann über Werte beeinflussen, welche Regeln aufgespielt werden. Zudem habe ich ein Matrix in der ich genau weiß, welche Ansible Rollen nach dem aufsetzen eines neuen Systems laufen. Die werden auch wöchentlich vollautomatisch in einer CI Pipeline durchgetestet (Laufzeit mit idempotenztest von Molecule sind knapp 20 Minuten)


    Bzgl dem Wireguard Skript. Ich habe mir das angeschaut, aber spätestens bei der Zeile https://github.com/angristan/w…wireguard-install.sh#L103 würde es das nicht durch einen Idempotenztest schaffen mir 99,XX Wahrscheinlichkeit.