Fast jedes Hotel hat ein öffentliches W-Lan, welches jeder Gast meistens kostenlos benutzen darf. Das Problem ist dabei aber, genauso wie in W-Lans in einem Café etc., dass jeder, der sich im W-Lan befindet, alle unverschlüsselten Dateien mitlesen und analysieren/bearbeiten kann. Das ist besonders bei Passwörtern unpraktisch, welche je nach Protokoll und Verbindung komplett unverschlüsselt übertragen werden, beispielsweise bei FTP oder dem Mailabruf.
Die Lösung dieses Problemes ist folgendes Init-Script, welches beim Starten des Computers ausgeführt wird und mithilfe von iptables nur VPN-Verbindungen nach außen durch lässt.

Zuerst muss das Script erstellt werden, das geht mit sudo nano /etc/init.d/forcevpn am schnellsten. Dort kopiert man dann folgenden Code hinein und ändert die IP des VPN-Servers in Zeile 17 in die des eigenen VPN-Servers.

/etc/init.d/forcevpn

#! /bin/sh
### BEGIN INIT INFO
# Provides:          ForceVPN
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Force VPN connection
# Description:       Internet only works over VPN-Connection
### END INIT INFO

# Author: Igor Scheller <igor.scheller@igorshp.de>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Force the internet connection to route through a VPN"
IPT=/sbin/iptables
VPN=123.123.123.123
NAME=${0##*/}

is_root()
{
	if [ "$(id -u)" != "0" ]; then
		echo "This script must be run as root!" 1>&2
		exit 1
	fi
}

do_start()
{
	is_root
	echo "Enabling $NAME"

	if [ ! -f /tmp/iptables.bak ];then
		#Backup old
		iptables-save > /tmp/iptables.bak

		# Basic rules from http://www.linuxquestions.org/questions/linux-security-4/force-all-internet-traffic-through-tun0-vpn-interface-896458/
		#Flush rules
		$IPT -F
		$IPT -X

		#Default policies and define chains
		$IPT -P OUTPUT DROP
		$IPT -P INPUT DROP
		$IPT -P FORWARD DROP

		#Allow input from tun0 and lo ONLY
		$IPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
		$IPT -A INPUT -i lo -j ACCEPT
		$IPT -A INPUT -i tun0 -m conntrack --ctstate NEW -j ACCEPT
		$IPT -A INPUT -j DROP

		#Allow output from lo and tun0 ONLY
		$IPT -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
		$IPT -A OUTPUT -o lo -j ACCEPT
		$IPT -A OUTPUT -o tun0 -m conntrack --ctstate NEW -j ACCEPT
		$IPT -A OUTPUT -d $VPN -m conntrack --ctstate NEW -j ACCEPT
		$IPT -A OUTPUT -j DROP
		echo "  Done"
	else
		echo "  Already enabled"
	fi

	return 0
}

do_stop()
{
	is_root
	echo "Disabling $NAME"

	if [ -f /tmp/iptables.bak ];then
		cat /tmp/iptables.bak | iptables-restore
		rm /tmp/iptables.bak
		echo "  Done"
	else
		echo "  Already disabled"
	fi

	return 0
}

do_restart() {
	do_stop
	do_start
	return 0
}

do_status() {
	echo "Status of $NAME:"

	if [ -f /tmp/iptables.bak ];then
		echo "  Active"
	else
		echo "  Not active"
	fi

	return 0
}

case "$1" in
	start)
		do_start
	;;
	stop)
		do_stop
	;;
	status)
		do_status
	;;
	restart|force-restart)
		do_restart
	;;
	*)
		echo "Usage: $0 {start|stop|status|restart}" >&2
		exit 3
	;;
esac

exit 0

Gespeichert wird mit Strg+O, und zum Schließen benutzt man Strg+X.
Nun muss das Script nur noch ausführbar gemacht werden, das geht mit sudo chmod +x /etc/init.d/forcevpn und der automatische Start beim Systemstart aktiviert werden sudo update-rc.d forcevpn defaults. Um den automatischen Start wieder zu Deaktivieren, reicht ein sudo update-rc.d -f forcevpn remove. Natürlich kann man das Script auch manuell mit sudo service forcevpn start und sudo service forcevpn stop starten und stoppen.

Wenn man in der Konfiguration des VPNs den server mit einer Domain eingetragen hat, muss man in die Datei /etc/hosts am Ende noch ein 198.51.100.157 myvpn.domain hinzufügen.

Das war es auch schon, jetzt fehlt nur noch der (eigene) openVPN-Server ;)