Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 08-04-2017 20:10:58

Hassassin
Membre
Distrib. : Serveur : Debian 9 / Perso : MATE Ubuntu 16.10
Noyau : Serveur : 4.9.0-1-amd64 / Perso : 4.8.0-41-generic
(G)UI : Serveur : null / Perso : Compiz
Inscription : 21-06-2011

[RESOLU] Requête externe impossible si connecté en VPN

Bonjour,

Il m'est impossible de me connecter depuis l’extérieur à mon serveur perso (debian 9) lorsque celui-ci est connecté à un serveur VPN. Quand je stop openVPN tout rentre dans l'ordre et je peux de nouveau accéder à ma machine http://ma-machine.
Je compare les règles de routage de ma machine quand le VPN est activé et quand il est désactivé mais sans trop comprendre les résultats retournés par la commande "ip route show".
Vous l'aurez probablement compris, je cherche à me connecter à ma machine même quand ce dernier est connecté au VPN.

L'ip local de ma machine est 192.168.0.150 et ma passerelle 192.168.0.254.

Connexion VPN arrêtée


ip route show
 


default via 192.168.0.254 dev eth0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.150
 


Connexion VPN établie


ip route show
 


0.0.0.0/1 via 10.181.71.5 dev tun0
default via 192.168.0.254 dev eth0
10.181.71.1 via 10.181.71.5 dev tun0
10.181.71.5 dev tun0 proto kernel scope link src 10.181.71.6
128.0.0.0/1 via 10.181.71.5 dev tun0
185.84.181.99 via 192.168.0.254 dev eth0
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.150


Mon iptables temporaire (vierge pour ne pas accumuler les problèmes)

iptables -L



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
 


Merci d'avance pour l'aide que vous pourriez m'apporter.

Dernière modification par Hassassin (11-04-2017 09:17:36)

Hors ligne

#2 09-04-2017 00:45:02

raleur
Membre
Inscription : 03-10-2014

Re : [RESOLU] Requête externe impossible si connecté en VPN

Le programme qui monte le VPN crée entre autres les deux routes suivantes :

0.0.0.0/1 via 10.181.71.5 dev tun0
128.0.0.0/1 via 10.181.71.5 dev tun0


Elles ont pour effet de détourner la route par défaut pour la faire passer par le VPN au lieu du routeur du LAN.
Quand la machine reçoit un paquet de l'extérieur sur son interface ethernet eth0 via le routeur, elle y répond en envoyant un paquet par l'interface VPN tun0, via le routeur qui est à l'autre bout, sur le serveur VPN. Comme ces deux interfaces ont des adresses IP privées, chacun de ces deux routeurs fait forcément du NAT avec une adresse IP publique différente. La machine extérieure a envoyé un paquet à destination d'une adresse IP publique du routeur du LAN, et reçoit un paquet dont la source est une adresse IP publique du serveur VPN. Ça ne peut pas marcher, car la plupart des protocoles tablent sur le fait que la source de la réponse est identique à la destination de la requête.

Pour l'éviter, il va falloir faire du routage avancé. Ici un simple routage basé sur la source sera suffisant pour envoyer par l'interface eth0 les paquets sortants dont l'adresse source est celle d'eth0.

ip rule add from 192.168.0.150 table 99
ip route add 192.168.0.0/24 dev eth0 table 99
ip route add default via 192.168.0.254 dev eth0 table 99

Dernière modification par raleur (09-04-2017 00:45:16)

Hors ligne

#3 11-04-2017 09:17:10

Hassassin
Membre
Distrib. : Serveur : Debian 9 / Perso : MATE Ubuntu 16.10
Noyau : Serveur : 4.9.0-1-amd64 / Perso : 4.8.0-41-generic
(G)UI : Serveur : null / Perso : Compiz
Inscription : 21-06-2011

Re : [RESOLU] Requête externe impossible si connecté en VPN

Merci pour la réponse. En recopiant bêtement les commandes, ça marche parfaitement.
Maintenant il ne me reste plus qu'à me documenter pour bien comprendre l'usage d'ip rule et route.

Hors ligne

#4 11-04-2017 10:35:11

raleur
Membre
Inscription : 03-10-2014

Re : [RESOLU] Requête externe impossible si connecté en VPN

La documentation sur le routage avancé est le "LARTC howto" (Linux Advanced Routing and Traffic Control).

La commande "ip rule" créer une règle de routage (à ne pas confondre avec une route) qui fait router les paquets dont l'adresse source est 192.168.0.150 par les routes de la table de routage 99 (numéro de table libre choisi arbitrairement).
Les commandes "ip route" créent deux routes dans cette table. Ce sont juste des copies de la route de sous-réseau ethernet et de la route par défaut via le routeur de ce sous-réseau qui existent dans la table de routage principale "main".

Effet : lorsque la machine envoie un paquet avec son adresse source 192.168.0.150, elle le route avec la table 99.
Les paquets de réponse aux paquets reçus via le routeur du LAN ont cette adresse source. Cela évite de les renvoyer par le VPN.

La route de sous-réseau peut être nécessaire pour que la machine continue à pouvoir communiquer directement avec les autres machines du sous-réseau. Sinon tout le trafic destiné à ces machines serait envoyé au routeur, qui devrait ensuite le renvoyer vers la machine destinataire.

Hors ligne

Pied de page des forums