routage vpn avec plusieurs interfaces

Paramétrer le Raspberry Pi B/B+ pour se connecter via Ethernet ou une clé WiFi USB

Modérateurs : Francois, maxty01

Répondre
darkprocess
Messages : 4
Enregistré le : sam. 14 mars 2015 23:02

routage vpn avec plusieurs interfaces

Message par darkprocess » sam. 14 mars 2015 23:09

Bonjour

mon RPi dessert deux points d'accès vis hostapd (wlan0 et wlan0_0) qui sont des adresses différentes (192.168.42.0/24 pour wlan0 et 192.168.43.0/24 pour wlan0_0)

la connection au net se fait via eth0.
J'ai aussi une connexion vpn ppp qui sort par eth0.

je voudrait que le traffic de wlan0 sorte par eth0 et celui de wlan0_0 sorte par la connexion ppp qui se nomme ppp0.

voici la config iptable que j'ai en place

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i ppp0 -o wlan0_0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0_0 -o ppp0 -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

Malheureusement tout mon traffic sort à travers ppp0

Merci pour votre aide.

maxty01
Modérateur
Messages : 790
Enregistré le : dim. 16 nov. 2014 20:53
Localisation : Charleroi - Belgique

Re: routage vpn avec plusieurs interfaces

Message par maxty01 » dim. 15 mars 2015 12:22

Bonjour,

Pour mieux me rendre du compte du problème, je vais te demander de me donner le résultat de ces commandes :

Code : Tout sélectionner

pi@raspberrypi ~ $ sudo iptables -L -nv
et

Code : Tout sélectionner

pi@raspberrypi ~ $ sudo iptables -t nat -L -nv
Je te demande cette information car il faut savoir que iptables, tout comme n'importe quel firewall,
travaille par ordre de priorité, ou plus précisément, le firewall va activer la première règle qui correspond au trafic et ce de haut en bas.

Et je pense, sans trop me tromper, que c'est ce qui se passe chez toi.

Si dans ton cas, tu entres tes règles comme ceci :
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Ton trafic sortira toujours par ton interface ppp0 et jamais par ton eth0.

De plus, il n'est pas courant de voir plus d'une règle postrouting avec un jump en masquerade.
C'est plus utilisé dans le cas où plusieurs connexions internet sont utilisées, mais cette technique est plus complexe à mettre en œuvre.

Plusieurs solutions sont possible :

Soit tu n'utilises qu'une seule connexion internet, et tu enlèves la règle masquerade inutile et tu laisses travailler ton routage.

Soit tu augmentes les paramètres de une ou toutes tes masquerade avec ces conseils:
Plus une règle est "discriminatoire", plus haut elle doit se trouver dans la priorité des règles
Plus une règle est "générale", plus bas elle doit se trouver dans la priorité des règles (voir l'exemple plus bas).

Exemple :
sur mon routeur/firewall linux, je veux bloquer le trafic sortant d'un PC précis :

Cette solution ne fonctionnera pas :
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -s 192.168.129.2 -j DROP
Car la règle la plus "discriminatoire" est après la règle la plus généraliste.

Cette solution fonctionnera comme prévu :
iptables -A FORWARD -i wlan0 -o eth0 -s 192.168.129.2 -j DROP
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
Car la règle la plus "discriminatoire" est avant la règle la plus généraliste.

Le mieux est d'utiliser les commandes que je t'ai donné plus haut et de faire l'exercice manuellement afin de savoir quelles règles ton firewall va activer pour ton trafic.

Si tu as des questions, n'hésite pas.
J'espère que ces informations te seront utiles.

Bonne journée,
Il n'y a pas de question stupide, il n'y a que des imbéciles qui ne posent pas de question !
RaspBerry Pi : 1 x B+ Raspbian 1 x RPI2 MiniBian
Mieux me connaître ? Regarder mon LinkedIn

darkprocess
Messages : 4
Enregistré le : sam. 14 mars 2015 23:02

Re: routage vpn avec plusieurs interfaces

Message par darkprocess » dim. 15 mars 2015 18:00

Bonjour voici le logs demandés :

root@Pi-AP ~ # iptables -L -nv
Chain INPUT (policy ACCEPT 257K packets, 49M bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 24955 packets, 9909K bytes)
pkts bytes target prot opt in out source destination
18013 14M ACCEPT all -- ppp0 wlan0_0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
14819 2624K ACCEPT all -- wlan0_0 ppp0 0.0.0.0/0 0.0.0.0/0
155 43059 ACCEPT all -- eth0 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
87 19082 ACCEPT all -- wlan0 eth0 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT 214K packets, 52M bytes)
pkts bytes target prot opt in out source destination


root@Pi-AP ~ # iptables -t nat -L -nv
Chain PREROUTING (policy ACCEPT 99077 packets, 13M bytes)
pkts bytes target prot opt in out source destination

Chain INPUT (policy ACCEPT 94548 packets, 13M bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 19450 packets, 1805K bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 14 packets, 974 bytes)
pkts bytes target prot opt in out source destination
4661 514K MASQUERADE all -- * ppp0 0.0.0.0/0 0.0.0.0/0
17965 1486K MASQUERADE all -- * eth0 0.0.0.0/0 0.0.0.0/0

Le but de mon projet est d'avoir un AP qui sort par ma liaison eth0 et l'autre par la liaison vpn ppp0.
ma frambolise emulant deux AP wifi.

