Linux: VPN Client und Profildateien: Unterschied zwischen den Versionen
Noelp (Diskussion | Beiträge) |
|||
(8 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
==Software== | |||
Die gängigen Linux-Distributionen verwenden NetworkManager, der oft als Icon in der Taskleiste verfügbar ist und eine grafische Konfiguration von Netzwerkverbindungen ermöglicht. | |||
Für die VPN-Verbindung empfehlen wir openconnect. | |||
Beispiel für Ubuntu: | |||
<source lang="bash">$ sudo apt install openconnect network-manager-openconnect network-manager-openconnect-gnome</source> | |||
Das VPN-Gateway lautet: | |||
<source lang="bash">vpn.fernuni-hagen.de</source> | |||
Als Alternative zu openconnect können Sie vpnc verwenden, aber die Konfiguration ist aufwendiger. | |||
===Profil-Dateien und Aufruf von vpnc=== | |||
Für die VPN-Verbindung zur FernUni benötigt <tt>vpnc</tt> eine auf | |||
<tt>.conf</tt> endende Profil- oder Konfigurationsdatei im Verzeichnis | |||
<tt>/etc/vpnc/</tt>, also zum Beispiel | |||
<tt>/etc/vpnc/fernuni.conf</tt>, oder allgemein | |||
<tt>/etc/vpnc/PROFILNAME.conf</tt>. | |||
Der Klient wird dann mit folgendem Kommando gestartet und die | |||
VPN-Verbindung aufgebaut: | |||
<source lang="bash">$ sudo vpnc fernuni</source> | |||
Oder allgemeiner: | |||
<source lang="bash">$ sudo vpnc PROFILNAME</source> | |||
Die Dateien <tt>/etc/vpnc/default.conf</tt> | |||
bzw. <tt>/etc/vpnc.conf</tt> sind zur Definition eines default-Profils | |||
vorgesehen. Der Verbindungsaufbau kann dann einfach mit <code>$ sudo | |||
vpnc</code> vorgenommen werden. Weitere Informationen auch über | |||
alternative Orte für Konfigurationsdateien findet man auf der man-Page | |||
von vpnc. Sie wird an der Kommandozeile aufgerufen mit | |||
<source lang="bash">$ man vpnc</source> | |||
===Inhalt der Profildatei=== | |||
Was aber muss denn drinstehen in so einer Konfigurationsdatei? Es | |||
können nicht einfach die pcf-Dateien verwendet werden, die die Fernuni | |||
zur Verfügung stellt, | |||
z.B. [http://www.fernuni-hagen.de/imperia/md/content/zmi/produkte/fu_vpn_stud_nat.pcf]. | |||
Der Grund: Die Konfigurationsparameter von <tt>vpnc</tt> haben andere | |||
Namen als die des proprietären Cisco-VPN-Klienten. Es gibt aber | |||
glücklicherweise ein Programm, das Cisco's pcf-Dateien konvertieren | |||
kann, <tt>pcf2vpnc</tt>. | |||
<source lang="bash"> | |||
$ whatis pcf2vpnc | |||
pcf2vpnc (1) - converts VPN-config files from pcf to vpnc-format | |||
</source> | |||
Dieser Konverter wird bei der Installation | |||
von <tt>vpnc</tt> gleich mitinstalliert. Zum Beispiel wird das | |||
[http://www.fernuni-hagen.de/imperia/md/content/zmi/produkte/fu_vpn_stud_nat.pcf Zugangsprofil für Studierende und MitarbeiterInnen mit privatem Netzwerk ohne split-Tunneling] folgendermaßen konvertiert: | |||
<source lang="bash"> | |||
$ pcf2vpnc fu_vpn_stud_nat.pcf | |||
## generated by pcf2vpnc | |||
IPSec ID IPsec | |||
IPSec gateway vpn.fernuni-hagen.de | |||
IPSec secret IPsec | |||
Xauth username riess | |||
IKE Authmode psk | |||
</source> | |||
Diese Ausgabe von <tt>pcf2vpnc</tt> ist jetzt in einer | |||
Konfigurationsdatei, z.B. in <tt>/etc/vpnc/fernuni.conf</tt> zu | |||
speichern und dabei 'riess' durch den sprechenden Benutzernamen zu | |||
ersetzen. Das geht mit dem Editor Ihrer Wahl oder einfach von der | |||
Kommandozeile: | |||
<source lang="bash"> | |||
$ sudo sh -c 'pcf2vpnc fu_vpn_stud_nat.pcf | sed s/riess/BENUTZERNAME/ > /etc/vpnc/fernuni.conf' | |||
</source> | |||
Man kann die Zeile <tt>Xauth username BENUTZERNAME</tt> übrigens auch | |||
fortlassen. Dann wird man bei Aufbau des VPN-Tunnels nach einem | |||
Benutzernamen gefragt. | |||
Für die anderen pcf-Dateien geht man entsprechend vor. | |||
===Herstellen und Trennen der Verbindung von der Kommandozeile=== | |||
Nach der Konfiguration kann die Verbindung folgendermaßen aufgebaut | |||
werden: | |||
<source lang="bash"> | |||
$ sudo vpnc fernuni | |||
Enter password for BENUTZERNAME@vpn.fernuni-hagen.de: | |||
VPNC started in background (pid: 17370)... | |||
</source> | |||
Jetzt ist der Rechner Teil des Netzes der Fernuni. Wer sich im | |||
Internet auf entsprechenden Seiten seine [http://http://whatismyv6.com/ IP-Nummer anzeigen] lässt, wird eine IP aus dem Range der | |||
Fernuni sehen: 132.176.0.0. | |||
Deaktiviert wird die Tunnelung über VPN durch | |||
<source lang="bash"> | |||
$ sudo vpnc-disconnect | |||
Terminating vpnc daemon (pid: 17370) | |||
</source> | |||
Wer möchte, kann sich auch die routing-Tabelle des Kernels | |||
ansehen. Sie sollte ungefähr so aussehen: | |||
<source lang="bash"> | |||
$ sudo vpnc fernuni | |||
Enter password for BENUTZERNAME@vpn.fernuni-hagen.de: | |||
VPNC started in background (pid: ... | |||
$ sudo route | |||
Kernel IP routing table | |||
Destination Gateway Genmask Flags Metric Ref Use Iface | |||
default * 0.0.0.0 U 0 0 0 tun0 | |||
vpn-public-r1.f 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0 | |||
132.176.134.0 * 255.255.255.0 U 0 0 0 tun0 | |||
localnet * 255.255.255.0 U 0 0 0 eth0 | |||
</source> | |||
Das besagt Folgendes: Zeile 1: Jedes Paket mit Ziel Internet wird über | |||
den Tunnel tun0 geschickt. Zeile 2: Pakete mit Ziel | |||
vpn-public-r1.f[...ernuni-hagen.de] (= 132.176.101.101), also mit Ziel | |||
Tunnel-Endpunkt gehen über die Netzwerkschnittstelle eth0 und den | |||
Gateway 192.168.0.1 (einen Router im lokalen Netz); diese Route ist | |||
ein Gateway (G-Flag). Zeile 3: Pakete mit einem Ziel im | |||
Fernuni-IP-Range 132.176.134.0 gehen auch über tun0. Zeile 4: Pakete | |||
für das lokale Netzwerk gehen über die Netzwerkschnittstelle eth0. - | |||
Wer mehr davon verstehen will, lese unter | |||
[http://linux-ip.net/html/basic-reading.html] nach. | |||
===Integration in den NetworkManager (Gnome)=== | |||
Wer eine Integration in den grafischen NetworkManager bevorzugt, | |||
installiere das Paket <tt>network-manager-vpnc</tt> wie oben | |||
beschrieben. Dieses Plugin für das NetworkManager-Framework stellt | |||
eine komfortable grafische Schnittstelle zum oben beschriebenen | |||
<tt>vpnc</tt> zur Verfügung. <tt>vpnc</tt> wird bei der Installation | |||
des Plugins durch die Paketverwaltung übrigens automatisch | |||
mitinstalliert. Erfahrungsberichte über eine Verwendung des NetworkManagers finden | |||
sich unter [[Ubuntu_und_VPN]]. | |||
===Integration mittels kvpnc (KDE)=== | |||
Alternativ kann man auch das grafische | |||
Frontend für <tt>vpnc</tt> von KDE nehmen. | |||
Eine Beschreibung findet | |||
sich unter | |||
[[Installation_des_VPN-Clients_unter_Kubuntu_Linux_7.04_(feisty)]]. | |||
==openconnect== | |||
Mit <tt>openconnect</tt> ist die Herstellung eines VPN-Tunnels sehr | |||
einfach. Nach Eingabe des Befehls wird man aufgefordert, ein Profil | |||
auszuwählen und Benutzernamen und Passwort anzugeben: | |||
<source lang="bash"> | |||
$ sudo openconnect https://webvpn.fernuni-hagen.de -b | |||
Attempting to connect to 132.176.101.101:443 | |||
SSL negotiation with webvpn.fernuni-hagen.de | |||
Connected to HTTPS on webvpn.fernuni-hagen.de | |||
GET https://webvpn.fernuni-hagen.de/ | |||
Got HTTP response: HTTP/1.0 302 Object Moved | |||
SSL negotiation with webvpn.fernuni-hagen.de | |||
Connected to HTTPS on webvpn.fernuni-hagen.de | |||
GET https://webvpn.fernuni-hagen.de/+webvpn+/index.html | |||
Please enter your username and password. | |||
GROUP: [FeU-Hagen-SSL|FeU-Hagen-SSL-VPN-Split|FeU-Hagen-SSL-VPNLLA|FeU-Personal|HomeIPPhone|IPPhone|Reserviert]:FeU-Hagen-SSL | |||
Username:lueck | |||
Password: | |||
POST https://webvpn.fernuni-hagen.de/+webvpn+/index.html | |||
Got CONNECT response: HTTP/1.1 200 OK | |||
CSTP connected. DPD 30, Keepalive 20 | |||
Connected tun0 as 132.176.134.98, using SSL | |||
Continuing in background; pid 20999 | |||
Established DTLS connection | |||
</source> | |||
Mit der Option <tt>-b</tt> wird der Client als Hintergrundprozess | |||
gestartet. Wenn man den VPN-Tunnel wieder abschalten möchte, beendet | |||
man nicht einfach brachial den Prozess, sondern sendet ihm statt | |||
<tt>SIGTERM</tt> besser <tt>SIGINT</tt>. Das beendet den Prozess | |||
sauber und es werden die vorherigen Netzwerk-Einstellungen | |||
wiederhergestellt. Also: | |||
<source lang="bash"> | |||
$ sudo kill -SIGINT 20999 | |||
Send BYE packet: Client received SIGINT | |||
</source> | |||
Wer die Handhabung der Prozess-IDs (hier 20999) scheut, der hat | |||
folgende Möglichkeiten: Man kann <tt>openconnect</tt> ohne die Option | |||
<tt>-b</tt> aufrufen, um den Tunnel aufzubauen, und mit der | |||
Tastenkombination 'Strg' + 'c' den Prozess und den VPN-Tunnel | |||
beenden (sendet auch <tt>SIGINT</tt>). Oder man kann auf den konfortablen | |||
NetworkManager zurückgreifen. | |||
===Integration in den grafischen NetworkManager=== | |||
Wer die Verwaltung des Netzwerks unter Gnome o.ä. vorzieht, der | |||
installiere das openconnect-Plugin für den NetworkManager: | |||
<tt>network-manager-openconnect</tt>. | |||
==Fehlerbehebung== | |||
===Internet wie tot - keine Namensauflösung=== | |||
Wird ein VPN-Tunnel unsauber beendet wird, kann es zu dem unangenehmen | |||
Problem kommen, dass beim Surfen im Netz keine URLs mehr gefunden | |||
(aufgelöst) werden. Das liegt unter Umständen daran, dass die | |||
Konfiguration der Namensauflösung nicht wieder hergestellt worden ist, | |||
sondern noch wie beim Betrieb des VPN-Tunnel konfiguriert ist. In der | |||
Datei <tt>/etc/resolv.conf</tt> stehen dann noch die Nameserver der | |||
Fernuni und nicht der/die Nameserver des Internet-Service-Providers | |||
(ISP) bzw. die Adresse des Routers im Heimnetz. Die Datei sieht dann | |||
ungefähr so aus: | |||
<source lang="bash"> | |||
$ cat /etc/resolv.conf | |||
#@VPNC_GENERATED@ -- this file is generated by vpnc | |||
# and will be overwritten by vpnc | |||
# as long as the above mark is intact | |||
search homelinux.org fernuni-hagen.de | |||
nameserver 132.176.129.201 | |||
nameserver 132.176.129.203 | |||
</source> | |||
Eine intakte <tt>/etc/resolv.conf</tt> bei Betrieb des Rechners hinter | |||
einem wlan-Router mit lokalem Netzwerk, wobei dieser Router auch als | |||
Nameserver (Weiterleitung vom ISP) dient, sieht eher so aus: | |||
<source lang="bash"> | |||
$ cat /etc/resolv.conf | |||
search homelinux.org | |||
nameserver 192.168.0.1 | |||
</source> | |||
(Anmerkung: homelinux.org ist bei mir die lokale Domain, das ist | |||
beliebig und nicht aussagekräftig.) | |||
<tt>vpnc</tt> erstellt glücklicherweise ein Backup der ursprünglichen | |||
Datei unter <tt>/var/run/vpnc/resolv.conf-backup</tt>. Mit Hilfe | |||
dieses Backups muss <tt>/etc/resolv.conf</tt> dann manuell wieder | |||
hergestellt werden (kopieren). Ein Neustart des Systems hilft hingegen | |||
nicht. | |||
Dieses Problem taucht bei Verwendung von <tt>vpnc</tt> schon einmal | |||
auf, wenn der Tunnel aufgrund von Störungen des ISP oder bei der | |||
Fernuni zusammenbricht. | |||
[[Kategorie:VPN]] | [[Kategorie:VPN]] | ||
[[Kategorie:Zugang_FUNet_Internet-Dienste]] |
Aktuelle Version vom 9. Oktober 2024, 12:34 Uhr
Software
Die gängigen Linux-Distributionen verwenden NetworkManager, der oft als Icon in der Taskleiste verfügbar ist und eine grafische Konfiguration von Netzwerkverbindungen ermöglicht.
Für die VPN-Verbindung empfehlen wir openconnect.
Beispiel für Ubuntu:
$ sudo apt install openconnect network-manager-openconnect network-manager-openconnect-gnome
Das VPN-Gateway lautet:
vpn.fernuni-hagen.de
Als Alternative zu openconnect können Sie vpnc verwenden, aber die Konfiguration ist aufwendiger.
Profil-Dateien und Aufruf von vpnc
Für die VPN-Verbindung zur FernUni benötigt vpnc eine auf .conf endende Profil- oder Konfigurationsdatei im Verzeichnis /etc/vpnc/, also zum Beispiel /etc/vpnc/fernuni.conf, oder allgemein /etc/vpnc/PROFILNAME.conf.
Der Klient wird dann mit folgendem Kommando gestartet und die VPN-Verbindung aufgebaut:
$ sudo vpnc fernuni
Oder allgemeiner:
$ sudo vpnc PROFILNAME
Die Dateien /etc/vpnc/default.conf
bzw. /etc/vpnc.conf sind zur Definition eines default-Profils
vorgesehen. Der Verbindungsaufbau kann dann einfach mit $ sudo
vpnc
vorgenommen werden. Weitere Informationen auch über
alternative Orte für Konfigurationsdateien findet man auf der man-Page
von vpnc. Sie wird an der Kommandozeile aufgerufen mit
$ man vpnc
Inhalt der Profildatei
Was aber muss denn drinstehen in so einer Konfigurationsdatei? Es können nicht einfach die pcf-Dateien verwendet werden, die die Fernuni zur Verfügung stellt, z.B. [1]. Der Grund: Die Konfigurationsparameter von vpnc haben andere Namen als die des proprietären Cisco-VPN-Klienten. Es gibt aber glücklicherweise ein Programm, das Cisco's pcf-Dateien konvertieren kann, pcf2vpnc.
$ whatis pcf2vpnc
pcf2vpnc (1) - converts VPN-config files from pcf to vpnc-format
Dieser Konverter wird bei der Installation von vpnc gleich mitinstalliert. Zum Beispiel wird das Zugangsprofil für Studierende und MitarbeiterInnen mit privatem Netzwerk ohne split-Tunneling folgendermaßen konvertiert:
$ pcf2vpnc fu_vpn_stud_nat.pcf
## generated by pcf2vpnc
IPSec ID IPsec
IPSec gateway vpn.fernuni-hagen.de
IPSec secret IPsec
Xauth username riess
IKE Authmode psk
Diese Ausgabe von pcf2vpnc ist jetzt in einer Konfigurationsdatei, z.B. in /etc/vpnc/fernuni.conf zu speichern und dabei 'riess' durch den sprechenden Benutzernamen zu ersetzen. Das geht mit dem Editor Ihrer Wahl oder einfach von der Kommandozeile:
$ sudo sh -c 'pcf2vpnc fu_vpn_stud_nat.pcf | sed s/riess/BENUTZERNAME/ > /etc/vpnc/fernuni.conf'
Man kann die Zeile Xauth username BENUTZERNAME übrigens auch fortlassen. Dann wird man bei Aufbau des VPN-Tunnels nach einem Benutzernamen gefragt.
Für die anderen pcf-Dateien geht man entsprechend vor.
Herstellen und Trennen der Verbindung von der Kommandozeile
Nach der Konfiguration kann die Verbindung folgendermaßen aufgebaut werden:
$ sudo vpnc fernuni
Enter password for BENUTZERNAME@vpn.fernuni-hagen.de:
VPNC started in background (pid: 17370)...
Jetzt ist der Rechner Teil des Netzes der Fernuni. Wer sich im Internet auf entsprechenden Seiten seine IP-Nummer anzeigen lässt, wird eine IP aus dem Range der Fernuni sehen: 132.176.0.0.
Deaktiviert wird die Tunnelung über VPN durch
$ sudo vpnc-disconnect
Terminating vpnc daemon (pid: 17370)
Wer möchte, kann sich auch die routing-Tabelle des Kernels
ansehen. Sie sollte ungefähr so aussehen:
$ sudo vpnc fernuni
Enter password for BENUTZERNAME@vpn.fernuni-hagen.de:
VPNC started in background (pid: ...
$ sudo route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default * 0.0.0.0 U 0 0 0 tun0
vpn-public-r1.f 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
132.176.134.0 * 255.255.255.0 U 0 0 0 tun0
localnet * 255.255.255.0 U 0 0 0 eth0
Das besagt Folgendes: Zeile 1: Jedes Paket mit Ziel Internet wird über den Tunnel tun0 geschickt. Zeile 2: Pakete mit Ziel vpn-public-r1.f[...ernuni-hagen.de] (= 132.176.101.101), also mit Ziel Tunnel-Endpunkt gehen über die Netzwerkschnittstelle eth0 und den Gateway 192.168.0.1 (einen Router im lokalen Netz); diese Route ist ein Gateway (G-Flag). Zeile 3: Pakete mit einem Ziel im Fernuni-IP-Range 132.176.134.0 gehen auch über tun0. Zeile 4: Pakete für das lokale Netzwerk gehen über die Netzwerkschnittstelle eth0. - Wer mehr davon verstehen will, lese unter [2] nach.
Integration in den NetworkManager (Gnome)
Wer eine Integration in den grafischen NetworkManager bevorzugt, installiere das Paket network-manager-vpnc wie oben beschrieben. Dieses Plugin für das NetworkManager-Framework stellt eine komfortable grafische Schnittstelle zum oben beschriebenen vpnc zur Verfügung. vpnc wird bei der Installation des Plugins durch die Paketverwaltung übrigens automatisch mitinstalliert. Erfahrungsberichte über eine Verwendung des NetworkManagers finden sich unter Ubuntu_und_VPN.
Integration mittels kvpnc (KDE)
Alternativ kann man auch das grafische Frontend für vpnc von KDE nehmen. Eine Beschreibung findet sich unter Installation_des_VPN-Clients_unter_Kubuntu_Linux_7.04_(feisty).
openconnect
Mit openconnect ist die Herstellung eines VPN-Tunnels sehr einfach. Nach Eingabe des Befehls wird man aufgefordert, ein Profil auszuwählen und Benutzernamen und Passwort anzugeben:
$ sudo openconnect https://webvpn.fernuni-hagen.de -b
Attempting to connect to 132.176.101.101:443
SSL negotiation with webvpn.fernuni-hagen.de
Connected to HTTPS on webvpn.fernuni-hagen.de
GET https://webvpn.fernuni-hagen.de/
Got HTTP response: HTTP/1.0 302 Object Moved
SSL negotiation with webvpn.fernuni-hagen.de
Connected to HTTPS on webvpn.fernuni-hagen.de
GET https://webvpn.fernuni-hagen.de/+webvpn+/index.html
Please enter your username and password.
GROUP: [FeU-Hagen-SSL|FeU-Hagen-SSL-VPN-Split|FeU-Hagen-SSL-VPNLLA|FeU-Personal|HomeIPPhone|IPPhone|Reserviert]:FeU-Hagen-SSL
Username:lueck
Password:
POST https://webvpn.fernuni-hagen.de/+webvpn+/index.html
Got CONNECT response: HTTP/1.1 200 OK
CSTP connected. DPD 30, Keepalive 20
Connected tun0 as 132.176.134.98, using SSL
Continuing in background; pid 20999
Established DTLS connection
Mit der Option -b wird der Client als Hintergrundprozess gestartet. Wenn man den VPN-Tunnel wieder abschalten möchte, beendet man nicht einfach brachial den Prozess, sondern sendet ihm statt SIGTERM besser SIGINT. Das beendet den Prozess sauber und es werden die vorherigen Netzwerk-Einstellungen wiederhergestellt. Also:
$ sudo kill -SIGINT 20999
Send BYE packet: Client received SIGINT
Wer die Handhabung der Prozess-IDs (hier 20999) scheut, der hat folgende Möglichkeiten: Man kann openconnect ohne die Option -b aufrufen, um den Tunnel aufzubauen, und mit der Tastenkombination 'Strg' + 'c' den Prozess und den VPN-Tunnel beenden (sendet auch SIGINT). Oder man kann auf den konfortablen NetworkManager zurückgreifen.
Integration in den grafischen NetworkManager
Wer die Verwaltung des Netzwerks unter Gnome o.ä. vorzieht, der installiere das openconnect-Plugin für den NetworkManager: network-manager-openconnect.
Fehlerbehebung
Internet wie tot - keine Namensauflösung
Wird ein VPN-Tunnel unsauber beendet wird, kann es zu dem unangenehmen Problem kommen, dass beim Surfen im Netz keine URLs mehr gefunden (aufgelöst) werden. Das liegt unter Umständen daran, dass die Konfiguration der Namensauflösung nicht wieder hergestellt worden ist, sondern noch wie beim Betrieb des VPN-Tunnel konfiguriert ist. In der Datei /etc/resolv.conf stehen dann noch die Nameserver der Fernuni und nicht der/die Nameserver des Internet-Service-Providers (ISP) bzw. die Adresse des Routers im Heimnetz. Die Datei sieht dann ungefähr so aus:
$ cat /etc/resolv.conf
#@VPNC_GENERATED@ -- this file is generated by vpnc
# and will be overwritten by vpnc
# as long as the above mark is intact
search homelinux.org fernuni-hagen.de
nameserver 132.176.129.201
nameserver 132.176.129.203
Eine intakte /etc/resolv.conf bei Betrieb des Rechners hinter einem wlan-Router mit lokalem Netzwerk, wobei dieser Router auch als Nameserver (Weiterleitung vom ISP) dient, sieht eher so aus:
$ cat /etc/resolv.conf
search homelinux.org
nameserver 192.168.0.1
(Anmerkung: homelinux.org ist bei mir die lokale Domain, das ist beliebig und nicht aussagekräftig.)
vpnc erstellt glücklicherweise ein Backup der ursprünglichen Datei unter /var/run/vpnc/resolv.conf-backup. Mit Hilfe dieses Backups muss /etc/resolv.conf dann manuell wieder hergestellt werden (kopieren). Ein Neustart des Systems hilft hingegen nicht.
Dieses Problem taucht bei Verwendung von vpnc schon einmal auf, wenn der Tunnel aufgrund von Störungen des ISP oder bei der Fernuni zusammenbricht.