Installation und Konfiguration des OpenVPN Clients unter Linux
In der Verwaltung läuft ein SuSE 9.1 Server
Installation von OpenVPN
Für SuSE 9.1 existiert nur ein OpenVPN in Version 1.5, was mit unserem Server inkompatibel ist, weswegen wir das rpm Paket selbst bauen und installieren. Zuvor müssen folgende Pakete via Yast installiert werden:
- openssl
- openssl-devel
- lzo
- lzo-devel
- pam
- pam-devel
Wir können uns nun die aktuellen Quellen von http://openvpn.net/download.html herunterladen, wechseln als su in das Download Verzeichnis und bauen unser rpm Paket:
TTY
# rpmbuild -tb openvpn-2.0.tar.gz
... Rödel...
Wrote: /usr/src/packages/RPMS/i586/openvpn-2.0-1.i586.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.63630
+ umask 022
+ cd /usr/src/packages/BUILD
+ cd openvpn-2.0
+ '[' /var/tmp/openvpn-martin '!=' / ']'
+ rm -rf /var/tmp/openvpn-martin
+ exit 0
Die Zeile "Wrote: /usr/src/packages/RPMS/i586/openvpn-2.0-1.i586.rpm" ist die ausschlaggebende Zeile. Sie signalisiert, dass das rpm erfolgreich gebaut wurde und auch wo unser rpm liegt.
Wir wechseln in das Verzeichnis und installieren das rpm:
TTY
# cd /usr/src/packages/RPMS/i586/
# rpm -Uvh openvpn-2.0-1.i586.rpm
Preparing... ########################################### [100%]
1:openvpn ########################################### [100%]
openvpn 0:off 1:off 2:off 3:on 4:off 5:on 6:off
Shutting down openvpn: ..done
Starting openvpn: ..done
Thats all..
Konfiguration des OpenVPN Client
Wir bringen nun die folgenden Dateien auf die SuSE. Gespeichert werden die Dateien unter /etc/openvpn, welches bei der Installation des OpenVPN rpm angelegt wurde. Auch hier gilt wieder Nutzen Sie unbedingt eine gesicherte Verbindung, oder transportieren sie die Dateien mit einem physischen Datenträger, den Sie hinterher vernichten!:
- vpn-ca.pem
- verwaltungcert.pem
- verwaltungkey.pem
Zusätzlich kopieren wir noch die Konfigurationsdatei client.ovpn des Windows Notebook auf die SuSE und benennen sie in client.conf um. Wir wandeln die Windows Zeilenumbrüche in Unix Zeilenumbrüche um und entziehen die Berechtigungen für die Datei verwaltung.pem:
TTY
# perl -pi -e 's/\r\n/\n/g' client.conf
# chmod 0600 verwaltungkey.pem
#
Wir kopieren unser Startscript von dem FreeBSD Server auf die SuSE ins Verzeichnis /etc/init.d.
Jetzt müssen wir das Kernel Modul tun laden:
TTY
# modprobe tun
#
Wir editieren unsere Datei client.conf und passen Sie wie folgt an:
client
float
dev tun
tun-mtu 1492
fragment 1300
mssfix
proto udp
remote 1.1.1.1 443
tls-remote server
ca /etc/openvpn/vpn-ca.pem
cert /etc/openvpn/verwaltungcert.pem
key /etc/openvpn/verwaltungkey.pem
auth SHA1
cipher aes-256-cbc
nobind
comp-lzo
persist-key
persist-tun
verb 3
Das war es schon, wir starten den OpenVPN Client mit der Hoffung auf folgende Ausgabe:
TTY
# openvpn --config /etc/openvpn/client.conf
Sat Apr 30 12:30:38 2005 OpenVPN 2.0 i586-suse-linux [SSL] [LZO] [EPOLL]
built on Apr 30 2005
Sat Apr 30 12:30:38 2005 IMPORTANT:
OpenVPN's default port number is now 1194, based on an official port number
assignment by IANA.
OpenVPN 2.0-beta16 and earlier used 5000 as the default port.
Sat Apr 30 12:30:38 2005 LZO compression initialized
Sat Apr 30 12:30:38 2005 WARNING: normally if you use --mssfix and/or
--fragment, you should also set --tun-mtu 1500 (currently it is 1300)
Sat Apr 30 12:30:38 2005 Control Channel MTU parms
[ L:1362 D:138 EF:38 EB:0 ET:0 EL:0 ]
Sat Apr 30 12:30:38 2005 Data Channel MTU parms
[ L:1362 D:1100 EF:62 EB:23 ET:0 EL:0 AF:3/1 ]
Sat Apr 30 12:30:38 2005 Fragmentation MTU parms
[ L:1362 D:1100 EF:61 EB:23 ET:1 EL:0 AF:3/1 ]
Sat Apr 30 12:30:38 2005 Local Options hash (VER=V4): '1384ad9f'
Sat Apr 30 12:30:38 2005 Expected Remote Options hash (VER=V4): '680ec5fe'
Sat Apr 30 12:30:38 2005 UDPv4 link local: [undef]
Sat Apr 30 12:30:38 2005 UDPv4 link remote: 1.1.1.1:443
Sat Apr 30 12:30:38 2005 TLS: Initial packet from 1.1.1.1:443,
sid=4d8262ad e43004c2
Sat Apr 30 12:30:38 2005 VERIFY OK:
depth=1, /C=de/ST=Niedersachsen/L=Bad_Essen/O=pronix/OU=Administration
/CN=my-ca/emailAddress=you@mail.address
Sat Apr 30 12:30:39 2005 VERIFY X509NAME OK:
/C=de/ST=Niedersachsen/L=Bad_Essen/O=pronix/OU=Administration
/CN=server/emailAddress=you@mail.address
Sat Apr 30 12:30:39 2005 VERIFY OK:
depth=0, /C=de/ST=Niedersachsen/L=Bad_Essen/O=pronix/OU=Administration/
CN=server/emailAddress=you@mail.address
Sat Apr 30 12:30:39 2005 Data Channel Encrypt:
Cipher 'AES-256-CBC' initialized with 256 bit key
Sat Apr 30 12:30:39 2005 Data Channel Encrypt:
Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Apr 30 12:30:39 2005 Data Channel Decrypt:
Cipher 'AES-256-CBC' initialized with 256 bit key
Sat Apr 30 12:30:39 2005 Data Channel Decrypt:
Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Apr 30 12:30:39 2005 Control Channel: TLSv1, cipher TLSv1/SSLv3
DHE-RSA-AES256-SHA, 1024 bit RSA
Sat Apr 30 12:30:39 2005 [server] Peer Connection Initiated with 1.1.1.1:443
Sat Apr 30 12:30:40 2005 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Sat Apr 30 12:30:40 2005 PUSH: Received control message:
'PUSH_REPLY,route 192.168.0.0 255.255.255.0,route 10.8.0.1,
ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9'
Sat Apr 30 12:30:40 2005 OPTIONS IMPORT: timers and/or timeouts modified
Sat Apr 30 12:30:40 2005 OPTIONS IMPORT: --ifconfig/up options modified
Sat Apr 30 12:30:40 2005 OPTIONS IMPORT: route options modified
Sat Apr 30 12:30:40 2005 TUN/TAP device tun0 opened
Sat Apr 30 12:30:40 2005 /sbin/ifconfig tun0 10.8.0.10
pointopoint 10.8.0.9 mtu 1492
Sat Apr 30 12:30:40 2005 /sbin/route add -net
192.168.0.0 netmask 255.255.255.0 gw 10.8.0.9
Sat Apr 30 12:30:40 2005 /sbin/route add -net
10.8.0.1 netmask 255.255.255.255 gw 10.8.0.9
Sat Apr 30 12:30:40 2005 Initialization Sequence Completed
Nun setzen wir einen ping auf das Netzwerk ab, um zu sehen, ob alles klappt:
TTY
# ping -c 3 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.613 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.589 ms
64 bytes from 192.168.0.3: icmp_seq=3 ttl=64 time=0.628 ms
--- 192.168.0.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.589/0.610/0.628/0.016 ms
Hurray, Hurray :-D
Automatischer Start des Client
Das erzeugte rpm hat bei meiner Installation OpenVPN gleich gestartet und sich auch im init Prozess eingenistet.
In diesem Fall brauchte ich nichts weiter zu machen. Falls Ihre Distribution dies nicht macht - was ich mal schwer hoffe ;-) - und falls dem Programmpaket für Ihre Distribution kein Startscript beiliegt müssen wir ein Startscript, erstellen:
#!/bin/sh
# Unser OpenVPN binary
openvpn="/bin/openvpn"
# OpenVPN Verzeichnis
work="/etc/openvpn"
# Lockfile
lock="openvpn.lock"
# PID Verzeichnis
piddir="/var/run"
#########################
# Here we go #
#########################
lock="$work/$lock"
if ! [ -f $openvpn ]; then
echo "Error: OpenVPN binary not found"
exit 0;
fi
# Unsere Optionen, die wir dem Startscript mitgeben koennen
case "$1" in
start)
if ! `/sbin/lsmod | grep -q tun`; then
if ! `/sbin/modprobe tun`; then
echo "Error: Can't load kernel module tun"
exit 0;
fi
fi
if [ -e $lock ]; then
echo "OpenVPN is already running. Trying to kill..."
for pidf in `/bin/ls $piddir/openvpn*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill `cat $pidf` >/dev/null 2>&1
fi
rm -f $pidf
done
rm -f $lock
sleep 3
fi
rm -f $piddir/openvpn*.pid
cd $work
success=0
for c in `/bin/ls *.conf 2>/dev/null`; do
bn=${c%%.conf}
rm -f $piddir/$bn.pid
$openvpn --daemon --writepid $piddir/openvpn$bn.pid --config $c --cd $work
if [ $? -eq 0 ]; then
echo "OpenVPN: Startet with configuration $c"
success=1
fi
done
if [ $success -eq 1 ]; then
touch $lock
fi
;;
stop)
for pidf in `/bin/ls $piddir/openvpn*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill `cat $pidf` >/dev/null 2>&1
fi
rm -f $pidf
done
rm -f $lock
if `/sbin/lsmod | grep -q tun`; then
if ! `/sbin/rmmod tun`; then
echo "Error: Can't unload kernel module tun"
exit 0;
fi
fi
echo "Stopped OpenVPN"
;;
restart)
$0 stop
sleep 3
$0 start
;;
reload)
if [ -f $lock ]; then
for pidf in `/bin/ls $piddir/openvpn*.pid 2>/dev/null`; do
if [ -s $pidf ]; then
kill -USR1 `cat $pidf` >/dev/null 2>&1
fi
done
fi
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
;;
esac
exit 0
Wir verlinken das Startscript in runlevel 0, 5 und 6. Bei anderen Distributionen wird ein anderes runlevel gewählt - auch die Pfade zu den rc Verzeichnissen weichen ab.
TTY
# ln -s /etc/init.d/openvpn.sh /etc/init.d/rc.5/S12openvpn
# ln -s /etc/init.d/openvpn.sh /etc/init.d/rc.0/K12openvpn
# ln -s /etc/init.d/openvpn.sh /etc/init.d/rc.6/K12openvpn
#
Weiter mit OpenVPN Client unter FreeBSD
