OpenVPN: Unterschied zwischen den Versionen
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 17: | Zeile 17: | ||
* SSL-Zertifikate für alle Beteiligten. Um die kostengünstig (umsonst) und einfach zu erhalten, sei eine Anmeldung bei [http://cacert.org CaCert] empfohlen. | * SSL-Zertifikate für alle Beteiligten. Um die kostengünstig (umsonst) und einfach zu erhalten, sei eine Anmeldung bei [http://cacert.org CaCert] empfohlen. | ||
* Ein Netzwerkplan für das VPN, um folgende Fragen zu klären (''Melle, bitte ergänzen''): | * Ein Netzwerkplan für das VPN, um folgende Fragen zu klären (''Melle, bitte ergänzen''): | ||
** Welche LAN-Adressen (nach RFC 1918) sollen für das VPN verwendet werden? Im Folgenden sei <tt>10.0.0 | ** Welche LAN-Adressen (nach RFC 1918) sollen für das VPN verwendet werden? Im Folgenden sei <tt>10.0.0.x</tt> für das VPN angenommen. | ||
** Wer darf mit wem kommunizieren? Welches Routing und welche Firewall-Regeln werden dazu auf dem Server benötigt? Bis auf weiteres sei davon ausgegangen, daß Clients Verbindungen ins Internet nutzen dürfen, aber nicht untereinander kommunizieren sollen. | ** Wer darf mit wem kommunizieren? Welches Routing und welche Firewall-Regeln werden dazu auf dem Server benötigt? Bis auf weiteres sei davon ausgegangen, daß Clients Verbindungen ins Internet nutzen dürfen, aber nicht untereinander kommunizieren sollen. | ||
** Welche Namen haben die VPN-Teilnehmer? Nachfolgend sei <code>vpn-client.freifunk-potsdam.de</code> bzw. <code>vpn-server.freifunk-potsdam.de</code> angenommen. | ** Welche Namen haben die VPN-Teilnehmer? Nachfolgend sei <code>vpn-client.freifunk-potsdam.de</code> bzw. <code>vpn-server.freifunk-potsdam.de</code> angenommen. | ||
** Wo soll der Server laufen? Auf einem AP nahe einem schnellen Uplink oder ganz weit draußen im Internet? | ** Wo soll der Server laufen? Auf einem AP nahe einem schnellen Uplink oder ganz weit draußen im Internet? Die folgenden Configs gehen von einem AP auf der IP <tt>192.168.1.2</tt> aus, der über das Gateway <tt>192.168.1.1</tt> mit dem Internet verbunden ist. | ||
=== SSL-Certs === | === SSL-Certs === | ||
Zeile 58: | Zeile 58: | ||
dh dh1024.pem | dh dh1024.pem | ||
server 10.0.0.0 255.255.255.0 | |||
user nobody | user nobody | ||
Zeile 80: | Zeile 75: | ||
In <code>/etc/openvpn/ccd</code> befindet sich eine Konfigurationsdatei pro Client, die exakt so heißen muß wie der CN im Zertifikat des Clients, also <code>/etc/openvpn/ccd/vpn-client.freifunk-potsdam.de</code>: | In <code>/etc/openvpn/ccd</code> befindet sich eine Konfigurationsdatei pro Client, die exakt so heißen muß wie der CN im Zertifikat des Clients, also <code>/etc/openvpn/ccd/vpn-client.freifunk-potsdam.de</code>: | ||
push "redirect-gateway" | push "redirect-gateway" | ||
Zeile 101: | Zeile 94: | ||
=== Routing / Firewall === | === Routing / Firewall === | ||
Der Server sollte prinzipiell routen können. Klingt blöd, wird aber gerne vergessen: | |||
echo 1 > /proc/sys/net/ipv4/ip_forward | |||
Die Server-Config (oben) setzt die richtigen Routing-Einträge. Es fehlen nur noch ein paar <tt>iptables</tt>-Regeln, damit Clients nicht untereinander kommunizieren, und für das Masquerading der VPN-Adressen. Als Runlevel-Skript, z.B. in <code>/etc/init.d/firewall</code> sieht das so aus: | |||
#!/bin/sh | |||
IPTABLES="/sbin/iptables" | |||
MODPROBE="/sbin/modprobe" | |||
LOCAL_IP="192.168.1.2" | |||
case "$1" in | |||
start) | |||
# load modules | |||
${MODPROBE} ip_tables | |||
${MODPROBE} ip_conntrack | |||
# VPN internet route | |||
${IPTABLES} -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
# masquerading | |||
${IPTABLES} -t nat -A POSTROUTING -o eth0 -j SNAT --to-source ${LOCAL_IP} | |||
# Do not allow connections into the tunnels | |||
${IPTABLES} -A OUTPUT -o tun0 -d 10.0.0.0/8 -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
${IPTABLES} -A OUTPUT -o tun0 -j REJECT | |||
;; | |||
stop) | |||
${IPTABLES} -F INPUT | |||
${IPTABLES} -F FORWARD | |||
${IPTABLES} -F OUTPUT | |||
${IPTABLES} -t nat -F POSTROUTING | |||
${IPTABLES} -P INPUT ACCEPT | |||
${IPTABLES} -P FORWARD ACCEPT | |||
${IPTABLES} -P OUTPUT ACCEPT | |||
;; | |||
restart) | |||
$0 stop | |||
$0 start | |||
;; | |||
esac |