Есть компьютер с FreeBSD 7.0 (но должно работать и для остальных версий)
Подключение к интернету производится через pppoe. Провайдер раз в сутки обрывает подключение,
соответственно при смене ip (он динамический) ntpd клинит - по команде ntpq -c pe
в колонке refid для всех серверов будет .INIT.Когда искал решение, наткнулся на следующий скрипт (немного модифицировал для FreeBSD):
#!/bin/sh
#
# reconfigNtpd, written by Jan Ceuleers, March 2003, revised October 2003
#
# Purpose: ntpd running on a machine that has intermittent connectivity to
# the Internet, and that does not have a static public IP address,
# loses its associations with public NTP servers, even after the
# connection to the Internet has been restored.
# Restarting the ntpd daemon is a possibility, but the downside
# is that this causes time not to be served to local clients until
# ntpd has regained synchronisation.
# A better way is to configure at least one local clock (the local
# clock 127.127.1.0 at high stratum and/or a refclock), to cover
# for the periods when there is no Internet connectivity, and to
# use this script to unconfig/add{server,peer} all public time
# servers at runtime (i.e. without restarting the daemon)
#
# Usage: reconfigNtpd | ntpdc
#
# Bugs: * This script only generates unconfig/addpeer and unconfig/addserver
# pairs. Any relevant fudge statements or iburst options etc. are
# ignored.
#
# * Location of keys file is hard-coded rather than being derived from
# ntp.conf
#
###
#
# Get keyid and password from /etc/ntp/keys
#
###
set -- $(grep "^15" < /etc/ntp.keys)
echo keyid $1
echo passwd $3
###
#
# Derive unconfig commands from ntpdc output
#
###
ntpdc -n -p | awk '!/==/ && !/^ / { if (substr($1,2) !~ /^127.127./)
print "unconfig " substr($1,2) }'
###
#
# Derive addserver commands from /etc/ntp.conf
#
###
awk '/^server[[:blank:]]/ { if ($2 !~ /^127.127./) print "addserver " $2
}' /etc/ntp.conf
###
#
# Derive addpeer commands from /etc/ntp.conf
#
###
awk '/^peer[[:blank:]]/ { print "addpeer " $2 }' /etc/ntp.conf
echo quit
(источник - http://www.arda.homeunix.net/ntpsetup.html)
Записываем куда-нибудь, где не потеряется.
Конфиг ntpd следующего вида:
/etc/ntp.conf
server <сервер>
server <сервер>
logfile /var/log/ntp.log
driftfile /var/db/ntp.drift
statsdir /var/db/ntpstats/
keys /etc/ntp.keys
trustedkey 1 2 15
controlkey 15 # ntpq
requestkey 15 # ntpdc
Теперь надо сгенерить ключи для управления.
env RANDFILE=/dev/random ntp-keygen
В директории, где запускали ntp-keygen будет файл
с ключами и симлинк ntpkey_MD5key_<название хоста>
В нём будут записаны 16 ключей надо взять содержимое этого файла и запихнуть его в /etc/ntp.keys
теперь (пере)запускаем ntpd
Для проверки делаем ./reconfigNtpd | ntpdc
Если про ошибки ничего не будет написано, значит всё хорошо.
Теперь цепляем это на ppp
Для этого пишем в файл /etc/ppp/ppp.linkup такое:
<название подключения>:
!bg sh -c "sleep 5; <путь>/reconfigNtpd | ntpdc"
Задержку в 5 секунд сделал для того, чтобы ntpdc запустился после прописывания маршрута.
URL:
Обсуждается: http://www.opennet.dev/tips/info/1741.shtml