J'en profite pour partager mes derniers évolutions pour rendre le tutoriel plus robuste et un peu adapté à Arch Linux.
Tout d'abord la configuration de connexion au VPN:
float
client
dev tun
proto udp
remote vpn01.my-seedbox.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
;Ignore le routage fourni par le serveur
route-nopull
;Scripts locaux gérant les routes et le client torrent
;Niveau 3 pour permettre la gestion de rtorrent
script-security 3
up /etc/openvpn/up.sh
;down-pre car le script down.sh utilise des variables environnement qui n existent plus VPN déconnecté
down-pre
down /etc/openvpn/down.sh
...
J'ai modifié le script up pour qu'il utilise des variables d'environnement d'OpenVPN ($dev et $ifconfig_local), je trouve que c'est plus robuste et plus "automatique", et j'ai crée des variables pour les paramètres plus personnels (ports...)
J'ai également ajouté quelques lignes qui étaient dans le tuto dans le script, car certains éléments étaient perdu au reboot.
#! /bin/sh
# This script enables policy routing after the tunnel interface is brought up
# Policy routing is used to make sure response packets go through the tunnel interface
# This is mandatory when your ISP has setup anti-spoofing filters
# Variables
torrentPortUDP="6981"
torrentPortTCP="6981"
VPNPort="1194"
VPNLookup="192.168.0.1"
# Add lookup
ifconfig lo:1 inet ${VPNLookup} netmask 255.255.255.255 up
# Add SERVICES
iptables -N SERVICES
# Add a default route via tun0 into the VPN routing table
ip route add default dev $dev table VPN
# Pass traffic from lo:1 (192.168.0.1) to the VPN routing table, using policy routing ("ip rule" commands)
ip rule add from ${VPNLookup}/32 table VPN
# Pass traffic from tur0 IP address to the VPN routing table
ip rule add from $ifconfig_local/32 table VPN
#On ajoute les regles iptables pour faire le NAT
# Source NAT and destination NAT rules to make sure the incoming and ougoing packets on 192.168.0.1
iptables -A PREROUTING -t nat -i $dev -p tcp --dport ${VPNPort} -j DNAT --to ${VPNLookup}
iptables -A PREROUTING -t nat -i $dev -p udp --dport ${VPNPort} -j DNAT --to ${VPNLookup}
iptables -A POSTROUTING -t nat -o $dev -j MASQUERADE
# Allow session continuation traffic
iptables -A INPUT -i $dev -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow Bittorrent traffic via tun0
iptables -A SERVICES -p tcp --dport ${torrentPortTCP} -j ACCEPT # rTorrent random range
iptables -A SERVICES -p udp --dport ${torrentPortUDP} -j ACCEPT # DHT
# Disallow BitTorrent traffic via eth0 - Just to be extra safe ;)
iptables -A FORWARD -s ${VPNLookup}/32 -o eth0 -j DROP
# Start rTorrent service
systemctl start rtorrent.service
Pour le script down.sh, même combat, mais il défait tout ce que le script up a fait:
#! /bin/sh
# This script disables policy routing before the tunnel interface is brought down
# Variables
torrentPortUDP="6981"
torrentPortTCP="6981"
VPNPort="1194"
VPNLookup="192.168.0.1"
# Stop rTorrent service
systemctl stop rtorrent.service
#On efface les règles iptables ajoutées
iptables -D FORWARD -s ${VPNLookup}/32 -o eth0 -j DROP
iptables -D SERVICES -p udp --dport ${torrentPortUDP} -j ACCEPT # DHT
iptables -D SERVICES -p tcp --dport ${torrentPortTCP} -j ACCEPT # rTorrent random range
iptables -D INPUT -i $dev -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -D POSTROUTING -t nat -o $dev -j MASQUERADE
iptables -D PREROUTING -t nat -i $dev -p udp --dport ${VPNPortUDP}} -j DNAT --to ${VPNLookup}
iptables -D PREROUTING -t nat -i $dev -p tcp --dport ${VPNPort} -j DNAT --to ${VPNLookup}
# Remove rule for the secondary loopback IP address (192.168.1.1)
ip rule del from ${VPNLookup}/32 table VPN
# Remove rule for tun0 IP address
ip rule del from $ifconfig_local/32 table VPN
# Remove SERVICES
iptables -X SERVICES
# Remove lookup interface
ifconfig lo:1 inet ${VPNLookup} netmask 255.255.255.255 down
Il ne me manque que le bind automatique au lancement de rtorrent.