Підключення машини Linux до вторинного маршрутизатора / ISP: як правильно настроїти маршрутизацію?


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.

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


Щойно я знайшов цікаву відповідь на unix.stackexchange.com/a/23345/69111, яку я розслідую, щоб перевірити, чи стосується він мого випадку, і як його реалізувати за допомогою yast.
Jeroen Wiert Pluimers

1
Yastздається , за робити складну маршрутизацію і , routeздається застарілим на користь ip. Див opensuse.14.x6.nabble.com/yast2-advanced-routing-td3083578.html і suse.com/documentation/sles11/book_sle_admin/data / ...
Йерун Wiert Pluimers

1
Ваше пов'язане рішення на unix.stackexchange йде в правильному напрямку і вирішить проблему linux - у вузла Linux є дві окремі таблиці маршрутизації, і використовується відповідна таблиця залежно від того, на якому інтерфейсі було розпочато з'єднання. Я не знаю жодного такого рішення для Windows. Якщо немає реальної потреби у двох підмережах, я б позбувся однієї і застосував би один маршрутизатор для обох провайдерів. Ви можете придбати маршрутизатори, які можуть правильно працювати з двома WAN, або ви можете використовувати іншу систему Linux для цього, що спростить маршрутизацію в системах, що стоять за нею.
Девід Макінтош

@DavidMackintosh в майбутньому буду. Це тимчасово: волокно - це насправді DSL і збирається перейти на іншу адресу волокна. Машина DNS та MX, тому я хочу, щоб вона була доступною для двох провайдерів, щоб мати безперервність, оскільки я не впевнений, чи буде DSL відключений до або після того, як волокно стане активним.
Jeroen Wiert Pluimers

Відповіді:


1

У мене був сценарій оболонки для того, щоб зробити щось подібне дуже давно, але, вибачте, я міг це знайти. Тож я можу дати вам лише вказівки на ті рішення, які я тоді впровадив. Я пишу в основному з пам'яті, тому деякі приклади відсутні:

  1. У мене була одна таблиця маршрутизації по висхідній лінії зв'язку (ip route ... таблиця 101, ip route ... таблиця 102). Це переходить у / etc / iproute2 / rt_tables.

    101 isp1 102 isp2

    Вам також потрібно налаштувати ці таблиці:

    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 MARK-пакети якось (тобто: 0x201, 0x202)
  4. Встановіть правило ip, яке гарантує, що трафік виходить через інтерфейс використовує правильну таблицю маршрутизації

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

  5. Встановіть правило ip (ip правило add ...), вказавши, що "пакети, позначені 0x201, повинні шукати таблицю маршрутизації 201", одне правило для кожної висхідної лінії зв'язку.

Маючи все на своєму місці, ви повинні мати можливість приймати та ініціювати з'єднання з будь-яким WAN висхідною лінією і навіть балансувати вихідні з'єднання.

Це були б основи. Iptables + "ip route" + "ip rule", і вам добре їхати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.