Nachdem ich schon die Installation des Clients mit GUI auf neueren Ubuntu Versionen beschrieb, hier nun die CLI Variante.
Neuere Ubuntu-Versionen (ich glaube ab ~12.10) haben den Client gar nicht mehr im Repository. Ältere, wie eben die LTS-Versionen, installieren als Abhängigkeit den QT-Client direkt mit, was ich auf einem Server für eher unglücklich halte.
Client Installation
Zuerst den Client von der offiziellen Shrew Soft-Website laden. Zum aktuellen Zeitpunkt ist die neueste Version 2.2.1. Im Anschluss entpacken und in das neue Verzeichnis wechseln:
mkdir -p ~/build && cd ~/build wget https://www.shrew.net/download/ike/ike-2.2.1-release.tbz2 tar xfvj ike-2.2.1-release.tbz2 cd ike
Folgende Abhängigkeiten sind für das Bauen des Clients ohne GUI notwendig:
sudo apt-get install cmake build-essential libedit-dev libssl-dev flex bison lsb-cxx
Nun kann der Client kompiliert werden:
cmake -DCMAKE_INSTALL_PREFIX=/usr -DQTGUI=NO -DETCDIR=/etc -DNATT=YES make sudo make install
Init-Script für den Daemon
Die Beispielkonfiguration für den Daemon, der parallel läuft, reicht in der Regel aus. Diese Konfiguration hat erstmal nichts mit der VPN Konfiguration zu tun, die man später für den Client erstellt:
sudo cp /etc/iked.conf.sample /etc/iked.conf
Nun das Script:
sudo nano /etc/init.d/iked
Folgender Inhalt muss eingefügt werden:
#! /bin/sh -e ### BEGIN INIT INFO # Provides: IKE daemon # Required-Start: $network $syslog # Required-Stop: $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: start and stop the Shrew Soft IKE daemon ### END INIT INFO test -x /usr/sbin/iked || exit 0 . /lib/lsb/init-functions export PATH="${PATH:+$PATH:}/usr/sbin:/sbin" case "$1" in start) log_begin_msg "Starting Shrew Soft IKE daemon..." start-stop-daemon --start --quiet --exec /usr/sbin/iked || log_end_msg 1 log_end_msg 0 ;; stop) log_begin_msg "Stopping Shrew Soft IKE daemon..." start-stop-daemon --stop --quiet --oknodo --exec /usr/sbin/iked || log_end_msg 1 log_end_msg 0 ;; restart) log_begin_msg "Restarting Shrew Soft IKE daemon..." start-stop-daemon --stop --quiet --oknodo --retry 30 --exec /usr/sbin/iked || log_end_msg 1 start-stop-daemon --start --quiet --exec /usr/sbin/iked || log_end_msg 1 log_end_msg 0 ;; *) log_success_msg "Usage: /etc/init.d/iked {start|stop|restart}" exit 1 esac exit 0
Die Datei ausführbar machen, den Dienst installieren und starten:
sudo chmod +x /etc/init.d/iked && sudo update-rc.d iked defaults && sudo /etc/init.d/iked start
Konfiguration laden und Client starten
Vorab ein Auszug aus der Man-Page zu den Speicherorten:
All user related configuration data is stored under the ~/.iked directory.
Site Configuration files are stored under the ~/.iked/sites directory.
Certificates and keys are are typically stored under the ~/.iked/certs directory.
Der Client arbeitet nach folgender Syntax:
ikec -u Benutzername -p Passwort -r Konfigurationsname -a
Zuerst die Konfiguration der Site nach „~/.iked/sites“ kopieren, denn via Parameter „-r“ wird NICHT die Datei als Pfad eingetragen! Das führt zu einem Crash des Clients. Auch das Angeben eines falschen Site-Namens mag der Client nicht. Ich gehe als Dateinamen von „remotevpn.cfg“ aus:
sudo nano ~/.ike/sites/remotevpn.cfg
Aus der Command-Line kann nun der Client gestartet werden, mit Parameter „-a“ werden auch – falls notwendig für die Site – „-u“ und -p“ notwendig:
ikec -r remotevpn.cfg -u VPNUsername -p VPNPasswort -a
Oder in den Hintergrund legen nach dem Start:
ikec -r remotevpn.cfg -u VPNUsername -p VPNPasswort -a &
Der Client ist interaktiv, folgende Eingaben sind möglich:
c – connect
d – disconnect
h – help
s – status
q – quit
„Connect“ wird benötigt, wenn der Parameter „-a“ für Autostart weggelassen wird.
Optional: Client als Dienst
Für einen interaktiven Prozess als Dienst, verwende ich gerne „screen“:
sudo apt-get install screen
Im Init-Script SESSIONNAME, SITENAME, VPNUSER und VPNPASS anpassen. Werden Benutzer und Passwort nicht benötigt, können die Parameter hierfür in Zeile 19 entfernt werden. SESSIONNAME muss ein eindeutiger Session-Name für Screen sein.
sudo nano /etc/init.d/ikec
Folgender Inhalt muss eingefügt werden:
#!/bin/bash ### BEGIN INIT INFO # Provides: ikec # Required-Start: $network $syslog # Required-Stop: $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Description: Start ikec ### END INIT INFO SESSIONNAME=ikecsession SITENAME=remotevpn.cfg VPNUSER=Username VPNPASS=Password case "$1" in start) echo "Open ikec Connection..." screen -S $SESSIONNAME -d -m ikec -r $SITENAME -u $VPNUSER -p $VPNPASS -a ;; stop) echo "Closing ikec Connection..." su $RUNAS -c "screen -S $SESSIONNAME -X quit" ;; *) echo "Fehlerhafter Aufruf" echo "Syntax: $0 {start|stop}" exit 1 ;; esac
Die Datei ausführbar- sowie für andere Benutzer unlesbar machen (Zugangsdaten…) und den Dienst installieren/starten:
sudo chmod 700 /etc/init.d/ikec && sudo update-rc.d ikec defaults && sudo /etc/init.d/ikec start