Aufbau eines VPN mit Hilfe von Freeswan mit dynamischen IP's (z.B.: Call by Call ISP) Jens Zerbst (raffnix@gmx.at) =========== Einführung: =========== Das Ziel dieses HOWTO's ist die Beschreibung, x Netzwerke durch ein VPN zuverbinden. Dabei sollen nur dynamische IP's (wie es z.B. bei Call by Call Provider der Fall ist) benutzt werden (der Vorteil liegt auf der Hand). Die Anzahl der zuverbindende Netzwerke ist dabei nur durch Freeswan beschränkt. Ich gehe in diesem HOWTO nur auf die entscheidenden Probleme von dynamischen IP's für ein VPN ein, nicht auf eine Freeswan konfiguration (dies ist unter www.freeswan.org zu finden). Es soll noch gesagt werden, dass die 'Stabilität bzw. die Verfügbarkeit' solch ein VPN's hauptsächlich von dem ISP abhängt. Ich habe bei mehren VPN's ein sehr zufriedenstellende 'Stabilität bzw. Verfügbarkeit' erreicht. ================ Vorraussetzungen: ================ lauffähiges Freeswan 1.x System (siehe www.freeswan.org) Dynamic DNS Service Provider (z.B.: www.dyndns.org) oder eine Shell mit einer static IP (auf diese Variante gehe ich hier nicht ein) =============== Musternetzwerk: =============== --------------------------- 10.100.x.x network - router1(ipsec) -------inet------- router2(ipsec) - 10.110.x.x network mit ip-Adressen mit ip-Adressen Zuweisung auf Zuweisung auf dynip1.xxx.org dynip2.xxx.org lan-Adresse: 10.100.0.1 lan-Adresse: 10.110.0.1 -------inet------- router3(ipsec) - 10.120.x.x network mit ip-Adressen Zuweisung auf dynip3.xxx.org lan-Adresse: 10.120.0.1 -------inet------- road (PGPnet, ...) --------------------------- =============== Konfirguration: =============== 1. Konfiguration der automatischen IP-Adressen Zuweisung auf 'dynamischendnsname.org'. Dieses macht man am besten mit einem Daemon der automatisch die IP-Adresse mit dem Dynamic DNS Service Provider abgleicht und gegebenfalls updatet. Solche Tools wäre z.B. unter http://support.dyndns.org/dyndns/clients/unix.shtml zu finden. Eine Beispielkonfiguration: --- irgendein Script, welcher beim booten läuft --- /sbin/ex-xxupdate -c /etc/dynamischendnsname.conf -d -P 200 --------------------------------------------------- Damit wäre eine Zuweisung der dynamischen IP auf den 'dynamischendnsname.org' gesichert. (Dieser Vorgang muss kontinuierlich und schnell laufen) 2. ipsec.conf Das wirkliche Besondere bei der ipsec.conf ist der Eintrag des rightnexthop bzw. leftnexthop (In die ipsec.conf stehen nur fantasie Zahlen. Änderung ist notwendig.) Es ist nur der nexthop auf der 'eigenen' Seite zu setzten. Hierbei gib es zwei Varianten: 1. Euer ISP hat immer den gleichen P-t-P Partner für euch. (das ist natürlich die einfachere Variante). Hierbei müßt Ihr einfach den P-t-P Partner (shell: ifconfig) eintragen. 2. Euer ISP hat verschiedene P-t-P Partner für euch. Hier müßt ihr beim 'dialup-script zum ISP' den P-t-P-Partner grep'en und dann in die ipsec.conf cat'en (die Befehle werden im jedem besseren UNIX-Buch beschrieben). Die ipsec.conf ist dann für die jeweiligen Router anzupassen. Hier ist die ipsec.conf für den Router 'dynip1'. --- /etc/ipsec.conf --- config setup interfaces=%defaultroute klipsdebug=none plutodebug=none plutoload=%search plutostart=%search conn %default keyingtries=1 spi=0x200 esp=3des-md5-96 espenckey=0x01234567_89abcdef_02468ace_13579bdf_12345678_9abcdef0 espauthkey=0x12345678_9abcdef0_2468ace0_13579bdf conn dynip1-dynip2 left=dynip1.xxx.org leftsubnet=10.100.0.0/16 leftnexthop=77.77.77.77 <---------- muss gestzt werden, siehe oben right=dynip2.xxx.org rightsubnet=10.110.0.0/16 rightnexthop= auto=add conn dynip1-dynip3 left=dynip1.xxx.org leftsubnet=10.100.0.0/16 leftnexthop=77.77.77.77 <---------- muss gestzt werden, siehe oben right=dynip3.xxx.org rightsubnet=10.120.0.0/16 rightnexthop= auto=add conn dynip1-road left=0.0.0.0 leftsubnet= leftnexthop= right=dynip1.xxx.org rightsubnet=10.100.0.0/16 rightnexthop=77.77.77.77 <---------- muss gestzt werden, siehe oben authby=secret auto=add -------------------------- 3. ipsec.secrets --- /etc/ipsec.secrets --- dynip1.xxx.org dynip2.xxx.org "my secret" dynip1.xxx.org dynip3.xxx.org "my second secret" -------------------------- 4. cron-Scripte Die cron-Scripte sind nötig, um das VPN immer am laufen zu halten. z.B.: bei einem ISP Disconnect (bei Flatrates soll soetwas vorkommen) oder bei einem Reset etc. zu reagieren. ISP testen: --- /usr/sbin/inettest --- ping -i 10 -c 5 -n 77.77.77.77 <----- eine IP die immer online ist if test $? -ne 0; then /sbin/reboot <----- hier kann auch ein Script zum relogin in ISP stehen fi exit 0 -------------------------- dynip2 testen: --- /usr/sbin/dyn2test --- ping -i 5 -c 5 -n -I 10.100.0.1 10.110.0.1 <------ dynip1 pingt über das dev mit der IP 10.100.0.1 auf das dev mit der IP 10.110.0.1 auf dynip2 if test $? -ne 0; then /usr/sbin/ipsec auto --replace dynip1-dynip2 /usr/sbin/ipsec auto --add dynip1-dynip2 /usr/sbin/ipsec auto --up dynip1-dynip2 fi exit 0 -------------------------- Dieses Script ist für dynip1 geschrieben, für dynip2 sind Anpassung nötig. - IP's in der 1. Zeile anpassen - der connect-Name an ipsec.conf angleichen Danach kann man die Scripte in den cron integrieren. --- cron --- * * * * * /usr/sbin/inettest * * * * * /usr/sbin/dynip2test ------------ Natürlich kann man auch die cron-Scripts auch als Daemon starten. =============== Kontrollhilfen: =============== - läuft der login in den ISP ? steht die 'defaultroute' ? - läuft die Zuordnung dynamische IP zu dynipx.xxx.org (ping auf dynipx.xxx.org) - läuft der ipsec-connect? bei Problemen kann auch erst mit IP-Adressen die ipsec.conf auf Korrektheit getesten werden (dabei trägt man die derzeitigen IP's in die ipsec.conf ein) Wenn es hier Probleme gibt, helfen euch die Manuals auf www.freeswan.org sicher weiter. - es wird eine gewisse Zeit dauern bis die Namensauflösung bei einer IP-Änderung gelaufen sind. (oft kommt erst der Fehler 'could not orient connection' dieser sollte sich aber schnell einstellen) - stimmt der nexthop-Eintrag? (vergleichen mit P-t-P-Eintrag durch ifconfig) ============= letzte Worte: ============= Mit diesen Schritten sollte man ein lauffähiges VPN mit dynamischen IP's konfigurieren können. Ich hab es an meheren VPN's erfolgreich testen können. (um die Verfügbarkeit gegebenenfalls zu erhöhen arbeite ich mit 'fallout-Systemen', die ein Tunnel sofort 'übernehmen' können) Dies ist die erste Version des HOWTO's und ist sicherlich noch Verbesserungswürdig. Bitte teilt mir Probleme, Fehler, etc. mit, damit ich das HOWTO gegebenenfalls verbessern kann. (raffnix@gmx.at) ========= Thanx to: ========= the team of FreeS/Wan the team of www.dyndns.org the team of ez-update for their great work FreeS/WAN derives its name from S/WAN, which is a trademark in the USA of RSA Data Security, Inc;