У меня есть 3 интерфейса в машине ubuntu. эт0 / эт1 / эт2.
Я хочу достичь 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
Может кто-нибудь ответить на этот вопрос, почему первый случай не работает?
На самом деле будут возможны eth1 и eth2 (когда мы полностью используем интерфейс для отправки трафика). Есть несколько протоколов, работающих над одной концепцией. Mptcp - один из них. Я тоже пробовал параметр prio. это не помогает :(.
да, конечно, если ваш протокол поддерживает множественную адресацию, то да, вы можете. покажите свои ip rule show и ip route show table all.
Сообщать нам, что что-то «не работает», не особо помогает. Пакет выходит? Получает ли его машина 25.25.25.x? Присылает ли он ответ?
@DavidSchwartz, я указал на проблему-> «В нерабочем случае клиент linux сам выполняет широковещательную передачу для IP 25.25.25.x, чего не должно происходить». Это означает, что пакет не достигнет конечной машины. Ubuntu должен перенаправить пакет ping на маршрутизатор, затем маршрутизатор должен выполнить arp для IP 25.25.25.x. Но вместо этого Ubuntu выполняет сам arp.
@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/>
@AshutoshShukla, чувак, используйте edit, чтобы обновить свой вопрос с помощью форматированных выходных данных.
@muradm, Готово.
@AshutoshShukla, см. Мой ответ ниже с примером конфигурации. Теперь это работает для меня.
@muradm, спасибо за это. Я пробовал команды в таком порядке, но все равно у меня не работает. :( Любая идея, почему Linux делает Arp для 25.25.25.x. Если мы сможем получить ответ на этот вопрос, то мы сможем решить эту проблему.
@AshutoshShukla, не знаю. Используйте pastebin.com для совместного использования ip route show all и ip addr show. Также у вас включен брандмауэр или что-то подобное?
Вроде нормально, снова попробуйте настроить, как в примере, и перезапустите хост. Возможно, что-то еще не так. Что касается ARP, то это нормально. Маршрутизатор / коммутатор предоставит этот ответ ARP для внешнего адреса. Если нет ответа ARP от маршрутизатора на внешний адрес, возможно, вся ваша установка настроена неправильно.
@muradm ARP обычно не работает? Я имею в виду, что если его нет в локальной сети, то ICMP будет перенаправлен на следующий маршрутизатор / маршрутизатор по умолчанию (в данном случае маршрутизатор). Затем маршрутизатор выполнит arp, используя IP 25.25.25.x. И как только он получит ответ, он перешлет пакет конечной машине. Думаю, вот как это должно работать.
@AshutoshShukla, вот объяснение ARP: stackoverflow.com/questions/31404382/…, в основном используйте ping -I <source_ip> <dest_ip>, чтобы избежать ARP. Ничего критического не получаю.





Ваша конфигурация не имеет смысла.
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, спасибо, что объяснил это Дэвиду. Дэвид, я пытаюсь использовать несколько интерфейсов для подключения к другой сети (25.25.25.x). У меня есть полностью отдельная сеть для gw по умолчанию (т.е. для интерфейса управления). У нас могут быть разные маршруты по умолчанию для разных таблиц маршрутизации.
@DavidSchwartz, вот еще один вариант использования, когда у вас есть трафик, поступающий с нескольких интерфейсов, вы хотите убедиться, что ответный трафик может течь обратно через те же интерфейсы, что и входящий: unix.stackexchange.com/questions/4420/…
Примеры использования такой конфигурации:
В основном это отлично работает для меня. Содержимое /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 на маршрутизатор посередине.
попробуйте сначала добавить маршруты, а затем добавить правило. также правило имеет параметр приоритета. Как бы то ни было,
scope linkздесь не обязателен, в любом случае он будет использоваться по умолчанию. в противном случае у меня работает аналогичная конфигурация. только учтите, чтоeth1 AND eth2не получится, это будетeth1 OR eth2.