Tag Archive: vpn

Ubuntu Server CLI: Shrew Soft VPN Client

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

Shrew Soft VPN Client auf Ubuntu 13.04 / 13.10 installieren

In früheren Versionen fand sich der Shrew Soft VPN Client im offiziellen Repository Ubuntus. Leider ist das nicht mehr der Fall. Allerdings lässt sich der Client recht einfach auch für neuere Ubuntu Versionen installieren.

Changelog

  • 02. Mär – Init-Script „update-rc.d“ was missing

Client Installation

Zuerst den Client von der offiziellen Shrew Soft Seite laden. Zum aktuellen Zeitpunkt ist die neueste Version 2.2.1. Im Anschluss entpacken und in das neue Verzeichnis wechseln:

cd ~/Downloads
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 notwendig:

sudo apt-get install cmake build-essential libedit-dev libssl-dev flex bison lsb-cxx lsb-qt4 qt4-qmake libqt4-core libqt4-dev

Nun kann der Client kompiliert werden:

cmake -DCMAKE_INSTALL_PREFIX=/usr -DQTGUI=YES -DETCDIR=/etc -DNATT=YES
make
sudo make install

Leider wird hierbei keine Verknüpfung zur GUI erstellt, auch fand ich kein hochauflösendes Icon. Google hat geholfen. Das Icon habe ich auf meinen Server geladen. Eine Quellenangabe hierzu fand ich leider nicht:

sudo wget https://www.debinux.de/wp-content/uploads/shrew.png -O /usr/share/icons/shrew.png
sudo nano /usr/share/applications/ike.desktop

Im Editor nun folgenden Inhalt einfügen:

[Desktop Entry]
Name=Shrew Soft VPN Access Manager
Name[en_CA]=Shrew Soft VPN Access Manager
Name[de]=Shrew Soft VPN Zugangsverwaltung
Comment=Application to manage remote site configurations
Comment[en_CA]=Application to manage remote site configurations
Comment[de]=Anwendung zum Verwalten der VPN-konfigurationen
Exec=/usr/bin/qikea
Icon=/usr/share/icons/shrew.png
Terminal=false
Type=Application
Categories=Network

Das ganze sieht dann etwa so aus:

Shrew Soft VPN Icon
Shrew Soft VPN Icon

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 im Client importiert/erstellt:

sudo cp /etc/iked.conf.sample /etc/iked.conf

Der Client kann nun gestartet werden, allerdings wird eine Verbindung zum Server nicht funktionieren, da der „iked“ Dienst erst noch gestartet werden muss. Der Fehler lautet dann etwa „failed to attach to key daemon„.

Automatischer Start

Anstatt die Datei „/usr/sbin/iked“ jedes mal manuell anzustoßen, kann entweder ein Upstart- oder Init-Script verwendet werden.

Upstart

sudo nano /etc/init/iked.conf

Folgender Inhalt muss eingefügt werden:

# this script will start/stop the IKE daemon
# that the IKE client depends upon

description "Start and stop the IKE daemon"
expect fork

start on startup
stop on runlevel [!2345]
script
exec /usr/sbin/iked
end script

Anschließend den Dienst starten:

sudo initctl start iked

Init-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 und den Dienst installieren und starten:

sudo chmod +x /etc/init.d/iked && sudo update-rc.d iked defaults && sudo /etc/init.d/iked start

Die Verbindung sollte jetzt funktionieren!