Anschließen eines Linux-Computers an einen sekundären Router / ISP: Wie wird das Routing korrekt eingerichtet?

8

Abstrakt:

Ich habe (ich nehme an, Routing) Probleme beim Hinzufügen eines sekundären ISP zu meinem vorhandenen Netzwerk-Setup: Eingehender Datenverkehr Router1wird nicht beantwortet, aber lokaler Datenverkehr und eingehender Datenverkehr Router0funktionieren einwandfrei.

Wie kann ich dafür sorgen, dass die Teile, die derzeit gut funktionieren, funktionieren, während der eingehende Datenverkehr durch die Router1Arbeit geleitet wird?

Ausarbeitung:

Ich habe unten ein Diagramm mit den wichtigsten Aspekten der Situation skizziert (in der Praxis gibt es in jedem LAN mehr Geräte, aber diese spielen keine Rolle).

Dies ist die Situation:

  • Ich habe zwei interne Netzwerke: LAN0ist 192.168.x.0/24und LAN1ist 192.168.y.0/24. Beide funktionieren gut für den internen Datenverkehr (z. B. http mit cURL ).
  • LAN0wurde immer durch Router0und ISP0mit dem verbunden Internet.
  • LAN1hatte schon immer Router1, ist aber jetzt mit ISP1dem verbunden Internet.
  • Maschinen, die nur eingeschaltet sind LAN0und eine Standardroute haben, Router0funktionieren einwandfrei für ausgehenden und eingehenden Verkehr.
  • Maschinen, die nur eingeschaltet sind LAN1und eine Standardroute haben, Router1funktionieren einwandfrei für ausgehenden und eingehenden Verkehr.
  • Interner Verkehr weiter LAN0und LAN1hat immer gut funktioniert.
  • Eingehender Verkehr durch Router1für WindowsBkommt korrekt an: Ich kann eine Verbindung über RDP von herstellen WindowsC.
  • Eingehender Verkehr durch Router1für LinuxBAnkunft (laut tcpdump ), aber nicht zurück beantwortet, wie ein curl http://e.f.g.hFron LinuxCmit einem tcpdump auf LinuxB Shows zeigt:

Es werden nur Pakete angezeigt, für die gemäß dem Ausgabeformat tcpdump ein SYN- Flag gesetzt ist:

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

Dies ist die LinuxBRoutentabelle:

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

Da das Herstellen einer Verbindung über RDP von WindowsCzu einwandfrei WindowsBfunktioniert, ist dies in der Tat ein Routing-Problem. Dies ist die WindowsBRoutentabelle:

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

Wie kann ich das Routing LinuxBso gestalten:

  • Behalten Sie die Standardroute bei LinuxB, 192.168.x.1damit ausgehender Datenverkehr weiterhin Router0/ verwendetISP0
  • halten die Beantwortung eingehender Anfragen kommen von LAN0aufLAN0
  • halten die Beantwortung eingehender Anfragen kommen von LAN1aufLAN1
  • Beantworten Sie eingehende Anfragen weiterhin über Router0( a.b.c.d/ 192.168.x.1) über192.168.x.1
  • Beantworten Sie eingehende Anfragen über Router1( e.f.g.h/ 192.168.y.1) über192.168.y.1
  • Bonus: Router1Failover oder Lastausgleich mitRouter0

Nachsatz:

Das folgende PNG-Bild wird über die kostenlose Online- PlantUML- Engine in UML- Text generiert . Wenn Sie den ursprünglichen UML-Text anzeigen möchten, fügen Sie den PNG- Bildlink in dieses PlantUML-Formular ein und drücken Sie Submit.

Geben Sie hier die Bildbeschreibung ein

Jeroen Wiert Pluimers
quelle
Ich habe gerade eine interessante Antwort unter unix.stackexchange.com/a/23345/69111 gefunden, die ich untersuche, um festzustellen , ob sie für meinen Fall gilt und wie ich sie mithilfe implementieren kann yast.
Jeroen Wiert Pluimers
1
Yastscheint auf komplexes Routing aus zu sein und routescheint zugunsten von veraltet zu sein ip. Siehe opensuse.14.x6.nabble.com/yast2-advanced-routing-td3083578.html und suse.com/documentation/sles11/book_sle_admin/data/…
Jeroen Wiert Pluimers
1
Ihre verknüpfte Lösung unter unix.stackexchange geht in die richtige Richtung und würde das Linux-Problem lösen. Der Linux-Knoten verfügt über zwei separate Routing-Tabellen und verwendet die entsprechende Tabelle, je nachdem, auf welcher Schnittstelle die Verbindung initiiert wurde. Mir ist keine solche Lösung für Windows bekannt. Wenn nicht wirklich zwei Subnetze benötigt werden, würde ich eines loswerden und einen Router für beide ISPs verwenden. Sie können Router kaufen, die mit zwei WANs ordnungsgemäß umgehen können, oder Sie können ein anderes Linux-System verwenden, um das Routing auf den dahinter liegenden Systemen zu vereinfachen.
David Mackintosh
@ DavidMackintosh in Zukunft werde ich. Dies ist nur vorübergehend: Glasfaser ist tatsächlich DSL und wird an eine andere Glasfaseradresse verschoben. Der Computer ist DNS und MX, daher möchte ich, dass er von zwei ISPs aus zugänglich ist, um Kontinuität zu gewährleisten, da ich nicht sicher bin, ob DSL vor oder nach dem Aktivieren der Glasfaser heruntergefahren wird.
Jeroen Wiert Pluimers

Antworten:

1

Ich hatte vor langer Zeit ein Shell-Skript dafür, aber leider konnte ich es finden. Daher kann ich Ihnen nur die Hinweise auf die Lösungen geben, die ich damals implementiert habe. Ich schreibe hauptsächlich aus dem Gedächtnis, daher fehlen einige Beispiele:

  1. Ich hatte eine Routing-Tabelle pro Uplink (IP-Route ... Tabelle 101, IP-Route ... Tabelle 102). Das geht in / etc / iproute2 / rt_tables.

    101 isp1 102 isp2

    Sie müssen diese Tabellen auch einrichten:

    IP-Route Standard hinzufügen über $ Gateway1 dev $ Interface1-Tabelle isp1 IP-Route Standard hinzufügen über $ Gateway2 dev $ Interface2-Tabelle isp2

    # Vergessen Sie nicht die Standardtabelle:

    IP-Route Standard hinzufügen über $ DefaultGateway dev $ DefaultInterface

  2. Aktivieren Sie die iptables-Verbindungsverfolgung (modprobe nf_conntrack)

  3. Stellen Sie eine iptables-Regel für NEUE eingehende Verbindungen ein, um die Pakete irgendwie zu markieren (dh: 0x201, 0x202).
  4. Legen Sie eine IP-Regel fest, die sicherstellt, dass der Datenverkehr über eine Schnittstelle die richtige Routing-Tabelle verwendet

    IP-Regel aus $ Ip1-Tabelle hinzufügen isp1 IP-Regel aus $ Ip2-Tabelle hinzufügen isp2

  5. Legen Sie eine IP-Regel fest (IP-Regel hinzufügen ...), die besagt, dass "mit 0x201 gekennzeichnete Pakete die Routing-Tabelle 201 nachschlagen sollen", eine Regel für jede Aufwärtsverbindung.

Wenn alles vorhanden ist, sollten Sie in der Lage sein, Verbindungen mit jedem Wan-Uplink zu empfangen und zu initiieren und sogar ausgehende Verbindungen auszugleichen.

Das wären die Grundlagen. Iptables + "IP-Route" + "IP-Regel" und Sie können loslegen.

marc.fargas
quelle