Как узнать, через какой интерфейс будет маршрутизировано соединение с данным хостом?

1

Моему script необходимо настроить назначения ловушек SNMP для нескольких хостов, которые существуют в разных сетях. Поэтому важно, чтобы адрес назначения ловушки был интерфейсом, доступным для удаленного устройства node.

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

В идеале для этого было бы решение python. Я смотрел на привязки python для libdnet, но это только, кажется, может вернуть шлюз по умолчанию для адреса 0.0.0.0.

Теги:
routing

2 ответа

3
Лучший ответ

Лучший ответ для этого во всех сценариях дается командой Linux ip route get $DEST. Это учитывает маршрутизацию политики (несколько таблиц маршрутизации, выбранных разными селекторами).

Синтаксис (от ip route help):

       ip route get ADDRESS [ from ADDRESS iif STRING ]
                        [ oif STRING ]  [ tos TOS ]
1

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

Даже если у вас есть отдельный интерфейс, настроенный в отдельной сети (например, eth1), у вас может быть только один маршрут по умолчанию. Если вам нужно, чтобы определенные пункты назначения принимали eth1, вам нужно настроить статический маршрут (также известный как хост-маршрут).

Вы сделали это? Если нет, именно поэтому libdnet предоставляет только шлюз по умолчанию, потому что это единственный выход, который знает хозяин.

  • 0
    Ну, это плоская сеть, поэтому единственная маршрутизация - через какой порт Ethernet выходить. В этом случае eth0 - 10.0.0.62/16, а eth1 - 192.168.0.12/24, поэтому все пакеты для 192.168.0.1-255 будут выходить из eth1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню