Commit | Line | Data |
---|---|---|
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 | 13 | LOCALNET="10.230.0.0/20" |
f8162b87 P |
14 | LOCALIP="10.230.0.254" |
15 | PUBLICIP="210.245.61.206" | |
16 | GW="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 | |
48 | cat << __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 | ||
56 | spdadd $LOCALNET $LOCALNET any -P out none ; | |
57 | spdadd $LOCALNET $LOCALNET any -P in none ; | |
58 | ||
59 | __EOF__ | |
60 | ||
61 | ( | |
62 | # pré-traitement de la liste des réseaux dans /etc/pipsecd/startup | |
63 | awk ' | |
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 | |
74 | sed -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 | 113 | exit 0 |