web-dev-qa-db-fra.com

Deux cartes réseau et routage entre les interfaces

J'ai un problème avec un serveur Ubuntu qui exécute deux cartes réseau sur deux sous-réseaux différents et qui tourne entre eux. Nous utilisons un serveur Nginx en tant que proxy inverse avec un sous-réseau public et un sous-réseau privé.

Nous courons le serveur Ubuntu 15.04.

Voici la configuration:

eth0      Link encap:Ethernet  HWaddr 00:50:56:88:6e:91
          inet addr:89.21.20.14  Bcast:89.21.20.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fe88:6e91/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:89152 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1729 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5552124 (5.5 MB)  TX bytes:286442 (286.4 KB)

eth1      Link encap:Ethernet  HWaddr 00:50:56:88:16:0b
          inet addr:10.150.200.50  Bcast:10.150.200.255  Mask:255.255.255.0
          inet6 addr: fe80::250:56ff:fe88:160b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:549 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:53395 (53.3 KB)  TX bytes:1908 (1.9 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:12960 (12.9 KB)  TX bytes:12960 (12.9 KB)

J'ai la passerelle sur eth0.

Lorsque j'essaie d'envoyer un ping 89.21.20.14 à partir d'un serveur sur un sous-réseau 10.150.200.xx, il ne fonctionne pas et je ne peux pas communiquer avec lui. Le trafic frappe eth0 comme je peux le voir sur

Sudo tcpdump -i eth0 proto \\icmp

J’ai aussi essayé de faire la même chose depuis un serveur en 89.21.20.xx et un accès/ping 10.150.200.50, mais cela ne se fait pas non plus. Quand je lance tcpdump, je peux voir les pings frapper eth1

Le problème est que nous avons des sites Web fonctionnant sur les serveurs Web de sous-réseaux privés et qu'ils référencent des domaines qui pointent vers les adresses IP publiques sur 89.21.20.xx et ne peuvent donc pas communiquer avec les sites/applications.

Je pense que c’est un problème de routage, mais vous ne savez pas trop par où commencer?

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         89.21.24.1      0.0.0.0         UG        0 0          0 eth0
10.150.200.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
89.21.20.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0



Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         89.21.20.1      0.0.0.0         UG    0      0        0 eth0
10.150.200.0    *               255.255.255.0   U     0      0        0 eth1
localnet        *               255.255.255.0   U     0      0        0 eth0
2
John Fox

Vous indiquez dans les commentaires que vous ne voulez pas traverser le sous-réseau. Vous avez déjà ceci, alors, avec l'impossibilité d'atteindre eth0 de eth1 et vice-versa, votre problème est donc déjà résolu.

Si vous avez une autre question, cependant, vous devez être plus précis avec ce que vous demandez. (Le proxy inverse se produit de manière transparente, vous ne pourrez pas atteindre eth0 à partir de eth1 ou vice-versa, non sans passer par nginx sur le serveur proxy inverse).


Le ci-dessous est conservé pour des raisons historiques.

Je suis curieux de savoir pourquoi ceci est étiqueté nginx , parce que ce n'est pas un problème de NGINX, mais que vous essayez de passer de l'intérieur (eth1 et du sous-réseau interne) à l'extérieur (eth0 et Internet public) sans routeur (ni système configuré en tant que routeur) ni règle permettant à votre "serveur" d'agir en tant que proxy de l'intérieur -> à l'extérieur (ce qui n'est PAS un proxy inverse) .

NGINX n'est pas un proxy ou un routeur. Un proxy inverse dira "OK, alors envoyez cette demande au backend, abc." Ensuite, il sera écrit "ABC: Envoyez-moi la réponse", ce qui enverra la demande initiale faite de l'extérieur au serveur interne. Cela vous donne alors la réponse du backend 'abc' sur le serveur nginx. Cela est renvoyé par nginx au client demandeur.

Un proxy inverse fonctionne également uniquement à l'extérieur -> à l'intérieur. Ce diagramme montre essentiellement à quoi ça ressemble de l'extérieur à l'intérieur:

Hastily Drawn Diagram by Thomas W.

Le chemin inverse fonctionne, mais uniquement parce que le système de proxy inverse (nginx) attend la réponse du serveur, puis renvoie ces données au navigateur Web ou au client distant qui effectue la demande d'informations et attend une réponse.

Le chemin inverse, cependant, ne vous permet PAS de passer de eth1 sur le proxy inverse à eth0 sur le proxy inverse via le système de proxy distant. Ce n'est pas ainsi que fonctionne le routage IP. cherchez à obtenir, vous avez besoin d’un routeur réel capable de gérer la traversée du réseau depuis les adresses IP internes vers l’extérieur, puis de revenir à l’adresse IP publique de eth0 sur la boîte de proxy inverse, donc cela ressemblerait à ceci:

the router way, another diagram by Thomas W.

La traversée de données ici, alors, proviendrait des boîtes internes, du routeur auquel elles sont connectées, d’Internet, puis d’Internet vers votre boîte eth0. (Le moyen le plus simple d’expliquer cela bien sûr).

Cependant, votre boîte de proxy inverse et non == double un routeur, elle ne fonctionne donc pas comme vous le pensez .


D'un autre côté:

Vous ne recevez pas de ping depuis interne (qui passe à eth1) à eth0 directement, qui se trouve sur un sous-réseau complètement différent sauf si vous passez par un routeur réel et que vous sortez puis revenez dedans. Sauf si vous configurez votre serveur sur lequel nginx est également un routeur, ce qui, d'après vos commentaires, semble ne pas être le cas. Donc, ceci "n'est pas capable de faire un ping à travers des interfaces et des sous-réseaux" est comportement attendu .

1
Thomas Ward