list2form : gestion des erreurs et des petits fichiers (merci cgi.py…)
[progfou.git] / ipsec / pipsecd2ipsectools
CommitLineData
d3bafc0a
P
1#!/bin/sh
2# pipsecd2ipsectools - outil d'aide à la migration de pipsecd vers ipsec-tools
3# Copyright ©2011 Agence universitaire de la Francophonie
4# http://www.auf.org/
5# Licence : GNU General Public License, version 3
6# Auteur : Progfou <jean-christophe.andre@auf.org>
7# Création : 2011-02-15
0e7493e8
P
8# Mise à jour : 2011-09-13
9#
10# Mode d'emploi :
11# - changer les adresses IP ci-dessous en prenant soin de spécifier un réseau
12# de CIDR /20 pour se préparer au futur RPV v2
d3bafc0a 13LOCALNET="10.230.0.0/20"
f8162b87
P
14LOCALIP="10.230.0.254"
15PUBLICIP="210.245.61.206"
16GW="118.70.0.243"
0e7493e8
P
17# - lancer ce script, sous root, dans le serveur où est installé pipsecd et
18# sauver le résultat dans un fichier, par exemple :
19# # pipsecd2ipsectools > /root/ipsec-tools.conf
20# - vérifier le résultat obtenu avec votre RTR ou un autre collègue ayant
21# déjà fait la migration
22# - vérifier la configuration des règles de pare-feu pour s'assurer de NE PAS
23# faire de NAT en sortie vers 10.0.0.0/8, par exemple :
24# # iptables -t nat -I POSTROUTING -d 10.0.0.0/8 -j RETURN
25# - ajouter les routes statiques recommandées en commentaire dans le résultat
26# du lancement du script, soit dans /etc/network/interface, par exemple :
27# up ip route replace 10.36.0.0/20 via 118.70.0.243 dev ppp0 src 10.230.0.254
28# soit dynamiquement au lancement d'une interface PPP, par exemple dans un
29# fichier /etc/ppp/ip-up.d/0000iproute tel que suit :
30# #!/bin/sh
31# IP="/sbin/ip"
32# for net in `awk '/^spdadd .* out /{print $3}' /etc/ipsec-tools.conf` ; do
33# $IP route replace "$net" via $PPP_REMOTE dev $PPP_IFACE src 10.230.0.254
34# done
35# $IP route replace default via $PPP_REMOTE dev $PPP_IFACE src 210.245.61.206
36# - convenir avec un des admins du RPV (Jean Christophe André ou Moussa Nombré)
37# du moment de la bascule de pipsecd vers ipsec-tools
38# - stopper le service pipsecd et purger le paquet pipsecd devenu inutile :
39# # /etc/init.d/pipsecd stop
40# # aptitude purge pipsecd
41# - installer le paquet ipsec-tools et la configuration IPsec natif, par exemple :
42# # aptitude install ipsec-tools
43# # cat /root/ipsec-tools.conf >> /etc/ipsec-tools.conf
44# # service setkey restart
45# - demander le redémarrage du Netopia correspondant à Montréal
46# - tester que tout fonctionne bien, depuis le pare-feu et depuis un poste client
d3bafc0a
P
47
48cat << __EOF__
49
50# REMARQUES :
51# - l'ordre des règles spdadd est important et doit correspondre à l'ordre
52# des routes les plus précises vers les routes les plus générales
53
54# ne pas utiliser IPsec en réseau local
55
56spdadd $LOCALNET $LOCALNET any -P out none ;
57spdadd $LOCALNET $LOCALNET any -P in none ;
58
59__EOF__
60
61(
62# pré-traitement de la liste des réseaux dans /etc/pipsecd/startup
63awk '
64/^ifconfig / {
65 IF=substr($2,6)
66 REMOTENET=$5; split(REMOTENET,N,"\.")
67 REMOTEMASK=$7; split(REMOTEMASK,M,"\.")
68 REMOTENET=N[1]"."N[2]"."N[3]".0" # incorrect mais plus simple pour le moment
0e7493e8 69 REMOTECIDR=20 # 32-log(256^4-(M[1]*256^3+M[2]*256^2+M[3]*256+M[4]))/log(2)
d3bafc0a
P
70 printf("remotenet %s %s\n", IF, REMOTENET"/"REMOTECIDR)
71}
72' /etc/pipsecd/startup
73# envoi du contenu de /etc/pipsecd/pipsecd.conf
74sed -e '/^[^#]/s/ *= */=/g' /etc/pipsecd/pipsecd.conf
f8162b87 75) | awk -v LOCALNET="$LOCALNET" -v LOCALIP="$LOCALIP" -v LOCALTUNIP="$PUBLICIP" -v GW="$GW" '
d3bafc0a
P
76/^remotenet / {
77 IF=$2; REMOTENET[IF]=$3
78 #printf("# IF=%s REMOTENET=%s\n", IF, REMOTENET[IF])
79}
80/^#/ {
81 LASTCOMMENT=$0
82}
83/^sa / {
84 SPI=substr($3,5)
85 ENC=substr($4,5); EKEY=substr($5,6); gsub("_","-",ENC)
86 AUTH=substr($6,6); AKEY=substr($7,6); gsub("_","-",AUTH)
87 if (AUTH=="hmac-md5-96") { AUTH="hmac-md5" }
88 if ($8 != "") {
89 OSPI=SPI; OENC=ENC; OEKEY=EKEY; OAUTH=AUTH; OAKEY=AKEY
f8162b87 90 REMOTETUNIP=substr($8,6)
d3bafc0a
P
91 } else {
92 ISPI=SPI; IENC=ENC; IEKEY=EKEY; IAUTH=AUTH; IAKEY=AKEY
93 }
94}
95/^if / {
96 IF=$2; LSPI=substr($3,10); RSPI=substr($4,11)
f8162b87 97 IPROUTE="ip route add "REMOTENET[IF]" via "GW" src "LOCALIP
d3bafc0a
P
98 printf("%s\n#%s\n\n", LASTCOMMENT, IPROUTE)
99 printf("spdadd %s %s any -P out ipsec\n", LOCALNET, REMOTENET[IF])
f8162b87 100 printf(" esp/tunnel/%s-%s/require ;\n", LOCALTUNIP, REMOTETUNIP)
d3bafc0a 101 printf("spdadd %s %s any -P in ipsec\n", REMOTENET[IF], LOCALNET)
f8162b87
P
102 printf(" esp/tunnel/%s-%s/require ;\n\n", REMOTETUNIP, LOCALTUNIP)
103 printf("add %s %s esp-old %s -m tunnel\n", LOCALTUNIP, REMOTETUNIP, OSPI)
d3bafc0a 104 printf(" -E %s 0x%s\n -A %s 0x%s ;\n", OENC, OEKEY, OAUTH, OAKEY)
f8162b87 105 printf("add %s %s esp-old %s -m tunnel\n", REMOTETUNIP, LOCALTUNIP, ISPI)
d3bafc0a
P
106 printf(" -E %s 0x%s\n -A %s 0x%s ;\n\n", IENC, IEKEY, IAUTH, IAKEY)
107 EMPTYLINE=0
108}
109/^[ ]*$/ {
110 if (EMPTYLINE!=1) { print ""; EMPTYLINE=1 }
111}
112'
0e7493e8 113exit 0