Эх, появись эта тема на пару месяцев раньше - мне, как опытному ламеру и сертифицированному гуманитарию, было бы куда легче настраивать ntpd: в сети слишком много инструкций и советов по решению проблем для очень разных систем и версий программы. С другой стороны, какая-то информация пригодилась и осела в голове и конфигах - может, смогу помочь обтесать инструкцию.
Для начала оговорюсь, что ставил и настраивал "голый" ntpd (без ntp-utils, ntp-keygen, и ntpdate) для Keenetic Ultra Rev.А (NDMS v2.08(AAGJ.0)C2, Entware-3x), т.е. возможно те проблемы, с которыми сталкивался я, у автора не возникали из-за разницы в оборудовании, версиях прошивок, и установленных пакетов. Теперь - к странностям, которые заметил в конфиге (опять же, крайне вероятно что это я ничего не понял) и решения тех проблем, с которыми я столкнулся:
путь в параметре "driftfile" к файлу "ntp.drift" оставлен по умолчанию, хотя в скрипте запуска "S77ntpd" вместо пути "/opt/var/lib/ntp/ntp.drift" указан "/opt/var/spool/ntp/ntp.drift". Из-за этого расхождения демон ожидаемо ругался в логах на отсутствие нужной папки и не мог записать файл на постоянную основу:
6 Jul 17:11:50 ntpd[13546]: frequency file /opt/var/lib/ntp/ntp.drift.TEMP: No such file or directory
Файл является критичным, т.к. именно в нём ntpd сохраняет вычисляемую им погрешность часов, и без неё работа демона не имеет смысла. Свою неполадку я решил редактированием пути в конфиге на путь из скрипта запуска. Помимо этого, стоит убедиться что ntpd имеет права производить запись по указанным путям и что файлы в указанных папках не стираются при перезагрузке роутера (в случае с путём из скрипта вышесказанное является верным - возможно, именно поэтому он и отличается от конфигурационного). Советую перепроверить оба пути на наличие файла погрешности, при его отсутствии - исправить конфиг.
Во-вторых: возможны неполадки при одновременной работе разных процессов обновления времени. Мне, например, пришлось отключить обновление времени в веб-интерфейсе NDMS.
В-третьих: при серьёзном расхождении времени системы с полученным временем от серверов (1000 секунд и более) ntpd "паникует" и отключается, с чем я по незнанию и столкнулся после перезагрузки роутера. Чтобы привести его в чувство, необходимо вручную задать дату со временем по любым достаточно точным часам и произвести перезапуск скрипта:
date -s ГГГГ-ММ-ДД чч:мм
/opt/etc/init.d/S77ntpd restart
Чтобы каждый раз после перезагрузки роутера не заниматься вводом этих команд, дополнительно был установлен пакет "fake-hwclock", сохраняющий показания времени при выключении роутера в отдельный файл и выставляющий их при его включении (хотя, как понимаю, с этим так же может справиться и ntpdate, который себе я не ставил - призываю более компетентных людей на помощь). Допытывание у Гугла также показало, что аргумент "-g" при запуске ntpd заставляет его перестать паниковать и таки произвести сверку часов; я посчитал, что имеет смысл дополнительно его прописать в строке ARGS= скрипта автозапуска.
Возвращаясь к конфигу, хочу обратить внимание на пункт "server 127.127.1.0 iburst". Cудя по документации для сравнительно недавней версии 4.2.8p8, этот адрес - указание для ntpd использовать драйвер, позволяющий использовать собственные часы системы (в нашем случае - роутера) как источник точного времени при отсутствии более надёжных, т.е. если я правильно понимаю, параметр iburst для него не нужен. При этом на других сайтах в официальной вики ntp.org (версия из кэша Google, на случай если страница не только у меня недоступна) из-за неточности этого драйвера рекомендуют обязательно настроить этот сервер как сервер Stratum-10, цитирую:
Благо, для этого надо лишь дописать в "ntp.conf" всего одну строчку:
fudge 127.127.1.0 stratum 10
Были у меня и ещё вопросы к предложенной конфигурации, но ввиду собственного ламерства будет гораздо честнее выложить инструкцию, на которую сам оглядывался при настройке, приложить собственный конфиг, и дождаться замечаний от более опытных пользователей.