78 lines
3.1 KiB
Plaintext
78 lines
3.1 KiB
Plaintext
[http://smarden.org/runit/ runit] ist ein freier [http://cr.yp.to/daemontools.html daemontools]-Ersatz,
|
|
der auch sysvinit ersetzen kann. Runit überwacht System-Dienste und startet sie neu, wenn sie beendet
|
|
werden. Desweiteren bietet es ein Logging-Framework, so dass bei den Diensten Logging nicht extra konfiguriert
|
|
werden muss sondern, sondern diese einfach nach Standard-Fehler oder Standard-Ausgabe loggen können.
|
|
|
|
Dienste leben unter runit/daemontools im Verseichnis /service (bzw. /var/service, es bietet sich aber bei runit an,
|
|
einen Link von /service nach /var/service zu setzen). Dieses Howto sieht vor, dass jeder OpenVPN-Tunnel seinen eigenen
|
|
Dienst hat, der in /service/openvpn-$peer läuft, wobei peer ein beliebiger für den Tunnel gewählter Name ist.
|
|
Die Konfiguration für jeden Dienst befindet sich im Verzeichnis /etc/openvpn/$peer. OpenVPN wechseln vor dem Auswerten irgendwelcher Skripte oder Konfigurationsdateien in dieses Verzeichnis, so dass sämtliche Pfadangaben relativ zu diesem
|
|
Verzeichnis sein können. Das Setup in diesem Howto ist so ausgelegt, dass ein neuer Tunnel in zwei einfachen Schritten
|
|
angelegt werden kann:
|
|
|
|
# /etc/openvpn/$peer füllen
|
|
# Folgende Befehle ausführen:
|
|
$ cp -r /etc/runit/runsvdir/all/openvpn /etc/runit/runsvdir/all/openvpn-$peer
|
|
$ ln -s /etc/runit/runsvdir/all/openvpn-$peer /service
|
|
|
|
Danach kann man mit
|
|
$ tail -F /service/openvpn-$peer/log/main/current
|
|
beobachten, ob der Tunnel korrekt aufgebaut wurde.
|
|
|
|
Nun zur eigentlichen Vorbereitung: Es müssen zwei Skripte in /etc/openvpn angelegt werden, die später das Starten des
|
|
OpenVPN-Tunnels und des zugehörigen Logging-Dienstes steuern.
|
|
|
|
'''/etc/openvpn/run'''
|
|
|
|
#!/bin/sh
|
|
exec 2>&1
|
|
|
|
# get peer name from service name
|
|
peer=`basename $PWD | sed -e 's/openvpn-//'`
|
|
|
|
exec /usr/sbin/openvpn --cd "/etc/openvpn/$peer" \
|
|
--log-append /dev/stderr \
|
|
--suppress-timestamps 0 \
|
|
--config "/etc/openvpn/$peer/config"
|
|
|
|
Das zweite Skript ist etwas komplizierter. Es sorgt dafür, dass die Logs im Verzeichnis /var/log/openvpn/$peer
|
|
landen. Existiert dieses Verzeichnis nicht, wird es angelegt. Aus Sicherheitsgründen läuft der Logging-Dienst
|
|
als unpriviligierter Nutzer. Es empfiehlt sich, hierfür einen eigenen Nutzer anzulegen und nicht nobody zu nehmen,
|
|
da diesem dann die Log-Dateien gehören.
|
|
|
|
'''/etc/openvpn/logrun'''
|
|
|
|
#!/bin/sh
|
|
exec 2>&1
|
|
|
|
# id to log as
|
|
loguser=openvpnlog
|
|
# where to log to
|
|
logbasedir=/var/log/openvpn
|
|
|
|
# get peer name from service name
|
|
cd ..
|
|
peer=`basename $PWD | sed -e 's/openvpn-//'`
|
|
cd -
|
|
|
|
logdir="$logbasedir/$peer"
|
|
ln -sfn $logdir main
|
|
|
|
if [ ! -d $logdir ] ; then
|
|
mkdir $logdir
|
|
chown $loguser:`id -n -g $loguser` $logdir
|
|
fi
|
|
|
|
exec /usr/bin/chpst -u$loguser /usr/bin/svlogd -t main
|
|
|
|
Unter den daemontools muss die letzte Zeile
|
|
exec /usr/bin/setuidgid $loguser /usr/bin/multilog t main
|
|
heißen.
|
|
|
|
Jetzt muss nur noch das Service-Verzeichnis /etc/runit/runsvdir/all/openvpn angelegt werden:
|
|
$ mkdir -p /etc/runit/runsvdir/all/openvpn/log
|
|
$ ln -s /etc/openvpn/run /etc/runit/runsvdir/all/openvpn
|
|
$ ln -s /etc/openvpn/logrun /etc/runit/runsvdir/all/openvpn/log/run
|
|
|
|
Fertig! Happy tunneling!
|