Forum d'entraide de la communauté Freedom-IP VPN
Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à tous,
Tout d’abord, désolé pour la tartine..
Après avoir pas mal galéré depuis hier pour mettre en place cette solution je m'en remet à vous !
D'après tout ce que j'ai pu lire sur internet, je n'en suis pas loin, mais il y a toujours quelque chose qui bloque....
Mon problème est le suivant :
Actuellement je peux soit être connecté au VPN (pptp) et rediriger tout mon traffic par l'interface ppp0 créée par le daemon, soit ne pas être connecté et tout mon traffic passe par l'interface eth0.
Je voudrais pouvoir être connecté en permanence au vpn et rediriger uniquement le traffic de certaines applications via l’interface ppp0.
Les distributions récentes n'autorisant plus le filtrage par PID, je lance donc mes applications avec un utilisateur différent, afin de filtrer par UID.
Ma config :
Machine / OS : RaspberryPI 2 sous raspbian jessie
Connexion à FIP : pptp
Voici l'état de ma connexion AVANT d'être connecté au VPN :
$ ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:74:93:0e
inet adr:192.168.0.122 Bcast:192.168.0.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:34139 errors:0 dropped:0 overruns:0 frame:0
TX packets:37830 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:4361590 (4.1 MiB) TX bytes:11030373 (10.5 MiB)
lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1337 errors:0 dropped:0 overruns:0 frame:0
TX packets:1337 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:368707 (360.0 KiB) TX bytes:368707 (360.0 KiB)
$ ip route list table main
default via 192.168.0.1 dev eth0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.122 metric 202
$ ip route list table novpn
$ sudo iptables -L -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
$ sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
$ sudo iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
$ ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Ensuite lorsque je me connecte à FIP :
$ sudo pon nl_fip
$ ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:74:93:0e
inet adr:192.168.0.122 Bcast:192.168.0.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:39118 errors:0 dropped:0 overruns:0 frame:0
TX packets:43037 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:4946494 (4.7 MiB) TX bytes:12216270 (11.6 MiB)
lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1529 errors:0 dropped:0 overruns:0 frame:0
TX packets:1529 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:423803 (413.8 KiB) TX bytes:423803 (413.8 KiB)
ppp0 Link encap:Protocole Point-à-Point
inet adr:10.99.0.44 P-t-P:10.99.0.1 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:3
RX bytes:1052 (1.0 KiB) TX bytes:19308 (18.8 KiB)
$ ip route list table main
default dev ppp0 scope link
default via 192.168.0.1 dev eth0
10.99.0.1 dev ppp0 proto kernel scope link src 10.99.0.44
178.33.89.168 via 192.168.0.1 dev eth0 src 192.168.0.122
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.122 metric 202
$ ip route list table novpn
$ sudo iptables -L -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
$ sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
$ sudo iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
$ ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
(l'IP publique de ma connexion est bien celle du VPN)
Je définis ensuite mes règles iprule/iproute/iptables comme ça afin de faire transiter tous les paquets via la table de routage novpn, sauf ceux qui seront marqués (en fonction de l'utilisateur) pour transiter via la table main (qui route bien vers le VPN comme on a pu le voir plus haut)
$ sudo ip rule add fwmark 0 table novpn
$ sudo ip rule add fwmark 2 table main
$ sudo ip route add default via 192.168.0.1 dev eth0 table novpn
$ sudo ip route add 192.168.0.0/24 src 192.168.0.122 dev eth0 table novpn
$ sudo iptables -t mangle -A PREROUTING -j MARK --set-mark 0
$ sudo iptables -t mangle -A OUTPUT --match owner --uid-owner vpnuser -j MARK --set-mark 2
$ sudo iptables -A OUTPUT --match mark --mark 2 --out-interface eth0 -j DROP
Ce qui me donne le résultat suivant :
$ ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:74:93:0e
inet adr:192.168.0.122 Bcast:192.168.0.255 Masque:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:42211 errors:0 dropped:0 overruns:0 frame:0
TX packets:45990 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:5318327 (5.0 MiB) TX bytes:13009663 (12.4 MiB)
lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1653 errors:0 dropped:0 overruns:0 frame:0
TX packets:1653 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:459527 (448.7 KiB) TX bytes:459527 (448.7 KiB)
ppp0 Link encap:Protocole Point-à-Point
inet adr:10.99.0.44 P-t-P:10.99.0.1 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1496 Metric:1
RX packets:54 errors:0 dropped:0 overruns:0 frame:0
TX packets:745 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:3
RX bytes:3383 (3.3 KiB) TX bytes:132632 (129.5 KiB)
$ ip route list table main
default dev ppp0 scope link
default via 192.168.0.1 dev eth0
10.99.0.1 dev ppp0 proto kernel scope link src 10.99.0.44
178.33.89.168 via 192.168.0.1 dev eth0 src 192.168.0.122
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.122 metric 202
$ ip route list table novpn
default via 192.168.0.1 dev eth0
192.168.0.0/24 dev eth0 scope link src 192.168.0.122
$ sudo iptables -L -t filter
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere mark match 0x2
$ sudo iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
$ sudo iptables -L -t mangle
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
MARK all -- anywhere anywhere MARK and 0x0
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
MARK all -- anywhere anywhere owner UID match vpnuser MARK set 0x2
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
$ ip rule
0: from all lookup local
32764: from all fwmark 0x2 lookup main
32765: from all lookup novpn
32766: from all lookup main
32767: from all lookup default
Et là, les choses se gâtent...
L'IP publique de ma connexion est bien ma vraie IP publique lorsque je ne suis pas connecté en tant que vpnuser.
Lorsque je suis connecté en tant que vpnuser, je n'ai pas de traffic.
En activant les logs correspondants aux filtres, je me suis aperçu que l'ensemble des paquets en provenance de vpnuser étaient bien marqués, mais qu'ils étaient dropés.
J'ai donc désactivé la règle qui drop les paquets marqués, ce qui m'a permis de m’apercevoir qu'ils n'étaient pas routés vers le vpn.
Ce qui me parait logique maintenant, car pour qu'ils soient routés en fonction du marquage, ils doivent êtres marqués dans la chain PREROUTING de la table mangle (d'après le man iptables-extensions) .
Sauf que, d'après le dmesg l'option --match owner ne fonctionne que dans la chain OUTPUT...
$ sudo iptables -t mangle -A PREROUTING --match owner --uid-owner vpnuser -j MARK --set-mark 2
$ dmesg
[11730.149978] x_tables: ip_tables: owner match: used from hooks PREROUTING, but only valid from OUTPUT/POSTROUTING
Help
Et merci d'avance aussi ^^
Dernière modification par skuizy (2015-11-03 20:00:55)
Hors ligne
Bonjour ...
Il est normal que le marquage d'un paquet se fasse sur Filter / Output, puisqu'il est défini par l'ID utilisateur ou celui du groupe de la machine locale. Tout ce qui sort de votre machine (les applications ou services) passe obligatoirement par Filter / Outpout.
Cordialement, David.
Hors ligne
Malheureusement, d'après ce que je comprends et ce que je constate, le marquage fait sur Filter / Output intervient après le routage... et ne sert donc à rien dans mon cas...
Lorsque je configure mes iptables comme ceci :
sudo iptables -A OUTPUT --match owner --uid-owner vpnuser -j MARK --set-mark 2
Le trafic passe bien, mais la commande suivante me renvoie ma vraie IP publique :
curl http://api.ipify.org
Hors ligne
Re ...
Vous mettez des routes pour les "Non VPN" mais aucune n'est défini pour "VPN" !!?
Et désolé, ce n'est pas la table Filter mais Mangle ...
Hors ligne
Peut-être que le problème vient de là... Je n'ai effectivement défini explicitement aucune route pour les paquets VPN, mais ces routes sont définis dans la table de routage main au moment de la connexion au vpn. Cela ne suffit pas ? Etant donné que les paquets marqués 2 sont redirigés vers cette table main...
Le résultat est le même que la règle soit définie sur mangle/OUTPUT ou mangle/PREROUTING...
Merci en tous cas de vous donner du mal pour m'aider à résoudre ce problème
Hors ligne
Re ...
Et quelles sont les règles IP définies lors de la connexion au VPN !? Elles sont de ce type :
sudo ip route add default dev tun0 table main
Hors ligne
Celles créées par pppd et, comme indiqué dans l'OP, sont les suivantes :
10.99.0.1 dev ppp0 proto kernel scope link src 10.99.0.44
178.33.89.168 via 192.168.0.1 dev eth0 src 192.168.0.122
Je rajoute via un script ip-up.d la suivante :
default dev ppp0 scope link
Je n'ai pas d'interface tun0 cependant, mais une ppp0.
Hors ligne
ip route add default dev ppp0 table main
Hors ligne
route add default dev ppp0
Hors ligne
ip rule add fwmark 0 table novpn
ip rule add fwmark 2 table vpn
ip route add default via 192.168.0.1 dev eth0 table novpn
ip route add 192.168.0.0/24 src 192.168.0.122 dev eth0 table novpn
iptables -t mangle -A OUTPUT -j MARK --set-mark 0
iptables -t mangle -A OUTPUT --match owner --uid-owner vpnuser -j MARK --set-mark 2
ip route add default dev $1 table vpn
iptables -I OUTPUT 1 -s 0.0.0.0/0 -d $5/32 -j ACCEPT -o $1
iptables -I INPUT 1 -s $5/32 -d 0.0.0.0/0 -j ACCEPT -i $1
iptables -I FORWARD 1 -s 0.0.0.0/0 -d $5/32 -j ACCEPT -o $1
iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Dernière modification par skuizy (2015-11-03 20:00:29)
Hors ligne
Pages : 1