1

Мой провайдер блокирует исходящий порт udp 123. Это мешает ntpd получать обновления ntp. Как заставить мой маршрутизатор (маршрутизатор Asus, на котором работает Asuswrt Merlin) автоматически изменять номер порта с 123 на другой? Я попытался использовать следующее правило iptables, но оно не работает на маршрутизаторе. Правило работает, когда я помещаю его на отдельные машины Linux, но я хочу избежать этого на всех них.

iptables -t nat -I POSTROUTING 1 -p udp --sport 123 -j SNAT --to-source :12512

Я думаю, что на моем маршрутизаторе мне нужно было бы одновременно менять порт и MASQUERADE, но я не знаю, возможно ли это.

Вот мои записи таблицы POSTROUTING nat на моем маршрутизаторе. Я попытался поставить правило ntp первым и вторым.

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    SNAT       udp  --  anywhere             anywhere             udp spt:ntp to::12512
2    MASQUERADE  all  -- !<my external IP>    anywhere

3 ответа3

1

Использование исходного NAT для перезаписи исходного номера порта из 123 не изменит того факта, что вы все еще подключаетесь к удаленным NTP-серверам, которые прослушивают порт назначения 123. Когда ваш провайдер блокирует исходящий трафик NTP, он, вероятно, блокирует пакеты UDP на порт dport 123, и изменение исходного порта не будет иметь большого значения.

Просто спросите у своего интернет-провайдера, какие NTP-серверы они предоставляют, которые вы можете использовать.

0

Чтобы он работал на вашем маршрутизаторе, вам нужно специально добавить в правило адрес внешнего интерфейса (общедоступный доступ в Интернет). В противном случае вы отправляете пакет в Интернет с вашим частным IP-адресом в качестве источника. Вполне возможно, что ваше конкретное ядро, версия netfilter ведет себя по-разному. Вы можете проверить, что происходит с tcpdump.

iptables -t nat -I POSTROUTING 1 -p udp --sport 123 -j SNAT --to-source {PUBLIC_IP}:12512

Затем (при условии, что eth1 - это ваш интерфейс, выходящий в Интернет):

tcpdump -ni eth1 port 123

Вот что у меня есть в /etc/firewall.user на OpenWRT:

P_IP=`/sbin/ifconfig eth1 | awk '/inet addr/{print substr($2,6)}'`
/usr/sbin/iptables -t nat -I postrouting_rule -p udp -o eth1 --sport 123 --dport 123 -j SNAT --to $P_IP:12300

Не забудьте очистить таблицы conntrack после внесения изменений в брандмауэр, если вы хотите сразу увидеть результаты в OpenWRT:

echo f > /proc/net/nf_conntrack

В противном случае это может быть действительно запутанным, что происходит.

0

Я опаздываю на вечеринку, но сегодня мне пришлось что-то делать с той же проблемой. Эта страница суперпользователя была одним из первых результатов Google, с которыми я столкнулся при исследовании проблемы, и я решил добавить здесь обходной путь, чтобы сэкономить будущим поисковикам некоторые усилия.

Добавление специализированного правила маскарада для трафика NTP с аргументом --to-ports для цели MASQUERADE перед тем , как обычное правило маскарада вызовет преобразование исходного порта:

iptables -I POSTROUTING -p udp -m udp --sport 123 -j MASQUERADE --to-ports 60000-61000

AT & T блокирует исходящий трафик UDP с портом-источником 123, чтобы ослабить обычные атаки отражения NTP от скомпрометированных машин в сетях клиентов. Порт назначения 123 разрешен, но большинство клиентов NTP также используют 123 для исходного порта.

Вы можете убедиться, что их фильтрация влияет на вас, запустив ntpdate . Если исходный порт 123 отфильтрован, ntpdate pool.ntp.org завершится с ошибкой, а ntpdate -u pool.ntp.org успешно. (Параметр -u для ntpdate заставляет его использовать непривилегированный (> 1024) номер исходного порта.) Если оба теста не пройдены или оба теста пройдены успешно, возникает другая проблема, и этот обходной путь вряд ли поможет вам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .