Mehrere Wireguard-Schnittstellen, die jeweils die „echte“ Schnittstelle direkt verwenden und über die jede IP-Adresse erreichbar ist.

Mehrere Wireguard-Schnittstellen, die jeweils die „echte“ Schnittstelle direkt verwenden und über die jede IP-Adresse erreichbar ist.

Ich muss mehrere wg-quickSchnittstellen auf einem einzigen Computer einrichten, die beide unabhängig voneinander direkt die echte Ethernet-Netzwerkkarte verwenden.
Das Problem, auf das ich stoße, ist, dass ich über jede dieser Schnittstellen auf das gesamte Internet zugreifen möchte, was vermutlich bedeutet AllowedIPs = ::0, dass ich aber wg-quickgerne lokal Routen hinzufügen möchte, sodass der gesamte Datenverkehr, der irgendwohin geht, über diese neue Schnittstelle läuft; einschließlich aller folgenden wg-quickVersuche.

Gibt es eine Möglichkeit, es anzurufen wg-quickund zu sagen: „Hey, nein, ich möchte, dass du speziell verwendest eno1, nicht das ‚Standard-Gateway‘“? Vielleicht mit raw wg?

Ich habe versucht, eine Menge online zu lesen, aber ich bin immer verwirrt, was andere fragen, wenn esscheintwie eine ähnliche Frage, aber es stellt sich heraus, dass mehrere Wireguard-Dienste oder so etwas gehostet werden.

Unten ist das grundlegende Prinzip mit zwei WG-Schnittstellen dargestellt. wg0In diesem Fall wird der normale wg-quickVorgang ausgeführt, bei dem der gesamte Datenverkehr transparent gestohlen wird. Dabei wg1ist eine Schnittstelle verfügbar, über die ich Apps so konfigurieren kann, dass sie gezielt mit ihr kommunizieren.
Es macht mir nichts aus, wenn Ihre Lösung wg0gezwungen wird, auf diese Weise zu funktionieren. Ich kann einen SOCKS- und HTTP-Proxy für Software einrichten, die die Flags „Diese Schnittstelle/IP für Datenverkehr verwenden“ nicht unterstützt, um denselben Effekt zu erzielen.

                                                             
      Home                ║      ISP       ║       Internet  
                          ║                ║                 
                          ║                ║                 
  ┌─────────────┐         ║                ║                 
  │             │         ║                ║                 
  │             │         ║                ║        ┌───┐    
  │             │         ║                ║     ╔══╪        
  │         eno1│         ║                ║     ║  └───┘    
  │   wg0      ┐│         ╙────────────────╜     ║  VPN0     
  │     ┐      └─────────────┘                   ║           
  │     ╞════════════════════════════════════════╝           
  │     ┘   ╔════════════════════════════════════╗           
  │   wg1   ║  ┌─────────────┐                   ║           
  │     ╓   ║  ┘│  router                        ║  ┌───┐    
  │     ╠═══╝   │         ╓────────────────╖     ╚══╪        
  │     ╙       │         ║                ║        └───┘    
  │             │         ║                ║        VPN1     
  │             │         ║                ║                 
  └─────────────┘         ║                ║                 
        PC                                                   
                                                             

"Warum?". Bei Verwendung von OpenVPN erlaubte mein Anbieter offene Ports, grundsätzlich, sofern die lokale Firewall dies zuließ, ich war öffentlich routbar und konnte Dienste auf einer beliebigen Anzahl von Ports hosten. Sie sind zu Wireguard gewechselt, was großartig ist, aber sie unterstützen nur einen offenen Port pro Wireguard-Verbindung. Grundsätzlich möchte ich also für jede App, für die ich einen Port weitergeleitet habe, eine VPN-Schnittstelle einrichten.

Ist dies nur mit Wireguard möglich, ohne Iptables oder irgendetwas (was ich überhaupt nicht verstehe)?

Antwort1

JA. Okay. Die Lösung ist also auf den ersten Blick wirklich so einfach wie: sudo ip route add $VPN1 via eno1Sie ermöglicht die Verbindung zu VPN1 über eno1, unabhängig davon, ob wg0 vorhanden ist. Sie dürfen mehrere ::0wg-Schnittstellen imgleicher Namespacemit einem davon als Standard (wg0), sofern Ihre Anwendungen die Bindung an eine Schnittstelle für Verbindungen (wie ) unterstützen . Der Vorbehalt besteht darin, dass nur ein solcher Tunnel mit netcat -serstellt werden kann .wg-quickTable=auto


ABER ich habe die letzte Woche damit verbracht, gegen den Grund anzukämpfen, der mich überhaupt dazu veranlasst hat, dies zu tun: nämlich dass diese WG-Schnittstellen den eingehenden Datenverkehr übermitteln!

Ich habe mehrere Dinge ausprobiert;

  • einfach naiv wg-quickmehrere Male mit den vorhandenen Routen ausführen (das beendet alles und der Versuch, wg-quick downIhren Netzwerkstapel vollständig zu zerstören)
  • wie oben, mehrere hochdrehen, einen mit Table=auto, die anderen mitTable=off
  • wie oben, mehrere hochdrehen, einen mit wg-quick, die anderen mitwg
  • Mehrfaches Aufdrehen miteno1versteckt sich hinter einemnamespace(Ich konnte dies nicht einmal für ausgehenden Datenverkehr zum Laufen bringen ...)
  • Mehrfaches Aufdrehen mitjeder wgauf seine Artnamespace

Aber obwohl diese [für ausgehenden Verkehr über ihre jeweiligen Tunnel] funktionieren (sofern nicht anders angegeben), haben alle diese Dienste eingehende Verbindungen abgelehnt (getestet mit netcat -l -p $assignedPort), unabhängig davon, ob ufw disablefür "VPN{0,1}" dieselben oder unterschiedliche Server verwendet wurden.


Die Lösung hierfür ist etwas, das ichbin gestern endlich drauf gestoßen. Die Zauberformel wg-quickwar Table=auto;FwMark.

Die Sache, die ich vermeiden wollte, selbst zu lernen, ist: „Ist das nur mit Wireguard möglich?“ Nun, Sie müssen die Pakete markieren und einer Tabelle zuordnen, ABER Sie müssen nicht verstehen/nachahmen/neu implementieren, was wg-quickfunktioniert … anscheinend können Sie einfachverwendenEs.

Nachdem Sie den Standardtunnel zu VPN0 eingerichtet haben, verwenden wg-quickSie diesen FwMark und setzen den ip routefür VPN1FwMark wiederverwendenfür wg. Diese letztere Verbindung läuft jetzt über eno1 (gemäß der Route), lässt aber die Weiterleitung eingehender Pakete von VPN1 zu (dank der vom Tunnel von VPN0 eingerichteten Tabelle).

verwandte Informationen