LINUX.ORG.RU
ФорумAdmin

ip route


0

0

Теоретический вопрос:
у меня сложная конфигурация маршрутизации, разные правила маршрутизации в зависимости от sourse ip. Вопрос: какая таблица маршрутизации используется при соединении с самого маршрутизатора, то есть как принимается решение с какого интерфейса ( с какого адреса) соединяться с указанным destination ip? (перед соединением source ip неизвестно)

★★
Ответ на: комментарий от dimon555

только пожалуйста, не советуйте человеку rm -rf, а то я токо недавно отошёл, я больше ржатиь не могу ))

cyclope
()

> Вопрос: какая таблица маршрутизации используется при соединении с самого маршрутизатора

Kernel IP routing table =)

Komintern ★★★★★
()
Ответ на: комментарий от Komintern

вопрос: какая таблица используется
ответ: таблица

хм, большое спасибо.
вы вообще-то в курсе что их минимум 3?

[root@x x]# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec

anonymous
()

Source routing осуществляется по информации, записанной в самом пакете, и source ip тут ни при чём.

А policy routing по признаку source IP конфигурируется не в таблицах :)

bakagaijin
()
Ответ на: комментарий от bakagaijin

>Source routing осуществляется по информации, записанной в самом пакете
мой вопрос в том какая информация попадает в пакет:

пример: в программе на роутере я вызываю функцию connect() и передаю destination ip. роутер пытается устанавливить соединение. программа не передает ядру какой source address указать в пакете. ядро ставит source address на основании какой-то таблицы маршрутизации. в этом и вопрос: по какой таблице?

2)
>policy routing по признаку source IP конфигурируется не в таблицах

почему? как я понимаю, на основании source IP выбирается одна из таблиц, в соответствии с ip rule с наименьшим приоритетом

victorb ★★
() автор топика
Ответ на: комментарий от bakagaijin

Как я понял, автор хочет узнать каким образом определяется ip-адрес на который биндится открваемый с компьютера сокет в случае нескольких таблиц маршрутизации. То есть приложение сделало socket(), а потом connect() без вызова bind(). С какого ip-адреса будет установлено соеднинение?

Вроде смотрятся маршруты только в default таблице.

mky ★★★★★
()
Ответ на: комментарий от mky

ВО! ну хоть кто-то понял!
история была такая: я сделал таблицу маршрутизации в которой указал в source ip адреса всех локальных интерфейсов. И connect() эту таблицу спокойно игнорировал. потом добавил маршруты в таблицу main и тогда вроде стал нормально маршрутизироваться. вот и хотелось разобраться.
Получается такая гипотеза: на момент connect() source ip неизвестен и все таблицы которые запускаются от source ip игнорируются, отстаются две таблицы - local и если в ней нет то main
вроде так?

victorb ★★
() автор топика
Ответ на: комментарий от victorb

>вроде так?

Вроде да, если точно, то надо копаться в исходниках ядра, у меня сейчас нет на это времени. Только не спрашивайте как в случае "сложной" маршрутизации работает rp_filter :)

mky ★★★★★
()
Ответ на: комментарий от mky

если кому интересно,
сейчас ставил эксперимент.
для connect() проводится сопоставление с адресом 0.0.0.0/32
какая первая таблица попала по той и маршрутизируется

victorb ★★
() автор топика
Ответ на: комментарий от victorb

> и все таблицы которые запускаются от source ip игнорируются
Да, именно так. Хотя если есть правило, касающееся dst IP, оно сработает (отправит пакет маршрутизироваться по заданной таблице).

Еще есть другой момент: если в ядре включена функция маркировки пакетов (CONFIG_IP_ROUTE_FWMARK), тогда пакет сначала маршрутизируется как пакет без src IP, потом проходит через OUTPUT цепочки firewall-а (в которых возможно промаркируется), и после этого повторно перемашрутизируется уже с участием и src IP, и маркировок.

Вроде бы так.

spirit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.