1 votes

Comment faire en sorte qu'Apache émette des paquets via une certaine interface réseau lorsqu'il est connecté à un VPN ?

J'ai un serveur apache qui fonctionne parfaitement jusqu'à ce que je me connecte au VPN et que toutes les connexions au serveur soient interrompues.

Si je comprends bien, le problème est le suivant tun0 devient l'interface de sortie par défaut, donc apache ne sait plus comment envoyer les paquets, j'ai donc essayé de résoudre ce problème en utilisant les groupes de contrôle en marquant les paquets sortant d'apache et en les redirigeant vers eth0 comme décrit dans ce Réponse de SU mais il ne fonctionne plus depuis que j'ai mis à jour mon système d'exploitation Ubuntu à la version 16.04. Voici le schéma de mon réseau :

enter image description here

Et voici les détails de mon réseau :

me@mypc:~$ ip route list
0.0.0.0/1 via 10.132.1.5 dev tun0 
default via 192.168.0.1 dev eth0  proto static  metric 100 
10.132.1.1 via 10.132.1.5 dev tun0 
10.132.1.5 dev tun0  proto kernel  scope link  src 10.132.1.6 
123.4.5.6 via 192.168.0.1 dev eth0 
234.5.6.7 via 192.168.0.1 dev eth0 
128.0.0.0/1 via 10.132.1.5 dev tun0 
169.254.0.0/16 dev eth0  scope link  metric 1000 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.6  metric 100 

me@mypc:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:cc:a9:b3:c9:41  
          inet addr:192.168.0.6  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:864897 errors:0 dropped:0 overruns:0 frame:0
          TX packets:467142 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1088053099 (1.0 GB)  TX bytes:220201868 (220.2 MB)
          Interrupt:17 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          ...

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.132.1.6  P-t-P:10.132.1.5  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:46622 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14950 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:60587170 (60.5 MB)  TX bytes:1396546 (1.3 MB)

J'ai fait d'autres tests et j'ai découvert que si j'ajoute cette règle de routage :

sudo route add -host 123.4.5.6 gw 192.168.0.1

Je peux désormais me connecter au serveur à partir de périphériques connectés à mon routeur en utilisant l'adresse IP du routeur. 123.4.5.6 mais pas depuis une autre adresse IP.

Et après avoir configuré les groupes de contrôle sur apache et essayé la commande suivante :

sudo cgexec -g net_cls:novpn wget http://www.whatsmyip.org/

et en vérifiant l'adresse IP dans la page web téléchargée, il s'agirait de l'adresse IP de mon routeur. 123.4.5.6 et pas mon ip vpn 10.132.1.6 .

Je suppose donc que la solution des groupes de contrôle fonctionne d'une manière ou d'une autre mais pas avec apache et les paquets entrants sont reçus avec succès par apache mais rien ne sort.

Comment puis-je configurer apache pour utiliser eth0 pour sortir des paquets au lieu de tun0 ?

3voto

Nath Points 1272

Gérer 2 routes par défaut et faire en sorte que certains trafics passent par l'une et d'autres par l'autre est un gros problème et je vous recommande de l'éviter si possible. Si vous ne voulez pas accéder à l'internet via le VPN, alors votre configuration peut être grandement simplifiée, ce qui résoudrait les problèmes. Avez-vous vraiment besoin d'accéder à Internet via le VPN ? Aussi, quelle est la signification de 10.132.1.5 ? Je ne comprends pas pourquoi vous l'utilisez pour router vers d'autres hôtes dans 10.132.1.x ? vous avez déjà une IP dans ce sous-réseau 10.132.1.x et vous devriez être directement connecté.

donc SI vous ne voulez pas accéder à l'internet via le VPN et qu'il n'y a pas besoin de router via 10.32.1.5, vous pouvez simplifier votre table de routage comme suit :

default via 192.168.0.1 dev eth0  proto static  metric 100 
10.132.1.0/24 dev tun0  proto kernel  scope link  src 10.132.1.6 
169.254.0.0/16 dev eth0  scope link  metric 1000 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.6     metric 100 

Ce qui résoudra également le problème d'apache. Pourquoi seulement ces routes ? Premièrement :

10.132.1.0/24 dev tun0  proto kernel  scope link  src 10.132.1.6 

devrait être le seul itinéraire dont vous avez besoin pour accéder à tous les hôtes de l'autre côté du vpn. Comme cette route correspond aux adresses 10.232.1.0 - 10.232.1.254, s'il y a d'autres adresses 10.x.x.x sur le réseau vpn, vous pouvez élargir la route à 10.0.0.0/8. Si vous ne comprenez pas la signification des bits /8 /24, je vous conseille vivement de lire le document suivant Quelle est la "barre oblique" après l'IP ? ou recherchez sur Google la "notation CIDR". Le bit /32 /1 aura plus de sens.

ces anciennes routes mises ensemble définissent votre route par défaut via le VPN

0.0.0.0/1 via 10.132.1.5 dev tun0 
128.0.0.0/1 via 10.132.1.5 dev tun0

Le fait de le diviser en deux routes (une pour la première moitié de l'Internet et la seconde pour le reste) signifie qu'elles ont une priorité plus élevée car elles sont plus spécifiques que votre route par défaut :

default via 192.168.0.1 dev eth0  proto static  metric 100 

Le problème est que vous devez maintenant ajouter explicitement des routes qui sont encore plus spécifiques, pour forcer le trafic via votre routeur local (192.16.8.0.1).

123.4.5.6 via 192.168.0.1 dev eth0 
234.5.6.7 via 192.168.0.1 dev eth0 

Sans la route par défaut via le VPN, ces routes ne sont pas nécessaires. Si vous avez besoin d'acheminer le trafic via 10.232.1.5 et que vous devez conserver des ensembles de routes par défaut, je vous recommande d'utiliser des règles de route plutôt que de remplacer la route par défaut. Les règles de route sont plus flexibles, mais en général, il s'agit de faire correspondre l'IP source à la passerelle par défaut, de sorte que tout le trafic provenant de votre IP VPN (10.1.232.6) passe par la route par défaut du VPN et que tout le trafic provenant de votre IP locale (192.168.0.6) utilise votre FAI comme route par défaut. https://unix.stackexchange.com/questions/22770/two-interfaces-two-addresses-two-gateways pour un guide sur la façon de le faire.

1voto

Nath Points 1272

Vous avez donc besoin des deux passerelles par défaut ; le moyen d'y parvenir est alors d'utiliser des règles de route :

1) Ajoutez une IP secondaire à eth0 - c'est-à-dire 192.168.1.7 et redémarrez apache (il semble que votre configuration soit la suivante listen 0.0.0.0:80 donc vous devrez juste redémarrer apache pour qu'il écoute sur la nouvelle IP.

2) Changez les règles de Nat sur votre routeur pour diriger le trafic vers cette IP :

3) Créez une nouvelle route par défaut dans une table de route secondaire, nommons la table 'apache' :

echo "1 apache" >> /etc/iproute2/rt_tables

4) Ajoutez une route par défaut à cette table via votre routeur local.

ip route add default via 192.168.0.1 dev eth0 table apache

5) Enfin, vous avez besoin d'une règle pour définir quel trafic doit utiliser la table de route d'Apache.

ip rule add from 192.168.0.7 table apache

192.168.0.7 est une IP secondaire et Apache est le seul processus qui l'utilise. Cette règle ne doit correspondre qu'au trafic sortant d'Apache en réponse aux requêtes web. Cela garantira que seul ce trafic spécifique utilisera la nouvelle table de routage et ne perturbera pas votre trafic VPN ou son comportement de routage actuel.

veuillez noter que le ip Les commandes ne persistent pas après le redémarrage. Pour les rendre persistantes, ajoutez-les à votre interface up scripts pour les faire exécuter à chaque redémarrage de votre ordinateur portable.

P.S. J'ai laissé mon ancienne réponse et j'ai fait ceci comme une nouvelle réponse car c'est une solution très différente.

0voto

Kimberly Points 11

Dites simplement à Apache d'écouter sur plusieurs adresses IP.

Je pense que vous voudrez avoir ces lignes dans votre configuration.

Listen 192.168.0.6:80
Listen 10.132.1.6:80

Cela indique à Apache de se "lier" au port 80 sur chacune de ces adresses IP. Si vous utilisez des hôtes virtuels, vous devrez également ajouter ces lignes à leur configuration.

Sidenote

Si vous n'en utilisez pas, je vous recommande d'utiliser une adresse IP statique sur votre ordinateur. eth0 ainsi que sur le serveur VPN.

Si vous n'êtes pas en mesure de configurer une IP statique sur le VPN, il existe des solutions de contournement. L'une d'entre elles consiste à générer le fichier Listen après s'être connecté au VPN. Ou bien, il existe peut-être une solution propre qui utilise les noms d'hôtes (si vous avez un serveur DNS).

Documentation officielle :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X