Назад | Перейти на главную страницу

Как проверить сетевое соединение на определенном UDP-порту между двумя хостами Linux

Я ищу метод проверки сетевого подключения на конкретном порту между двумя хостами Linux.

Скажем, для примера: я отправляю события системного журнала с сервера A на сервер B через порт 514. Однако сервер B никогда не получает события от сервера A. Я могу подтвердить, что сервер A отправляет их, и порт 514 на сервере B открыт. На данный момент я подозреваю, что брандмауэр между этими серверами блокирует 514 соединений.

Есть ли какой-либо инструмент или метод, который может помочь проверить, открыт ли брандмауэр для порта 514 в этой ситуации?

Ты можешь использовать traceroute чтобы узнать, как далеко уходят пакеты определенного протокола. Вот пример того, как может выглядеть команда:

traceroute -n -T -p 514 2001:db8::1

Смысл аргументов следующий:

  • -n отключает обратный DNS, который часто заставляет команду работать намного быстрее.
  • -T выполнить трассировку с использованием пакетов TCP SYN.
  • -p 514 отправить пакеты на порт 514
  • 2001:db8::1 IP-адрес места назначения. Также можно использовать имя хоста.

Сравните выходные данные для нескольких разных номеров портов, чтобы узнать, последовательно ли один из них обрабатывается иначе, чем другие.

Обратите внимание, что разные версии traceroute существует. Вышеупомянутое было протестировано с использованием одного из traceroute пакет в Ubuntu 16.04. Эта версия также известна как traceroute.db.

Вы можете сделать несколько вещей.

Во-первых, проверьте, действительно ли сервисы, которые, по вашему мнению, работают и прослушивают определенные порты, прослушивают, для этого используйте netstat:

netstat -plunt

Более того, вы можете использовать анализатор пакетов, такой как Wireshark, или встроенный инструмент Linux, который называется tcpdump.

Чтобы проанализировать весь трафик, скажем, на сетевой карте с именем eth0, запустите:

tcpdump -i eth0 

Чтобы проанализировать весь трафик на nic eth0, протоколе udp и порту 514:

tcpdump -i eth0 -n udp 'port 514'

Если вы подозреваете, что на одной из машин установлен брандмауэр, вы можете перечислить все активные правила на машине, выполнив следующую команду:

sudo iptables -S

Дополнительную информацию о команде iptables, которую вы можете запустить для устранения неполадок, можно найти Вот.

Еще один шаг по устранению неполадок, который я бы предпринял, - это Telnet с машины-отправителя syslog на принимающую машину syslog через порт 514:

telnet hostB:514

Если ваш сеанс открыт, это означает, что hostA может достичь hostB в данном порту.