Raccordement d’une machine Linux à un routeur secondaire / FAI: comment configurer le routage correctement?

8

Abstrait:

J'ai des problèmes (je présume que le routage) lors de l'ajout d'un fournisseur de services Internet secondaire à la configuration de mon réseau existant: le trafic entrant Router1n'est pas traité, mais le trafic local et le trafic entrant Router0fonctionnent correctement.

Comment faire en sorte que les pièces qui fonctionnent actuellement fonctionnent correctement tout en optimisant le trafic entrant Router1?

Élaboration:

J'ai dessiné un diagramme ci-dessous avec l'essentiel de la situation (en pratique, il y a plus de périphériques sur chaque réseau local, mais cela n'a pas d'importance).

Voici la situation:

  • J'ai deux réseaux internes: LAN0is 192.168.x.0/24et LAN1is 192.168.y.0/24. Les deux fonctionnent correctement pour le trafic interne (par exemple, http utilisant cURL ).
  • LAN0a toujours été connecté par Router0et ISP0à la Internet.
  • LAN1toujours eu Router1, mais est maintenant connecté à travers ISP1le Internet.
  • Les machines uniquement activées LAN0et disposant d'un itinéraire par défaut Router0fonctionnent correctement pour le trafic entrant et sortant.
  • Les machines uniquement activées LAN1et disposant d'un itinéraire par défaut Router1fonctionnent correctement pour le trafic entrant et sortant.
  • Le trafic interne LAN0et LAN1a toujours bien fonctionné.
  • Le trafic entrant arrive correctement Router1car WindowsBje peux me connecter via RDP WindowsC.
  • Le trafic entrant par Router1des LinuxBarrive (selon tcpdump ), mais pas répliqué comme curl http://e.f.g.hFron LinuxCmontre avec tcpdump sur LinuxB des spectacles:

Il montre uniquement les paquets qui - selon le format de sortie de tcpdump - ont un drapeau SYN défini:

LinuxB:/tmp/LinuxB.eth1.80 # tcpdump -i eth1 'port 80'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
13:35:19.489779 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047182 ecr 0,sackOK,eol], length 0
13:35:19.788841 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047478 ecr 0,sackOK,eol], length 0
13:35:19.888835 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047578 ecr 0,sackOK,eol], length 0
13:35:19.989412 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047678 ecr 0,sackOK,eol], length 0
13:35:20.089685 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047778 ecr 0,sackOK,eol], length 0
13:35:20.190836 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287047877 ecr 0,sackOK,eol], length 0
13:35:20.392123 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 1287048072 ecr 0,sackOK,eol], length 0
13:35:20.693692 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:21.197162 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:22.204134 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:24.115961 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:27.852374 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0
13:35:31.967049 IP i.j.k.l.57512 > 192.168.y.2.http: Flags [S], seq 816356596, win 65535, options [mss 1460,sackOK,eol], length 0

Ceci est la LinuxBtable de routage:

LinuxB:/tmp/LinuxB.eth1.80 # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.x.1     0.0.0.0         UG    0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
link-local      *               255.255.0.0     U     0      0        0 eth0
192.168.x.0     *               255.255.255.0   U     0      0        0 eth0
192.168.x.0     *               255.255.255.0   U     0      0        0 eth1

Puisque la connexion via RDP de WindowsCà WindowsBfonctionne bien, je résume qu’il s’agit bien d’un problème de routage. Ceci est la WindowsBtable de routage:

C:\temp>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x2 ...00 0c 29 35 77 e1 ...... AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport
0x3 ...00 0c 29 35 77 eb ...... VMware Accelerated AMD PCNet Adapter - Packet Scheduler Miniport
===========================================================================
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0      192.168.x.1     192.168.x.4      10
          0.0.0.0          0.0.0.0      192.168.y.1     192.168.y.4       5
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
      192.168.x.0    255.255.255.0      192.168.x.4     192.168.x.4      10
      192.168.x.4  255.255.255.255        127.0.0.1       127.0.0.1      10
    192.168.x.255  255.255.255.255      192.168.x.4     192.168.x.4      10
      192.168.y.0    255.255.255.0      192.168.y.4     192.168.y.4      10
      192.168.y.4  255.255.255.255        127.0.0.1       127.0.0.1      10
    192.168.y.255  255.255.255.255      192.168.y.4     192.168.y.4      10
        224.0.0.0        240.0.0.0      192.168.x.4     192.168.x.4      10
        224.0.0.0        240.0.0.0      192.168.y.4     192.168.y.4      10
  255.255.255.255  255.255.255.255      192.168.x.4     192.168.x.4       1
  255.255.255.255  255.255.255.255      192.168.y.4     192.168.y.4       1
