ou Router l'ensemble du trafic dans un tunnel ipsec strongswan en mode client mobile.
auteur : ronron
contact : '.@..'
Il est simpliste (donc réducteur) d'associer l'anonymat sur Internet aux pervers et terroristes de tous poils, il s'agit là d'une grossière erreur, pourquoi accepterai-t-on d' être traqué par les sites web ? accepte-t-on nous d'être suivi ou surveillé dans la rue lorsque nous faisons des achats ?
La balance confort/liberté ne doit pas trop pencher sur le premier plateau.
road warrior : normalement un cadre en déplacement, le plus souvent un ado pervers et boutonneux mattant des poneys en rut à longueur de soirée
vpn : outil pour matter des poneys en rut en loucedé
ipsec : système compliqué mais facile à prononcer
strongswan : un Cygne fort ?
by-pass : truc pour maigrir
Internet : endroit pleins de criminels et de faique niouz
pandoc et markdown : transformateur et format de document
nat : truc dans les cheveux des fillesou des fiottes
phases ipsec : éléments du tunnel (phase 1, le tunnel de connexion - phase 2, Le ou LES tunnel(s) de transport)
et toc.. (oh oh oh)
pandoc -f markdown -t html5 --toc -s -o ~/ipsec.html ipsec-rw.md
Document css stylesheet less..
Il s'agit d'un split tunneling avec ip virtuel.
Nous utiliserons ikev2 (pourquoi pas ?)
Ressources :
Vérifiez déjà que l'ip de sortie de votre VPN soit bien dans le ou la pays ou région désiré(e)
compliqué..
~# apt install -y strongswan
sur la machine cliente et la passerelle.
~# ipsec start
~# ipsec stop
~# ipsec reload
~# ipsec restart
~# ipsec status
~# ipsec statusall
~# ipsec up "nom du tunnel" # pour ceux qui sont en *auto=add*
Vérifier que les ports ipsec soient bien accessibles côté serveur.
Si le status est open/filtered, c'est bon, c'est normal, c'est udp ^^ (voir la doc de nmap).
~# nmap -P0 -sU -p 500,4500 212.4.2.4
Starting Nmap 6.47 ( http://nmap.org ) at 2016-12-11 12:28 CET
Host is up (1.3s latency).
PORT STATE SERVICE
500/udp open isakmp
4500/udp open|filtered nat-t-ike
~# cat /etc/ipsec.conf
config setup
# le debug
charondebug="ike 1, knl 1, cfg 0"
# limite le nombre de connexion je crois..
uniqueids=no
conn ikev2-vpn
# authentification par secret partagé
authby=secret
# démmarage auto
auto=start
# je désactive car les autres le font (beee..)
compress=no
# parcequ'on veut un tunnel..
type=tunnel
keyexchange=ikev2
# en cas de problème de mtu
fragmentation=yes
# la flemme de regarder la doc
forceencaps=yes
# les algo..toussa
ike=aes256-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha1,3des-sha1!
# je crois que ce sont les période de scrutation du peer
dpdaction=clear
dpddelay=300s
# la flemme de regarder la doc
rekey=no
# notre patte *locale*
left=163.172.21.190
# ne pas spécifier les réseaux utilisables en phase 2, c'est autoriser l'accès vers tous.
leftsubnet=%dynamic,0.0.0.0/0
# gère les règles firewall de forward
leftfirewall=yes
# tente de pousser les serveur dns spécifiés ?
rightdns=8.8.8.8,163.172.2.110
# l'ip du client viendra de ce scope (ip virtuelle)
rightsourceip=10.1.1.0/24
~# cat /var/lib/strongswan/ipsec.secrets.inc
163.172.21.190 : PSK "cumulonimbus"
On ne spécifie pas de right car on attends des road warriors .
Attention à bien garder un espace entre l'adresse ip et le :
Deux règles, une d'entrée, une de forward ont été automatiquement ajoutées (ne pas le faire manuellement, le système s'en occupe):
~# iptables-save
...
-A FORWARD -s 192.168.0.0/16 -i eth0 -m policy --dir in --pol ipsec --reqid 7 --proto esp -j ACCEPT
-A FORWARD -s 10.1.1.1/32 -i eth0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A INPUT -s 192.168.0.0/16 -d 163.172.21.190/32 -i eth0 -m policy --dir in --pol ipsec --reqid 2 --proto esp -j ACCEPT
Pensez à activer le transfert entre interface
sysctl net.ipv4.conf.all.forwarding=1
La table de routage ipsec est vide sur la gateway
~# ip route show table 220
~#
Ajout du nat qui permettra la navigation des clients vpn (sinon pas d'internet avec une ip privée).
Strongswan ne nat pas de base, donc les paquets clients viendront de l'adresse définie dans le rightsubnet (192.168.0.0/16).
~# iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j MASQUERADE
Cette commande permet de rendre verbeux le démarrage du tunnel, n'oubliez pas qu'il est en démarrage automatique auto=start
ipsec up ikev2-vpn
~# cat /etc/ipsec.conf
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ns7
authby=secret
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
ike=aes256-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha1,3des-sha1!
dpdaction=clear
dpddelay=300s
rekey=no
left=%defaultroute
# à changer dans ipsec.secrets.inc
leftsubnet=0.0.0.0/0
right=163.172.21.190
rightsubnet=0.0.0.0/0
conn local-net
# les ips ci-dessous ne sont "traités" par le routage vpn classique
rightsubnet=163.172.21.190,212.129.2.222
authby=never
type=pass
auto=route
Cette phase sert à accéder aux ip normalement non-accessibles que sont les ip locales de la passerelle.
Il s'agit d'un by-pass, les flux vers ces ips ne transitent pas dans le tunnel.
~# cat /var/lib/strongswan/ipsec.secrets.inc
192.168.11.5 163.172.21.190 : PSK "cumulonimbus"
J'ai mis l'ip du leftside, il y a moyen de ne pas le faire, chercher la syntaxe peut-être un truc comme :
: 163.172.21.190 PSK "cumulonimbus"
J'ai l'impression que même avec les ip virtuelles, le rightside est nécessaire.
On ajoute les règles permettant de router le trafic vers le tunnel.
Le faire manuellement en l'ajoutant à /etc/iptables/rules.v4 puis en rechargeant avec service netfilter-persistent restart
~# iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -m policy --dir out --pol ipsec -j ACCEPT
~# iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j MASQUERADE
Je pense que la seconde ligne correspond à la phase de by-pass
~# ip route show table 220
default via 192.168.11.1 dev wlx3476c5b50cd3 proto static src 10.1.1.1
163.172.21.190 via 192.168.11.1 dev wlx3476c5b50cd3 proto static
...
Vérifions qu'une adresse donnée soit bien routée :
~# ip route get 8.8.8.8
8.8.8.8 via 192.168.11.1 dev wlx3476c5b50cd3 src 192.168.11.5 cache
car présente dans le rightsubnet de tunnel local-net
~# ip route get 163.172.2.110
163.172.2.110 via 192.168.11.1 dev wlx3476c5b50cd3 table 220 src 192.168.11.5 cache
~# ip route get 8.8.8.8
8.8.8.8 via 192.168.11.1 dev wlx3476c5b50cd3 table 220 src 10.1.1.1 cache
remarquez la présence de la route dans la table ipsec (220)
Cette commande permet de rendre verbeux le démarrage du tunnel, n'oubliez pas qu'il est en démarrage manuel auto=add
ipsec up ns7
~# ipsec statusall
Status of IKE charon daemon (strongSwan 5.5.1, Linux 4.9.0-8-amd64, x86_64):
uptime: 5 seconds, since Oct 12 21:56:03 2018
malloc: sbrk 2433024, mmap 0, used 425984, free 2007040
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 2
loaded plugins: charon aes rc2 sha2 sha1 md5 random nonce x509 revocation constraints pubkey
pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp agent xcbc hmac gcm attr
kernel-netlink resolve socket-default connmark stroke updown
Listening IP addresses:
192.168.11.5
Connections:
ns7: %any...163.172.21.190 IKEv2, dpddelay=1s
ns7: local: uses pre-shared key authentication
ns7: remote: [163.172.21.190] uses pre-shared key authentication
ns7: child: dynamic === 0.0.0.0/0 TUNNEL, dpdaction=restart
local-net: %any...%any IKEv1/2
local-net: local: uses public key authentication
local-net: remote: uses public key authentication
local-net: child: dynamic === 163.172.21.190/32 212.129.2.222/32 PASS
Shunted Connections:
local-net: dynamic === 163.172.21.190/32 212.129.2.222/32 PASS
Security Associations (1 up, 0 connecting):
ns7[1]: ESTABLISHED 28 minutes ago, 192.168.11.5[192.168.11.5]...163.172.21.190[163.172.21.190]
ns7[1]: IKEv2 SPIs: d8df57adec4c9268_i* 87ad9729dad1afd5_r, rekeying disabled
ns7[1]: IKE proposal: AES_CBC_256/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024
ns7[1]: Tasks active: IKE_MOBIKE
ns7{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c42c9612_i ca13571d_o
ns7{1}: AES_CBC_256/HMAC_SHA1_96, 6117287 bytes_i (6680 pkts, 33s ago), 676695 bytes_o (6100 pkts, 0s ago), rekeying disabled
ns7{1}: 10.1.1.1/32 === 0.0.0.0/0
Vérifiez que les policy soient chargées
~# ip xfrm policy
src 0.0.0.0/0 dst 10.1.1.1/32
dir fwd priority 191808 ptype main
tmpl src 163.172.21.190 dst 192.168.11.5
proto esp reqid 1 mode tunnel
src 0.0.0.0/0 dst 10.1.1.1/32
dir in priority 191808 ptype main
tmpl src 163.172.21.190 dst 192.168.11.5
proto esp reqid 1 mode tunnel
src 10.1.1.1/32 dst 0.0.0.0/0
dir out priority 191808 ptype main
tmpl src 192.168.11.5 dst 163.172.21.190
proto esp reqid 1 mode tunnel
src 163.172.2.110/32 dst 0.0.0.0/0
dir fwd priority 91808 ptype main
src 163.172.2.110/32 dst 0.0.0.0/0
dir in priority 91808 ptype main
src 0.0.0.0/0 dst 163.172.2.110/32
dir fwd priority 91808 ptype main
src 0.0.0.0/0 dst 163.172.2.110/32
dir out priority 91808 ptype main
Sur Debian, les évenements ipsec sont journalisés dans /var/log/daemon
Toujours valider que le tunnel fasse bien sont job !!!
Faite un curl ifconfig.io pour valider que l'ip de sortie ai changée
~# curl ifconfig.io
180.14.50.49
~# curl ifconfig.io
163.172.21.190
~# traceroute free.fr
traceroute to free.fr (212.27.48.10), 30 hops max, 60 byte packets
1 gateway (192.168.11.1) 3.808 ms 3.795 ms 3.845 ms
2 153.153.217.239 (153.153.217.239) 46.714 ms 47.123 ms 47.833 ms
3 153.153.217.117 (153.153.217.117) 48.505 ms 48.583 ms 49.037 ms
4 153.153.223.137 (153.153.223.137) 50.351 ms 51.562 ms 52.489 ms
5 180.8.126.49 (180.8.126.49) 51.947 ms 54.388 ms 54.586 ms
6 60.37.54.77 (60.37.54.77) 55.539 ms 122.1.245.57 (122.1.245.57) 54.694 ms 60.37.54.77 (60.37.54.77) 22.552 ms
7 ae-6.r02.tokyjp05.jp.bb.gin.ntt.net (120.88.53.21) 36.131 ms ae-5.r02.tokyjp05.jp.bb.gin.ntt.net (120.88.53.17) 36.283 ms ae-6.r02.tokyjp05.jp.bb.gin.ntt.net (120.88.53.21) 36.095 ms
8 ae-3.r31.tokyjp05.jp.bb.gin.ntt.net (129.250.3.29) 36.304 ms 36.380 ms ae-4.r31.tokyjp05.jp.bb.gin.ntt.net (129.250.3.57) 36.454 ms
9 ae-4.r23.lsanca07.us.bb.gin.ntt.net (129.250.3.193) 144.452 ms ae-4.r23.snjsca04.us.bb.gin.ntt.net (129.250.5.78) 149.234 ms 149.934 ms
10 ae-41.r02.snjsca04.us.bb.gin.ntt.net (129.250.6.119) 149.053 ms 149.215 ms ae-2.r00.lsanca07.us.bb.gin.ntt.net (129.250.3.238) 149.428 ms
11 be3025.ccr41.lax04.atlas.cogentco.com (154.54.9.29) 149.364 ms ae-0.cogent.snjsca04.us.bb.gin.ntt.net (129.250.8.42) 149.078 ms 138.223 ms
12 be3360.ccr42.lax01.atlas.cogentco.com (154.54.25.149) 133.148 ms 133.624 ms 134.699 ms
13 be2932.ccr32.phx01.atlas.cogentco.com (154.54.45.161) 154.421 ms be3109.ccr21.slc01.atlas.cogentco.com (154.54.44.138) 158.994 ms be2932.ccr32.phx01.atlas.cogentco.com (154.54.45.161) 155.526 ms
14 be3037.ccr21.den01.atlas.cogentco.com (154.54.41.146) 192.061 ms be2930.ccr21.elp01.atlas.cogentco.com (154.54.42.78) 172.149 ms 172.254 ms
15 be2928.ccr42.iah01.atlas.cogentco.com (154.54.30.161) 181.886 ms be3036.ccr22.mci01.atlas.cogentco.com (154.54.31.90) 185.032 ms 187.006 ms
16 be2687.ccr41.atl01.atlas.cogentco.com (154.54.28.69) 198.453 ms be2831.ccr41.ord01.atlas.cogentco.com (154.54.42.166) 183.274 ms 184.225 ms
17 be2113.ccr42.dca01.atlas.cogentco.com (154.54.24.221) 213.470 ms be2112.ccr41.dca01.atlas.cogentco.com (154.54.7.157) 217.467 ms be2717.ccr21.cle04.atlas.cogentco.com (154.54.6.222) 193.232 ms
18 be2879.ccr22.alb02.atlas.cogentco.com (154.54.29.174) 217.204 ms 217.189 ms 217.256 ms
19 * * be3599.ccr31.bos01.atlas.cogentco.com (66.28.4.238) 213.176 ms
20 be2983.ccr42.lon13.atlas.cogentco.com (154.54.1.177) 264.150 ms be3518.agr21.par01.atlas.cogentco.com (130.117.50.42) 267.664 ms be2983.ccr42.lon13.atlas.cogentco.com (154.54.1.177) 264.875 ms
21 be12489.ccr42.par01.atlas.cogentco.com (154.54.57.70) 284.573 ms be12497.ccr41.par01.atlas.cogentco.com (154.54.56.130) 280.399 ms 149.14.152.218 (149.14.152.218) 280.850 ms
22 be3517.agr21.par01.atlas.cogentco.com (130.117.49.42) 299.161 ms * *
23 bzn-9k-4-be1004.intf.routers.proxad.net (78.254.249.2) 288.230 ms 283.075 ms 283.993 ms
24 bzn-9k-2-sys-be2000.intf.routers.proxad.net (194.149.161.242) 290.193 ms 194.149.166.61 (194.149.166.61) 281.349 ms bzn-9k-2-sys-be2000.intf.routers.proxad.net (194.149.161.242) 268.180 ms
25 bzn-9k-4-be1004.intf.routers.proxad.net (78.254.249.2) 275.950 ms 276.006 ms 276.455 ms
26 www.free.fr (212.27.48.10) 287.651 ms 289.589 ms bzn-9k-2-sys-be2000.intf.routers.proxad.net (194.149.161.242) 278.422 ms
~# traceroute free.fr
traceroute to free.fr (212.27.48.10), 30 hops max, 60 byte packets
1 gruik.com (163.172.21.190) 303.872 ms 303.882 ms 303.890 ms
2 * 163-172-214-1.rev.poneytelecom.eu (163.172.21.1) 307.041 ms 307.449 ms
3 195.154.2.128 (195.154.2.128) 310.245 ms 310.140 ms 310.194 ms
4 51.158.8.26 (51.158.8.26) 310.511 ms 310.947 ms 51.158.8.24 (51.158.8.24) 311.259 ms
5 195.154.2.103 (195.154.2.103) 320.219 ms 195.154.2.105 (195.154.2.105) 324.747 ms 323.479 ms
6 195.154.3.208 (195.154.3.208) 326.246 ms bzn-crs16-1-be1500-t.intf.routers.proxad.net (212.27.58.49) 310.686 ms 305.905 ms
7 194.149.166.61 (194.149.166.61) 307.016 ms 194.149.166.37 (194.149.166.37) 306.837 ms 194.149.166.61 (194.149.166.61) 310.639 ms
8 bzn-9k-4-be1004.intf.routers.proxad.net (78.254.249.2) 309.878 ms 310.778 ms 310.596 ms
9 bzn-9k-2-sys-be2000.intf.routers.proxad.net (194.149.161.242) 310.008 ms 310.828 ms 310.009 ms
10 bzn-9k-2.sys.routers.proxad.net (212.27.32.146) 310.081 ms 312.142 ms 313.356 ms
11 www.free.fr (212.27.48.10) 313.270 ms 312.277 ms 311.733 ms
Notre amie tcpdump nous permet de constater que le client arrive bien avec l'ip 10.1.1.1
~# timeout 5 tcpdump -vni any host linuxfr.org
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
12:50:27.971895 IP (tos 0x0, ttl 64, id 48588, offset 0, flags [none], proto ICMP (1), length 84)
10.1.1.1 > 88.191.250.176: ICMP echo request, id 11692, seq 6, length 64