У меня есть локальная сеть из компьютеров Linux, которые получают доступ в Интернет через NAT. На шлюзе установлен ограничительный брандмауэр. У меня есть эхо-запросы и ответы ICMP, которым разрешено проходить через брандмауэр на шлюзе, поэтому я могу проверить связь с любым внешним хостом с компьютера в локальной сети, но mtr и traceroute на внешний хост зависают на переходе шлюза.
Какие дополнительные правила брандмауэра мне нужно установить, чтобы эти инструменты работали правильно?
В Linux traceroute по умолчанию используется UDP на случайном высоком порте, а в Windows tracert используется ICMP. Для ваших Linux-машин вам нужно либо настроить брандмауэр, чтобы разрешить UDP на высоких портах, либо использовать переключатель командной строки -I, чтобы указать использование ICMP ECHO вместо дейтаграмм UDP.
Отредактировано для добавления: по умолчанию он выбирает случайный порт из диапазона неназначенных портов, обычно называемый «высокими портами». Обычно это означает порт в диапазоне 49152–65535 (см. этот список портов). На странице руководства это называется «маловероятным значением» для непреднамеренного запуска службы, поскольку мы не хотим, чтобы хост обрабатывал дейтаграммы UDP как информацию. Если вы хотите, вы можете указать порт с помощью -p, но имейте в виду, что он будет увеличивать порт назначения на 1 с каждым зондом при использовании UDP. Если вы хотите использовать постоянный порт, укажите переключатель -U (порт по умолчанию для этого 53). В качестве альтернативы, если вы не хотите использовать UDP или ICMP, вы можете использовать переключатель -T, чтобы указать режим TCP SYN, который будет использовать постоянный порт, который вы можете установить с помощью -p. Затем вы откроете этот порт на своем брандмауэре.
Для непривилегированных пользователей разрешен только UDP.