У меня есть сервер с несколькими сетевыми интерфейсами. Какой самый простой способ определить, через какой интерфейс будет исходить TCP-соединение? Результаты "netstat -rn" греки для меня, поэтому, если ваш ответ "посмотрите на локальную таблицу маршрутизации", пожалуйста, будьте подробны и ясны.
Для меня я вижу, какой интерфейс у меня есть, используя 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
Информация, предоставленная этими командами, следующая (Источник найден здесь ): [ 1116]
Destination - Сеть назначения или хост назначения.
Шлюз - Адрес шлюза или *
, если он не установлен.
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 по этому маршруту. [ 1121]
Окно - Размер окна по умолчанию для TCP-соединений по этому маршруту.
irtt - Начальное RTT (время кругового обхода). Ядро использует это, чтобы угадать лучшие параметры протокола TCP, не ожидая (возможно, медленных) ответов.
Iface - Интерфейс, на который будут отправляться пакеты для этого маршрута.
Другие поля могут быть:
Метрика - Расстояние до цели (обычно учитывается в прыжках). Он не используется последними ядрами, но может понадобиться демонам маршрутизации.
Ссылка - Количество ссылок на этот маршрут. (Не используется в ядре Linux.)
Use - Количество поисков для маршрута. В зависимости от использования -F и -C это могут быть либо ошибки кэша маршрутов (-F), либо попадания (-C).
HH (только для кэширования) - количество записей ARP и кэшированных маршрутов, которые ссылаются на кэш аппаратного заголовка для кэшированного маршрута. Это будет -1, если аппаратный адрес не нужен для интерфейса кэшированного маршрута (например, lo).
Arp (только для кэширования) - актуален ли аппаратный адрес для кэшированного маршрута.
1131 Теперь к вопросу. Самый простой способ, который я могу вспомнить прямо сейчас (как всегда, есть несколько способов сделать одно и то же), это использоватьiptraf
. Просто установите его:
sudo apt-get install iptraf
и запустите его с привилегиями root: sudo iptraf
В меню iptraf
выберите IP Traffic Monitor [ 1149] и затем выберите Все интерфейсы . Это должно показать вам все TCP-соединения и с каким интерфейсом они связаны. Он основан на терминале, что хорошо для целей мониторинга.
Вы можете запросить таблицы маршрутизации ядра с помощью команды 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