Исходная сеть на основе IP в ubuntu

У меня есть 3 интерфейса в машине ubuntu. эт0 / эт1 / эт2.

  • eth0 - интерфейс управления с ip (10.102.x.x)
  • eth1 - частный интерфейс с ip 192.168.1.x
  • eth2 - еще один частный интерфейс с ip 192.168.2.x

Я хочу достичь 25.25.25.x (это коробка в какой-то другой сети). Вот топология: -

Ubuntu machine <----------------> Router <------------> End Machine
192.168.1.x                 192.168.1.x   25.25.25.x     25.25.25.x

Я хочу достичь 25.25.25.x, используя интерфейсы eth1 и eth2. Поэтому для этого я пытаюсь создать таблицы маршрутизации на основе исходных IP-адресов. Вот примененная конфигурация:

ifconfig eth1 up
ifconfig eth1 192.168.1.x netmask 255.255.255.0
ip rule add from 192.168.1.x table 1 
ip route add 192.168.1.0/24 dev eth1 scope link table 1
ip route add default via 192.168.1.x dev eth1 table 1

Однако это не дает результата, так как ping 25.25.25.x -I eth1 не работает. Однако прямой маршрут работает:

ifconfig eth1 up
ifconfig eth1 192.168.1.x netmask 255.255.255.0 
route add -net 25.25.25.0/24 gw 192.168.1.x

В нерабочем случае клиент linux сам выполняет широковещательную рассылку для ip 25.25.25.x, чего не должно происходить.

Вот выходные данные таблицы 1 ip route и ip route: -

root@ubuntu:~# ip rule show
0:  from all lookup local 
32765:  from 192.168.1.x lookup 1 
32766:  from all lookup main 
32767:  from all lookup default 
root@ubuntu:~# ip route show table 1
default via 192.168.1.x dev eth1 
192.168.1.0/24 dev eth1 scope link

Может кто-нибудь ответить на этот вопрос, почему первый случай не работает?

попробуйте сначала добавить маршруты, а затем добавить правило. также правило имеет параметр приоритета. Как бы то ни было, scope link здесь не обязателен, в любом случае он будет использоваться по умолчанию. в противном случае у меня работает аналогичная конфигурация. только учтите, что eth1 AND eth2 не получится, это будет eth1 OR eth2.

muradm 05.11.2018 06:43

