Подключение Linux-машины к вторичному маршрутизатору/интернет-провайдеру: как правильно настроить маршрутизацию?

Подключение Linux-машины к вторичному маршрутизатору/интернет-провайдеру: как правильно настроить маршрутизацию?

Абстрактный:

У меня возникли проблемы (предполагаю, с маршрутизацией) при добавлении вторичного интернет-провайдера к моей существующей сетевой настройке: входящий трафик Router1не обрабатывается, но локальный трафик и входящий трафик Router0работают нормально.

Как мне сохранить работоспособность тех частей, которые в настоящее время исправно работают, и при этом обеспечить бесперебойную Router1работу входящего трафика?

Разработка:

Ниже я нарисовал схему, отражающую основные моменты ситуации (на практике в каждой локальной сети больше устройств, но это не имеет значения).

Вот такая ситуация:

  • У меня есть две внутренние сети: LAN0is 192.168.x.0/24и LAN1is 192.168.y.0/24. Обе отлично работают для внутреннего трафика (напримерhttpс использованиемcURL).
  • LAN0всегда был связан через Router0и ISP0с Internet.
  • LAN1всегда имел Router1, но теперь подключен ISP1через Internet.
  • Только машины, на LAN0которых установлен маршрут по умолчанию, Router0отлично работают для исходящего и входящего трафика.
  • Только машины, на LAN1которых установлен маршрут по умолчанию, Router1отлично работают для исходящего и входящего трафика.
  • Внутренний трафик LAN0всегда LAN1работал нормально.
  • Входящий трафик через Router1for WindowsBпоступает корректно: я могу подключиться к нему по RDP из WindowsC.
  • Входящий трафик через Router1прибывает LinuxB(согласноtcpdump), но не ответил, как показывает curl http://e.f.g.hфронт LinuxCсtcpdump на LinuxBпоказывает:

Он показывает только те пакеты, которые - согласноФормат вывода tcpdump- иметьСИНустановлен флаг:

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

Это LinuxBтаблица маршрутов:

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

Поскольку подключение по RDP с WindowsCработает WindowsBнормально, я делаю вывод, что это действительно проблема маршрутизации. Вот WindowsBтаблица маршрутизации:

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

Итак, как мне сделать так, чтобы маршрутизация LinuxBбыла такой:

  • оставить маршрут по умолчанию включенным , LinuxBчтобы 192.168.x.1исходящий трафик продолжал использовать Router0/ISP0
  • продолжайте отвечать на входящие запросы, поступающие LAN0сLAN0
  • продолжайте отвечать на входящие запросы, поступающие LAN1сLAN1
  • продолжайте отвечать на входящие запросы через Router0( a.b.c.d/ 192.168.x.1) через192.168.x.1
  • начать отвечать на входящие запросы через Router1( e.f.g.h/ 192.168.y.1) через192.168.y.1
  • бонус: есть Router1отказоустойчивость или балансировка нагрузки сRouter0

Постскриптум:

ThePNG-изображение нижегенерируется наУМЛтекст через бесплатный онлайнPlantUMLдвижок. Если вы хотите увидеть оригинальный текст UML, вставьтеСсылка на изображение PNGв этоФорма PlantUML, затем нажмите Submit.

введите описание изображения здесь

решение1

У меня был скрипт оболочки для чего-то подобного давным-давно, но, извините, я не смог его найти. Поэтому я могу только дать вам указания на решения, которые я реализовал тогда. Я пишу в основном по памяти, поэтому некоторые примеры отсутствуют:

  1. У меня была одна таблица маршрутизации на каждый аплинк (ip route ... table 101, ip route ... table 102). Она идет в /etc/iproute2/rt_tables.

    101 исп1 102 исп2

    Вам также необходимо настроить следующие таблицы:

    ip route add default via $Gateway1 dev $Interface1 table isp1 ip route add default via $Gateway2 dev $Interface2 table isp2

    #Не забудьте таблицу по умолчанию:

    IP-маршрут добавить по умолчанию через $DefaultGateway dev $DefaultInterface

  2. Включить отслеживание подключений iptables (modprobe nf_conntrack)

  3. Установите правило iptables для НОВЫХ входящих подключений -j МАРКИРОВАТЬ пакеты каким-либо образом (например: 0x201, 0x202)
  4. Установите правило IP, которое гарантирует, что трафик, проходящий через интерфейс, использует правильную таблицу маршрутизации.

    добавить правило ip из таблицы $Ip1 isp1 добавить правило ip из таблицы $Ip2 isp2

  5. Установите правило IP (ip rule add ...), указывающее, что «пакеты, помеченные 0x201, должны искать в таблице маршрутизации 201», по одному правилу для каждого восходящего канала.

Когда все будет готово, вы сможете принимать и инициировать соединения с любым восходящим каналом WAN и даже балансировать исходящие соединения.

Это основы. Iptables + «ip route» + «ip rule» и все готово.

Связанный контент