8

Аннотация:

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

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

Разработка:

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

Это ситуация:

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

Он показывает только пакеты, которые - в соответствии с форматом вывода tcpdump - имеют установленный флаг SYN :

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

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

Изображение PNG ниже генерируется в тексте UML с помощью бесплатного онлайн-движка PlantUML . Если вы хотите увидеть исходный текст UML, вставьте ссылку на изображение PNG в эту форму PlantUML и нажмите « Submit .

1 ответ1

1

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

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

    101 исп1 102 исп2

    Вам нужно также настроить эти таблицы:

    ip route добавить значение по умолчанию через таблицу $ Gateway1 dev $ Interface1 isp1 ip route добавить значение по умолчанию через таблицу $ Gateway2 dev $ Interface2 isp2

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

    ip route добавить значение по умолчанию через $ 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 маршрутизации», одно правило для каждой восходящей линии связи.

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

Это были бы основы. Iptables + "ip route" + "ip rule" и все готово.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .