Как определить, на каком интерфейсе будет установлено TCP-соединение?

10

У меня есть сервер с несколькими интерфейсами Ethernet. Какой самый простой способ определить, через какой интерфейс будет исходить TCP-соединение? Результаты "netstat -rn" греки для меня, поэтому, если ваш ответ "посмотрите на локальную таблицу маршрутизации", пожалуйста, будьте подробны и ясны.

brooks94
источник

Ответы:

13

Для меня я могу видеть, какой интерфейс у меня тут же, используя netstat -rnилиroute -n

cyrex@cyrex:~$ netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.48.0.1      0.0.0.0         UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
192.48.0.0      0.0.0.0         255.255.224.0   U         0 0          0 eth0

Или netstat -r

cyrex@cyrex:~$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192-48-0-1.dyn. 0.0.0.0         UG        0 0          0 eth0
link-local      *               255.255.0.0     U         0 0          0 eth0
192.48.0.0      *               255.255.224.0   U         0 0          0 eth0

В обоих случаях я вижу имя интерфейса в конце, в данном случае это eth0

Информация, предоставленная этими командами, следующая (источник найден здесь ):

Пункт назначения - сеть назначения или узел назначения.

Шлюз - адрес шлюза или, *если он не установлен.

Genmask - Сетевая маска для сети назначения.

 255.255.255.255 for the host destination.
 0.0.0.0 for the default route.  

Флаги - Возможные флаги включают в себя:

 U (route is up)  
 H (target is a host)  
 G (using gateway)  
 R (reinstate route for dynamic routing)  
 D (dynamically installed by daemon or redirect)  
 M (modified from routing daemon or redirect)  
 A (installed by addrconf)  
 C (cache entry)  
 ! (reject route)  

MSS - максимальный размер сегмента по умолчанию для TCP-соединений по этому маршруту.

Window - Размер окна по умолчанию для TCP-соединений по этому маршруту.

irtt - начальный RTT (время прохождения в оба конца ). Ядро использует это, чтобы угадать о лучших параметрах протокола TCP, не ожидая (возможно, медленных) ответов.

Iface - Интерфейс, на который будут отправляться пакеты для этого маршрута.

Другие поля могут быть:

Метрика - расстояние до цели (обычно учитывается в прыжках). Он не используется последними ядрами, но может понадобиться демонам маршрутизации.

Ref - Количество ссылок на этот маршрут. (Не используется в ядре Linux.)

Использование - Количество поисков по маршруту. В зависимости от использования -F и -C это может быть либо пропуск кеша маршрута (-F), либо попадание (-C).

HH (только для кэширования) - количество записей ARP и кэшированных маршрутов, которые ссылаются на кэш аппаратного заголовка для кэшированного маршрута. Это будет -1, если аппаратный адрес не нужен для интерфейса кэшированного маршрута (например, lo).

Arp (только для кэширования) - актуален или нет аппаратный адрес для кэшированного маршрута.

Теперь к вопросу. Самый простой способ, который я помню сейчас (как всегда, есть несколько способов сделать то же самое), это использовать iptraf. Просто установите его:

sudo apt-get install iptraf

и запустите его с правами суперпользователя: sudo iptraf

В меню iptrafвыберите IP Traffic Monitor, а затем выберите Все интерфейсы . Это должно показать вам все TCP-соединения и с каким интерфейсом они связаны. Это терминал, который хорош для целей мониторинга.

Луис Альварадо
источник
Хороший ответ Луис. Вы также можете использовать командуroute
Пантера
1
Вместо того , скажем пойти посмотреть и увидеть , где он действительно идет, правильный ответ должен сказать учитывая эту маршрутную информацию таблицы, вы можете увидеть , где трафик для данного адреса будет идти.
psusi
8

Вы можете запросить таблицы маршрутизации ядра, используя ipкоманду. Его route getподкоманда точно скажет вам, как ядро ​​направит пакет на адрес назначения:

 $ ip route get to 10.0.2.2
 10.0.2.2 dev eth0  src 10.0.2.15

в то время как

$ ip route get to 192.168.3.5
192.168.3.5 via 10.0.2.2 dev eth0  src 10.0.2.15

и

$ ip route get to 127.0.1.1
local 127.0.1.1 dev lo  src 127.0.0.1
zwets
источник