Hinweis: Das hier beschriebene Verfahren ist recht kompliziert und funktioniert nicht sonderlich gut. Ein alternativer Ansatz ist in Vorbereitung!
Manche meiner Kunden erfordern ein VPN, um im Kundennetz zuarbeiten. Vom Kundennetz in’s Internet geht es über einen speziellen Proxy-Server, den der Kunde bereitstellt. Soweit, so gut. Probleme treten auf, seit mehr und mehr im Homeoffice gearbeitet wird. Da ist die Bandbreite über den Proxy-Server oft zu gering, Lösungen wir Teams funktionieren dann nicht mehr richtig. Eine Lösung am VPN vorbei ist notwendig!
Diese Anleitung wurde erstellt mit Ubuntu-20.04.
Ziel
Installation von Zusatzpaketen
Die Installation von Zusatzpakete muß einmalig vorab erfolgen! GAP-VPN darf dabei nicht aktiv sein!
1 2 3 |
|
Squid dauerhaft stoppen
Wir wollen den Service “squid” nicht in der Standardkonfiguration betreiben sondern nur in unserem speziellen GAP-VPN-Modus. Deshalb stoppen wir die automatische Ausführung von “squid” dauerhaft.
Das erste Kommando dauert etwas länger – so 1 – 2 Minuten:
1 2 |
|
Firejail und Netzwerkzugriff
Datei /etc/firejail/firejail.config abändern:
1 2 3 4 5 6 7 8 9 10 11 |
|
Gerne auch via Hilfsskript: sudo .../bin/update-etc-firejail-firejail-config.sh
Vorbereitungen – Informationen sammeln
Die Vorbereitungen können mit oder ohne VPN erfolgen!
Tabelle ermitteln
Benutzer
1 2 |
|
Netzwerkstatus sichten
1 2 |
|
Notiere die Ausgaben! Bei mir: DEVICE=enp3s0 und GATEWAY=192.168.0.1 und DEFAULT_ROUTE=‘default via 192.168.0.1 dev enp3s0 proto dhcp metric 100’
1 2 3 4 5 6 7 |
|
Notiere die Ausgaben! Bei mir: IP_ADDRESS=192.168.0.197
Zusammenfassung – Uli’s Tabelle
Nachfolgend die Zusammenfassung für Uli und dp-0197:
Bezeichnung | Symbol | Wert |
---|---|---|
Benutzer | – | uli |
Default-Route | DEFAULT_ROUTE | default via 192.168.0.1 dev enp3s0 proto dhcp metric 100 |
Gateway | GATEWAY | 192.168.0.1 |
Device | DEVICE | enp3s0 |
IP-Adresse | IP_ADDRESS | 192.168.0.197 |
Routing-Table-ID | TABLE_ID | 10 |
Routing-Table-Name | TABLE_NAME | vpn-bypass-table |
Zur einfacheren Erstellung der Tabelle gibt es das Skript “query-vpn-bypass.sh”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Liefert:
1 2 3 4 5 6 7 8 |
|
Routing-Tabellen sichten und erweitern
Grundinitialisierung
1 2 3 4 5 6 7 8 9 10 |
|
Neue Routing-Tabelle vpn-bypass-table anlegen
Sichten:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Wichtig: Es gibt keine Tabelle mit “10” oder “vpn-bypass”. Falls vorhanden: Löschen!
Anlegen:
1 2 |
|
Nachkontrolle:
1 2 3 4 5 |
|
Default-Route anlegen
Vorabkontrolle: Gibt es die Route schon?
1 2 |
|
Falls nicht vorhanden (wie oben – keine Ausgabe) anlegen:
1
|
|
Nachkontrolle: Route nun vorhanden?
1 2 3 |
|
Routing-Tabelle aktivieren
Vorabkontrolle: Bereits aktiv?
1 2 3 4 |
|
Wenn keine Zeile mit “vpn-bypass-table” angezeigt wird, dann ist die Routing-Tabelle nicht aktiv!
Aktivieren:
1
|
|
Nachkontrolle: Nun aktiv?
1 2 3 4 5 |
|
Initialisierung über Hilfsskript init-vpn-bypass.sh
Hilfskript init-vpn-bypass.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
|
Liefert:
1 2 3 4 5 6 7 8 |
|
Squid mit VPN-BYPASS starten
…/bin/start-squid.sh:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
Nicht-VPN-Tests (Test-1)
Wir führen zunächst einige Tests ohne VPN aus. Damit stellen wir sicher, dass die Cloud-Services zur Verfügung stehen!
VPN-BYPASS-Squid starten
Du brauchst hierfür ein eigenes neues Fenster!
1 2 3 4 5 6 7 8 9 10 |
|
SSH-Zugriff
Führe testweise einen SSH-Zugriff an einem Cloud-Server durch:
1 2 3 4 5 |
|
Thunderbird
Funktioniert Thunderbird wie üblich? Kann ich (Uli) aktuell nicht testen, verwende kein Thunderbird.
Systemaktualisierung
1 2 3 4 5 6 7 8 9 10 11 |
|
Webserver-Abfrage via CURL
1 2 3 4 5 6 7 8 9 10 11 |
|
Webserver-Abfrage via CURL und VPN-BYPASS-Squid
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Webserver-Zugriff im Browser
Mit dieser Prozedur testen:
- Browser stoppen (alle Fenster und Hintergrundprozesse)
- Browser per Kommandozeile neu starten:
google-chrome-stable
- Sicherstellen: Browser verwendet keinen Proxy-Server!
- Url öffnen im Browser: show-my-ip.de
Zeigt meine IP-Adresse an KABELBW.
Webserver-Zugriff im Browser mit VPN-BYPASS-Squid
Mit dieser Prozedur testen:
- Browser stoppen (alle Fenster und Hintergrundprozesse)
- Browser per Kommandozeile neu starten:
google-chrome-stable
- Sicherstellen: Browser verwendet diesen festen Proxy-Server für alle Abfragen: 10.10.20.206:3128
- Url öffnen im Browser: show-my-ip.de
Zeigt meine IP-Adresse an KABELBW.
VPN-BYPASS-Squid stoppen
- VPN-BYBASS-Squid-Fenster aktivieren
- Strg-C –> Prompt erscheint wieder
Zusammenfassung ohne VPN
Für mich (Uli) sehen die Tests so aus:
Name | Wert | S1 | Anmerkung |
---|---|---|---|
…/bin/query-vpn-bypass.sh | – | OK | Ausgeführt, Werte plausibel, kein Fehler |
…/bin/init-vpn-bypass.sh | – | – | NICHT ausgeführt |
…/bin/start-squid.sh | – | OK | Ausgeführt in neuem Fenster, kein Fehler, 10.10.20.206 wird angezeigt, “bleibt hängen” |
SSH-Benutzer@SSH-Server | gitea@gitea.daemons-point.com | OK | Server bei Hetzner, habe meinen SSH-Schlüssel bei DP-GITEA bereits hinterlegt |
Thunderbird | – | – | Nutze ich aktuell nicht |
Systemaktualisierung | – | OK | Klappt |
Web-Server (Curl) | https://show-my-ip.de | OK | Zertifikat kontrolliert – passt |
Web-Server (Curl-VPN-BYPASS) | https://show-my-ip.de | OK | Zertifikat kontrolliert – passt |
Web-Server (Browser) | show-my-ip.de | OK | 91.89.124.131 und HSI-KBW-091-089-124-131.hsi2.kabelbw.de |
Web-Server (Browser-VPN-BYPASS) | show-my-ip.de | OK | 91.89.124.131 und HSI-KBW-091-089-124-131.hsi2.kabelbw.de |
VPN-BYPASS-Squid stoppen | OK | Mit Strg-C abgebrochen, Prompt erscheint |
Erklärungen zur Tabelle:
- S1: Status beim ersten Test (=dieser Test)
Nicht-VPN-Tests mit init-vpn-bypass (Test-2)
Wir führen zunächst einige Tests ohne VPN aus aber mit aktiviertem VPN-BYPASS aus. Damit stellen wir sicher, dass der VPN-BYPASS “nicht stört”.
VPN-BYPASS initialisieren
1 2 3 4 5 6 7 8 |
|
Tests durchführen
Exakt gleich wie bei Test-1! VPN-BYPASS-Squid starten/stoppen nicht vergessen!
Zusammenfassung ohne VPN mit VPN-BYPASS
Für mich (Uli) sehen die Tests so aus:
Name | Wert | S1 | S2 | Anmerkung |
---|---|---|---|---|
…/bin/query-vpn-bypass.sh | – | OK | OK | Ausgeführt, Werte plausibel, kein Fehler |
…/bin/init-vpn-bypass.sh | – | – | OK | Ausgeführt, Werte plausibel, kein Fehler |
…/bin/start-squid.sh | – | OK | OK | Ausgeführt in neuem Fenster, kein Fehler, 10.10.20.206 wird angezeigt, “bleibt hängen” |
SSH-Benutzer@SSH-Server | gitea@gitea.daemons-point.com | OK | OK | Server bei Hetzner, habe meinen SSH-Schlüssel bei DP-GITEA bereits hinterlegt |
Thunderbird | – | – | – | Nutze ich aktuell nicht |
Systemaktualisierung | – | OK | OK | Klappt |
Web-Server (Curl) | https://show-my-ip.de | OK | OK | Zertifikat kontrolliert – passt |
Web-Server (Curl-VPN-BYPASS) | https://show-my-ip.de | OK | OK | Zertifikat kontrolliert – passt |
Web-Server (Browser) | show-my-ip.de | OK | OK | 91.89.124.131 und HSI-KBW-091-089-124-131.hsi2.kabelbw.de |
Web-Server (Browser-VPN-BYPASS) | show-my-ip.de | OK | OK | 91.89.124.131 und HSI-KBW-091-089-124-131.hsi2.kabelbw.de |
VPN-BYPASS-Squid stoppen | OK | OK | Mit Strg-C abgebrochen, Prompt erscheint |
Erklärungen zur Tabelle:
- S1: Status beim ersten Test (=voriger Test)
- S2: Status beim zweiten Test (=dieser Test)
GAP-VPN-Tests (Test-3)
Vorabtest: Ist GAP-VPN funktionsfähig? Klappen die Zugriffe auf GAP-Server?
Wenn die Vorabtests OK sind, dann führen wir qualitzativ die gleichen Tests wie zuvor ohne VPN nun mit GAP-VPN aus!
VPN-BYPASS initialisieren
1 2 3 4 5 6 7 8 |
|
VPN-BYPASS-Squid starten
In einem neuen Fenster:
1 2 |
|
SSH-Zugriff
Gleiche Ausführung wie ohne VPN – Erwartung: Funktoniert nicht!
1 2 |
|
Spezielle Ausführung:
1 2 3 4 5 |
|
Klappt!
Thunderbird
Funktioniert Thunderbird wie üblich? Kann ich (Uli) aktuell nicht testen, verwende kein Thunderbird.
Systemaktualisierung
Gleiche Ausführung wie ohne VPN – Erwartung: Funktoniert nicht!
1 2 |
|
Spezielle Ausführung:
1 2 3 4 |
|
Webserver-Abfrage via CURL
Gleiche Ausführung wie ohne VPN – Erwartung: Funktoniert nicht!
1 2 3 4 |
|
Spezielle Ausführung:
1 2 3 4 5 6 7 8 9 10 11 |
|
Webserver-Abfrage via CURL und VPN-BYPASS-Squid
Gleiche Ausführung wie ohne VPN – Erwartung: Funktoniert!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Spezielle Ausführung:
1 2 3 4 5 6 |
|
Funktioniert nicht, bleibt hängen!
Webserver-Zugriff im Browser
Mit dieser Prozedur testen:
- Browser stoppen (alle Fenster und Hintergrundprozesse)
- Browser per Kommandozeile neu starten:
google-chrome-stable
- Sicherstellen: Browser verwendet die Proxy-PAC-Datei vom GAP-VPN!
- Url öffnen im Browser: show-my-ip.de
Zeigt die IP-Adresse an von einem der GAP-Internet-Proxies.
Bypass:
- Browser stoppen (alle Fenster und Hintergrundprozesse)
- Browser per Kommandozeile neu starten:
firejail --noprofile --net=${DEVICE} --dns=${DNS} --defaultgw=${GATEWAY} google-chrome-stable
- Sicherstellen: Browser verwendet keinen Proxy-Server!
- Url öffnen im Browser: show-my-ip.de
Zeigt nun meine IP-Adresse von KABELBW an.
Webserver-Zugriff im Browser mit VPN-BYPASS-Squid
Mit dieser Prozedur testen:
- Browser stoppen (alle Fenster und Hintergrundprozesse)
- Browser per Kommandozeile neu starten:
google-chrome-stable
- Sicherstellen: Browser verwendet diesen festen Proxy-Server für alle Abfragen: 10.10.20.206:3128
- Url öffnen im Browser: show-my-ip.de
Zeigt meine IP-Adresse an KABELBW.
Bypass:
- Browser stoppen (alle Fenster und Hintergrundprozesse)
- Browser per Kommandozeile neu starten:
firejail --noprofile --net=${DEVICE} --dns=${DNS} --defaultgw=${GATEWAY} google-chrome-stable
- Sicherstellen: Browser verwendet diesen festen Proxy-Server für alle Abfragen: 10.10.20.206:3128
- Url öffnen im Browser: show-my-ip.de
Klappt bei mir (Uli) nicht!
VPN-BYPASS-Squid stoppen
- VPN-BYBASS-Squid-Fenster aktivieren
- Strg-C –> Prompt erscheint wieder
Zusammenfassung GAP-VPN
Für mich (Uli) sehen die Tests so aus:
Name | Wert | S1 | S2 | SN/SF | Anmerkung |
---|---|---|---|---|---|
…/bin/query-vpn-bypass.sh | – | OK | OK | OK | Einmalig ausgeführt am Testbeginn, Werte plausibel, kein Fehler |
…/bin/init-vpn-bypass.sh | – | – | OK | OK | Einmalig ausgeführt am Testbeginn, Werte plausibel, kein Fehler |
…/bin/start-squid.sh | – | OK | OK | OK | Einmalig ausgeführt am Testbeginn in neuem Fenster, kein Fehler, 10.10.20.206 wird angezeigt, “bleibt hängen” |
SSH-Benutzer@SSH-Server | gitea@gitea.daemons-point.com | OK | OK | ko/OK | Server bei Hetzner, habe meinen SSH-Schlüssel bei DP-GITEA bereits hinterlegt |
Thunderbird | – | – | – | –/– | Nutze ich aktuell nicht |
Systemaktualisierung | – | OK | OK | ko?/OK? | Klappt vermutlich |
Web-Server (Curl) | https://show-my-ip.de | OK | OK | ko/OK | Zertifikat kontrolliert – passt |
Web-Server (Curl-VPN-BYPASS) | https://show-my-ip.de | OK | OK | OK/ko? | Zertifikat kontrolliert – passt |
Web-Server (Browser) | show-my-ip.de | OK | OK | OK/OK | SN: GAP-IP-Adresse, SF: KabelBW-IP-Adresse |
Web-Server (Browser-VPN-BYPASS) | show-my-ip.de | OK | OK | OK/ko? | SN: KabelBW-IP-Adresse |
VPN-BYPASS-Squid stoppen | OK | OK | OK | Einmalig ausgeführt am Testende, mit Strg-C abgebrochen, Prompt erscheint |
Erklärungen zur Tabelle:
- S1: Status beim ersten Test
- S2: Status beim zweiten Test
- SN “Status Normal”: Klappt’s ohne spezielle Variationen?
- SF “Status Firejail”: Klappt’s mit Firejail?
Qualitätssicherung
query-vpn-bypass.sh
- Gibt das Skript eine Art Tabelle aus?
- Sind “alle” Werte enthalten?
- TABLE_ID
- TABLE_NAME
- DEFAULT_ROUTE
- DEVICE
- GATEWAY
- IP_ADDRESS
- Passen die Werte “für Dich”?
- Passen sie auf die Beschreibung weiter vorne?
- Ändern sich die Werte ohne/mit VPN?
init-vpn-bypass.sh
Denk dran: sudo .../init-vpn-bypass.sh
!
- Gibt das Skript eine Art Tabelle aus?
- Erscheint keine Fehlermeldung?
- Erscheint auch bei wiederholter Ausführung keine Fehlermeldung?
- Legt das Skript dies alles an:
- die neue Routing-Tabelle? (Datei /etc/iproute2/…)
- die neue Default-Route? (
ip route show ...
) - die Aktivierung der Routing-Tabelle? (
ip rule
)
- Verhält sich das Skript gleichartig ohne/mit VPN?
start-squid.sh
- Sehen die Ausgaben grob so aus?
1 2 3 4 5 6 7 8 9 10 11 |
|
- Taucht die 10.10.20.206 auf?
- Bleibt der Prozess hängen?
- Kann man ihn mittels Strg-C beenden?
- Klappt die Sequenz starten – beenden – starten – beenden mehrfach hintereinander? 5x?
- Klappt nach dem Start zuverlässig der CURL-Zugriff auf 10.10.20.206:3128?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
- Scheitert nach dem Beenden zuverlässig der CURL-Zugriff auf 10.10.20.206:3128?
1 2 3 4 5 6 |
|
Probleme und Lösungen
Firejail
Beim Start von Firejail erscheint die Fehlermeldung: “Error: networking feature is disabled in Firejail configuration file”
1 2 |
|
Abhilfe: /etc/firejail/firejail.config anpassen!
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Aufgetreten bei: Annette.
DNS-Fehler bei SSH-Aufruf: Name or service not known
Wenn man bei aktiviertem GAP-VPN und geändertem Routing SSH wie unten beschrieben aufruft, dann erscheint ein Fehler:
1 2 3 4 |
|
Mögliche Abhilfen :
– FIREJAIL: Statt ssh -b $IP_ADDRESS ivpn
dies: firejail --no-profile --net=${DEVICE} --dns=8.8.8.8 --defaultgw=${GATEWAY} ssh ivpn
– verbesserte DNS-Konfiguration – aktuell noch unbekannt, muß ggf. noch erarbeitet werden
Noch nicht verifiziert! Aufgetreten bei: Annette.
Links
- StackExchange – How do you route traffic from only one user through wireguard?
- StackExchange – Bind unix program to specific network interface
Historie und Anmerkung
- 2021-03-06: Hinweis auf Funktionsdefizite
- 2021-03-01: Tippfehler korrigiert
- 2021-02-27: Komplett überarbeitet
- 2021-02-24: Neuer Ansatz, keine Filterung per User
- 2021-02-23: Erste Version