OpenVPN: Unterschied zwischen den Versionen

1.366 Bytes hinzugefügt ,  27. August 2006
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.1</tt> für den Server und <tt>10.1.x.y</tt> für die Clients angenommen.  
** 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
   
   
  mode server
  server 10.0.0.0 255.255.255.0  
tls-server
ifconfig 10.0.0.1 10.0.0.2
route 10.0.0.0 255.0.0.0
push "route 10.0.0.1"
   
   
  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>:
ifconfig-push 10.0.1.2 10.0.1.1
push "route 10.0.0.0 255.255.0.0"
  push "redirect-gateway"
  push "redirect-gateway"


Zeile 101: Zeile 94:


=== Routing / Firewall ===
=== Routing / Firewall ===
''Todo''
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
Anonymer Benutzer