⚠️ Depuis la version 2.4.1, le Mozilla VPN ajoute automatiquement des règles nftables qui bloquent le trafic routé. ⚠️
J'ai récemment acheté une licence du tout nouveau VPN Mozilla principalement car je trouve que c'est un bon moyen de soutenir la fondation.
Pour le moment le client VPN est compatible avec Windows 10, macOS, Android, iOS et Ubuntu. Ce qui est déjà pas si mal mais pas suffisant pour moi dans le sens ou j'utilise ArchLinux. J'ai donc créé dans mon réseau une passerelle VPN sous Ubuntu pour me permettre d'utiliser le VPN avec des machines non compatibles.
⚠️ La licence Mozilla VPN permet de connecter jusqu'à 5 périphériques. Le but ici n'est pas de contourner cette limite. ⚠️
⚠️ Le VPN Mozilla fonctionne sur les versions d'Ubuntu Focal Fossa 20.04 et Bionic Beaver 18.04 uniquement.
user@ubuntu:~$ sudo add-apt-repository ppa:mozillacorp/mozillavpn
user@ubuntu:~$ sudo apt-get update
user@ubuntu:~$ sudo apt-get install mozillavpn
user@ubuntu:~$ mozillavpn
user@ubuntu:~$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
net.ipv4.ip_forward=1
user@ubuntu:~$ sudo sysctl -p
user@ubuntu:~$ sudo iptables -t nat -A POSTROUTING -o moz0 -j MASQUERADE
user@ubuntu:~$ ip -6 addr sh
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet6 2001:db8::/64 scope global dynamic mngtmpaddr
valid_lft 86187sec preferred_lft 14187sec
inet6 fe80::fe80::aaff:874a:dead:beef/64 scope link
valid_lft forever preferred_lft forever
user@ubuntu:~$ echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/forwarding
net.ipv6.conf.all.forwarding=1
user@ubuntu:~$ sudo sysctl -p
user@ubuntu:~$ sudo ip6tables -t nat -A POSTROUTING -o moz0 -j MASQUERADE
Ici on pourra au choix router l'intégralité du trafic ou utiliser le Port Based Routing, qui consiste à ne router uniquement que certains protocoles à passer par notre passerelle Ubuntu.
PBR consiste à marquer les trames que l'on veut router sur vers notre passerelle VPN. Seules les trames marquées avec la valeur 0x80 passeront par le VPN.
root@arch:~# echo "200 vpn" >> /etc/iproute2/rt_tables
root@arch:~# ip rule add fwmark 0x80 table vpn
root@arch:~# ip route add default via 172.31.0.200 dev ens160 table vpn
root@arch:~# ip route list table vpn default via 172.31.0.200 dev ens160
Pour cet exemple nous marquerons les flux http et https.
root@arch:~# nft add chain ip filter MANGLE { type route hook output priority -150\; policy accept \; }
root@arch:~# nft add rule ip filter MANGLE tcp dport { 80, 443 } ip daddr \!= { 172.31.0.0/24, 10.0.0.0/24 } meta mark set 0x80 counter
root@arch:~# nft add rule ip filter MANGLE tcp sport \>= 1024 ip daddr \!= { 172.31.0.0/24, 10.0.0.0/24 } meta mark set 0x80 counter
root@arch:~# nft add rule ip filter MANGLE udp sport \>= 1024 ip daddr \!= { 172.31.0.0/24, 10.0.0.0/24 } meta mark set 0x80 counter
Plus simple, on peut simplement router tout le traffic vers la passerelle VPN :
root@arch:~# route del default
root@arch:~# route add default via 172.31.0.200 dev ens160
root@arch:~# curl ipinfo.io/ip
root@arch:~# ip -6 route del default
root@arch:~# ip -6 route add default via fe80::aaff:874a:dead:beef dev ens160 metric 1
root@arch:~# telnet -6 ipv6.telnetmyip.com
Contact :