Default Gateway:       192.168.y.1
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0      192.168.y.1       5
          0.0.0.0          0.0.0.0      192.168.x.1      10

Alors, comment puis-je obtenir le routage LinuxBpour être comme ça:

  • garder la route par défaut sur LinuxBpour 192.168.x.1que le trafic sortant continue à utiliser Router0/ISP0
  • garder de répondre à des demandes entrantes provenant LAN0deLAN0
  • garder de répondre à des demandes entrantes provenant LAN1deLAN1
  • continuer à répondre aux demandes entrantes via Router0( a.b.c.d/ 192.168.x.1) via192.168.x.1
  • commencer à répondre aux demandes entrantes via Router1( e.f.g.h/ 192.168.y.1) via192.168.y.1
  • bonus: avoir un Router1basculement ou un équilibre de charge avecRouter0

Postscript:

L' image PNG ci - dessous est générée sur du texte UML par le biais du moteur en ligne gratuit PlantUML . Si vous souhaitez voir le texte UML d'origine, collez le lien de l'image PNG dans ce formulaire PlantUML , puis appuyez sur Submit.

entrez la description de l'image ici

Jeroen Wiert Pluimers
la source
Je viens de trouver une réponse intéressante à l' adresse unix.stackexchange.com/a/23345/69111 sur laquelle j'examine pour voir si cela s'applique à mon cas et comment l'implémenter à l'aide de yast.
Jeroen Wiert Pluimers
1
Yastsemble routevouloir faire un routage complexe et semble être déconseillé en faveur de ip. Voir opensuse.14.x6.nabble.com/yast2-advanced-routing-td3083578.html et suse.com/documentation/sles11/book_sle_admin/data/…
Jeroen Wiert Pluimers le
1
Votre solution liée chez unix.stackexchange va dans la bonne direction et résoudrait le problème de Linux: le nœud Linux a deux tables de routage distinctes et utilise la table appropriée en fonction de l'interface sur laquelle la connexion a été initiée. Je ne suis au courant d'aucune solution de ce type pour Windows. À moins qu'il y ait un réel besoin de deux sous-réseaux, je me débarrasserais d'un et utiliserais un routeur pour les deux FAI. Vous pouvez acheter des routeurs pouvant gérer correctement deux réseaux WAN ou utiliser un autre système Linux pour le faire, ce qui simplifierait le routage sur les systèmes situés derrière.
David Mackintosh
@ DavidMackintosh à l'avenir, je le ferai. Ceci est temporaire: la fibre est en réalité une ligne DSL, et passera à une adresse de fibre différente. La machine étant DNS et MX, je souhaite donc qu'elle soit accessible à partir de deux FAI afin d'assurer la continuité, car je ne suis pas sûr que DSL sera arrêté avant ou après l'activation de la fibre.
Jeroen Wiert Pluimers

Réponses:

1

J'avais un script shell pour faire quelque chose comme ça il y a très longtemps mais, désolé, je pouvais le trouver. Je ne peux donc que vous indiquer les solutions que j'ai mises en place à l'époque. J'écris principalement de mémoire, il manque donc quelques exemples:

  1. J'avais une table de routage par liaison montante (route ip ... table 101, route ip ... table 102). Cela va dans / etc / iproute2 / rt_tables.

    101 isp1 102 isp2

    Vous devez également configurer ces tables:

    ip route ajouter par défaut via $ Gateway1 dev $ Table 1 d'interface1 isp1 IP route ajouter par défaut via $ Gateway2 dev $ Table d'interface2 isp2

    # N'oubliez pas la table par défaut:

    ip route ajouter par défaut via $ DefaultGateway dev $ DefaultInterface

  2. Activer le suivi des connexions iptables (modprobe nf_conntrack)

  3. Définissez une règle iptables pour les nouvelles connexions entrantes sur -j MARK les paquets d’une manière ou d’une autre (par exemple: 0x201, 0x202).
  4. Définissez une règle ip qui garantisse que le trafic sortant via une interface utilise la table de routage appropriée

    règle ip ajouter depuis la table $ Ip1 isp1 règle ip ajouter depuis la table $ Ip2 isp2

  5. Définissez une règle ip (ip rule add ...) indiquant que "les paquets marqués 0x201 doivent rechercher la table de routage 201", une règle pour chaque liaison montante.

Avec tout en place, vous devriez pouvoir recevoir et établir des connexions avec n’importe quelle liaison montante wan et même équilibrer les connexions sortantes.

Ce seraient les bases. Iptables + "ip route" + "règle ip" et vous voilà prêt à partir.

marc.fargas
la source