Merci encore

maxty01
Modérateur
Messages : 790
Enregistré le : dim. 16 nov. 2014 20:53
Localisation : Charleroi - Belgique

Re: routage vpn avec plusieurs interfaces

Message par maxty01 » dim. 15 mars 2015 20:50

Bonsoir,

Merci pour les informations.

La première chose que je remarque, c'est les règles inutiles ...
Actuellement toutes tes règles FORWARD sont inutile, et pour cause, ton iptables est configuré pour laisser tout passer :
...
Chain FORWARD (policy ACCEPT 24955 packets, 9909K bytes)
...
La policy ACCEPT est la dernière règle que iptables va lire pour laisser passer ou non ton trafic.
Pour un firewall Linux, tu trouvera toujours cette règle en DROP ou plus rarement en REJECT.
Le REJECT est utiles lors du débugage car cette règle informe le périphérique réseau que sont paquet n'est pas passé.

La deuxième chose que je remarque et que je n'ai pas remarqué à ma première lecture de ton premier post,
c'est l'utilisation de "-m state --state RELATED,ESTABLISHED -j ACCEPT".
Attention, je ne dis pas que c'est pas une bonne chose, elle est juste mal utilisée.

Traditionnellement, on utilise les "states" pour épargner du calcul à notre firewall, et oui, un firewall, ca consomme du CPU et de la RAM.
Elle s'utilise comme première règle dans iptables comme ceci :
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

De mon coté, j'utilise cette formule qui est équivalente :
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Grâce à cette règle, tu rend ton firewall "Stateful", (suivre le lien pour en savoir plus)
ce qui te permet, comme je le disais plus haut, d'économiser des resources, mais également de ne pas écrire certaines règles "retour".

Revenons à nos moutons et surtout à ton POSTROUTING.
Comme je l'expliquais plus haut, ton problème est le manque de discrimination dans tes règles et la position de ces dernières.

Je te conseil d'effacer toutes tes règles et de mettre en premier la règle du ppp0 avec ceci comme discrimination :
iptables -t nat -A POSTROUTING -o ppp0 -d 192.168.43.0/24* -j MASQUERADE
*mettre le réseau de destination correct.
Et la seconde avec moins de paramètres (et donc plus générale) :
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

En détails (lis bien tout les mots, chacun d'eux ainsi que leur emplacement à de l'importance) :
Toute ce qui arrivera sur n'importe quelle interface, avec n'importe quelle adresse source et à destination du réseau 192.168.43.0/24* sera redirigé vers l'interface ppp0 et l'adresse source sera changée par l'adresse de ppp0.
*mettre le réseau de destination correct.
Et tout ce qui arrivera sur n'importe quelle interface, avec n'importe quelle adresse source et à destination de n'importe quel réseau (0.0.0.0/0) sera redirigé vers l'interface eth0 et l'adresse source sera changée par l'adresse de eth0.

Ha oui : " ... l'adresse source sera changée par l'adresse de eth0." C'est ce qu'on appel du Nating.

Aussi, si cela ne règle résous pas ton problème, peux-tu nous donner plus de détails les différents adresses IP ou encore un schéma de ton projet afin de t'aider au mieux.

J'espère que ces information t'aiderons,

Bonne soirée,
Il n'y a pas de question stupide, il n'y a que des imbéciles qui ne posent pas de question !
RaspBerry Pi : 1 x B+ Raspbian 1 x RPI2 MiniBian
Mieux me connaître ? Regarder mon LinkedIn

darkprocess
Messages : 4
Enregistré le : sam. 14 mars 2015 23:02

Re: routage vpn avec plusieurs interfaces

Message par darkprocess » dim. 15 mars 2015 23:17

Bonjour

J'ai essayé mais la ça ne NAT plus.
Je n'ai pas besoins de règle DROP pour le moment, je les mettrai en place une fois tout fonctionnera.

Ma framboise est connecté en eth0 a ma livebox.
J ai une connexion ppp vers un VPN sur un autre pays. (USA) (interface ppp0)

Via Hostapd ma framboise, propose 2 AP Wifi.
l'un en 192.168.42.1 réseau 192.168.42.0/24 ==> AP_Stream (Interface wlan0)
l'autre en 192.168.43.1 réseau 192.168.42.0/24 ==> AP_VPN (Interface wlan0_0)

L'idée est d'utiliser chaque AP en fonction de l'usage que l'on veut en faire.
Par exemple, d'avoir le stream NetFlix US à travers AP_VPN et le stream NetFlix France à travers AP_Stream

Ma connexion ppp insere une route lors de sa connexion. Je me demande si ceci explique pourquoi tout le traffic passe par ppp0

Merci encore pour votre l'aide

darkprocess
Messages : 4
Enregistré le : sam. 14 mars 2015 23:02

Re: routage vpn avec plusieurs interfaces

Message par darkprocess » mer. 18 mars 2015 22:51

Bonjour

J'ai finalement trouvé une solution et cela fonctionne parfaitement. reste maintenant à tout sécuriser

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

iptables -A PREROUTING -t mangle -m iprange --src-range 192.168.43.2-192.168.43.254 -j MARK --set-mark 1
ip route flush table 1
ip rule add fwmark 1 lookup 1
ip route add default dev ppp0 table 1
ip route flush cache

merci encore pour vos conseils

Répondre

Retourner vers « Le réseau sur le Raspberry Pï »