На самом деле будут возможны eth1 и eth2 (когда мы полностью используем интерфейс для отправки трафика). Есть несколько протоколов, работающих над одной концепцией. Mptcp - один из них. Я тоже пробовал параметр prio. это не помогает :(.

Ashutosh Shukla 05.11.2018 06:47

да, конечно, если ваш протокол поддерживает множественную адресацию, то да, вы можете. покажите свои ip rule show и ip route show table all.

muradm 05.11.2018 06:48

Сообщать нам, что что-то «не работает», не особо помогает. Пакет выходит? Получает ли его машина 25.25.25.x? Присылает ли он ответ?

David Schwartz 05.11.2018 06:53

@DavidSchwartz, я указал на проблему-> «В нерабочем случае клиент linux сам выполняет широковещательную передачу для IP 25.25.25.x, чего не должно происходить». Это означает, что пакет не достигнет конечной машины. Ubuntu должен перенаправить пакет ping на маршрутизатор, затем маршрутизатор должен выполнить arp для IP 25.25.25.x. Но вместо этого Ubuntu выполняет сам arp.

Ashutosh Shukla 05.11.2018 07:04

@muradm Вот вывод команды ip rule show: - <br/> root @ ubuntu: ~ # ip rule show <br/> 0: из всех локальных поисков <br/> 32765: из 192.168.1.x поиск 1 < br /> 32766: из всех основных поисков <br/> 32767: из всех поисков по умолчанию <br/> я отправляю вывод таблицы 1 ip route show: - <br/> root @ ubuntu: ~ # ip rule show <br /> 0: из всех локальных поисков <br/> 32765: из 192.168.1.x поиска 1 <br/> 32766: из всех основных поисков <br/> 32767: из всех поисков по умолчанию <br/> root @ ubuntu: ~ # ip route show table 1 <br/> по умолчанию через 192.168.1.x dev eth1 <br/> 192.168.1.0/24 dev eth1 scope link <br/>

Ashutosh Shukla 05.11.2018 07:17

@AshutoshShukla, чувак, используйте edit, чтобы обновить свой вопрос с помощью форматированных выходных данных.

muradm 05.11.2018 07:27

@muradm, Готово.

Ashutosh Shukla 05.11.2018 07:40

@AshutoshShukla, см. Мой ответ ниже с примером конфигурации. Теперь это работает для меня.

muradm 05.11.2018 07:51

@muradm, спасибо за это. Я пробовал команды в таком порядке, но все равно у меня не работает. :( Любая идея, почему Linux делает Arp для 25.25.25.x. Если мы сможем получить ответ на этот вопрос, то мы сможем решить эту проблему.

Ashutosh Shukla 05.11.2018 08:09

@AshutoshShukla, не знаю. Используйте pastebin.com для совместного использования ip route show all и ip addr show. Также у вас включен брандмауэр или что-то подобное?

muradm 05.11.2018 08:13
pastebin.com/NdS3VJMY Вот ссылка на то же самое.
Ashutosh Shukla 05.11.2018 08:28

Вроде нормально, снова попробуйте настроить, как в примере, и перезапустите хост. Возможно, что-то еще не так. Что касается ARP, то это нормально. Маршрутизатор / коммутатор предоставит этот ответ ARP для внешнего адреса. Если нет ответа ARP от маршрутизатора на внешний адрес, возможно, вся ваша установка настроена неправильно.

muradm 05.11.2018 08:45

@muradm ARP обычно не работает? Я имею в виду, что если его нет в локальной сети, то ICMP будет перенаправлен на следующий маршрутизатор / маршрутизатор по умолчанию (в данном случае маршрутизатор). Затем маршрутизатор выполнит arp, используя IP 25.25.25.x. И как только он получит ответ, он перешлет пакет конечной машине. Думаю, вот как это должно работать.

Ashutosh Shukla 05.11.2018 09:41

@AshutoshShukla, вот объяснение ARP: stackoverflow.com/questions/31404382/…, в основном используйте ping -I <source_ip> <dest_ip>, чтобы избежать ARP. Ничего критического не получаю.

muradm 05.11.2018 09:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
15
660
2

Ответы 2

Ваша конфигурация не имеет смысла.

ip rule add from 192.168.1.x table 1

Это говорит о том, что если мы знаем, что пакет исходит от 192.168.1.x, мы можем использовать таблицу 1 для его маршрутизации.

ip route add default via 192.168.1.x dev eth1 table 1

Это говорит о том, что если мы знаем, что используем таблицу 1 для маршрутизации пакета, маршрут по умолчанию проходит через 192.168.1.x.

Видите проблему? Только таблица 1 знает, что ваш маршрут по умолчанию доступен через маршрутизатор 192.168.1.x. И только знание того, что маршрут по умолчанию доступен через 192.168.1.x, говорит вам использовать таблицу 1. Таким образом, не следует ожидать, что эта конфигурация будет работать так, как вы, кажется, ожидаете.

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

Этот метод используется для многосетевых приложений. Например, как SCTP. По умолчанию у вас может быть только один маршрут default. Что указывает на одну ссылку. Например, для SCTP приложение одновременно привязывается к нескольким интерфейсам. И если вы устанавливаете ассоциации, обычно вы не хотите определять маршрут для каждой ассоциации. Таким образом, если у вас есть маршрут по умолчанию в каждой таблице, и приложение привязано к определенному адресу источника, трафик проходит по маршруту по умолчанию для каждого из исходных интерфейсов. Тогда вы даже можете перейти на один и тот же IP-адрес через разные интерфейсы.

muradm 05.11.2018 07:25

@muradm, спасибо, что объяснил это Дэвиду. Дэвид, я пытаюсь использовать несколько интерфейсов для подключения к другой сети (25.25.25.x). У меня есть полностью отдельная сеть для gw по умолчанию (т.е. для интерфейса управления). У нас могут быть разные маршруты по умолчанию для разных таблиц маршрутизации.

Ashutosh Shukla 05.11.2018 07:29

@DavidSchwartz, вот еще один вариант использования, когда у вас есть трафик, поступающий с нескольких интерфейсов, вы хотите убедиться, что ответный трафик может течь обратно через те же интерфейсы, что и входящий: unix.stackexchange.com/questions/4420/…

muradm 05.11.2018 07:58

Примеры использования такой конфигурации:

  • убедитесь, что входящий трафик отвечает через тот же интерфейс, Например
  • протоколы и приложения множественной адресации, например SCTP

В основном это отлично работает для меня. Содержимое /etc/network/interfaces:

auto eth1
iface eth1 inet static
  address 192.168.1.19
  netmask 255.255.255.0
  gateway 192.168.1.254 # default gateway if no source address
  post-up ip link set eth1 promisc on
  post-up ip route add 192.168.1.0/24 dev eth1 table 122
  post-up ip route add default via 192.168.1.254 table 122
  post-up ip rule add from 192.168.1.19/32 table 122 priority 122
  post-up ip route flush cache
  pre-down ip rule del from 192.168.1.19/32 table 122 priority 122
  pre-down ip route flush table 122
  pre-down ip route flush cache

auto eth2
iface eth2 inet static
  address 192.168.2.19
  netmask 255.255.255.0
  post-up ip link set eth2 promisc on
  post-up ip route add 192.168.2.0/24 dev eth2 table 222
  post-up ip route add default via 192.168.2.254 table 222
  post-up ip rule add from 192.168.2.19/32 table 222 priority 222
  post-up ip route flush cache
  pre-down ip rule del from 192.168.2.19/32 table 222 priority 222
  pre-down ip route flush table 222
  pre-down ip route flush cache 

Потом:

$ ip route get 8.8.8.8
8.8.8.8 via 192.168.1.254 dev eth1  src 192.168.1.19 
    cache 
$ ip route get 8.8.8.8 from 192.168.1.19
8.8.8.8 from 192.168.1.19 via 192.168.1.254 dev eth1 
    cache 
$ ip route get 8.8.8.8 from 192.168.2.19
8.8.8.8 from 192.168.2.19 via 192.168.2.254 dev eth2 
    cache 

<< убедитесь, что входящий трафик отвечает через тот же интерфейс >>. Прямо сейчас нет входящего трафика. Только ping мы делаем с машины ubuntu, которая, в свою очередь, отправляет запрос arp на маршрутизатор посередине.

Ashutosh Shukla 05.11.2018 08:38

Другие вопросы по теме