1 (edytowany przez roed 2023-10-14 08:39:25)

Temat: [HOWTO] NTP - Konfiguracja

Postanowiłem spisać kilka uwag dotyczących konfiguracji serwera/klienta czasu (NTP). Tu nie ma nic nowego tylko zebranie w jednym miejscu informacji z kilu miejsc. Może się to komuś przyda a może ktoś ma coś do dodania.


Konfiguracja serwera:

Uruchamianie serwera NTP:

uci set system.ntp.enable_server=1
uci commit

service sysntpd reload

Konfiguracja DHCP:

Konfigurujemy serwer DHCP tak by przekazywał adres serwera NTP jeżeli ktoś się tego domaga:

uci add_list dhcp.lan.dhcp_option='option:ntp-server,0.0.0.0'
uci commit

service dnsmasq reload

Tutaj 0.0.0.0 oznacza "adres interfejsu na którym nasłuchuje serwer DHCP".

Konfiguracja zapory:

Konfigurujemy zaporę tak by wychodzący ruch NTP był przekierowywany na lokalny serwer NTP.

uci add firewall redirect
firewall.@redirect[-1].name='Redirect NTP requiests to local server'
firewall.@redirect[-1].src=lan
firewall.@redirect[-1].src_dport=123
firewall.@redirect[-1].dest=wan
firewall.@redirect[-1].target=DNAT
firewall.@redirect[-1].dest_ip=192.168.1.1
uci commit

service friewall reload

Adres 192.168.1.1 trzeba zamienić na odpowiedni adres sieci lokalnej.

Mój stary telefon SIP potrafi czasami wysyłać żądania NTP do kilku serwerów czasu jednocześnie kilkadziesiąt razy na minutę. Ta reguła pomaga nie wysyłać tego całego ruchu do internetu.

Zwracanie strefy czasowej przez DHCP

To nie jest bezpośrednio związane z serwerem czasu ale można też skonfigurować serwer DHCP tak by przekazywał strefę czasową jeżeli ktoś o nią poprosi (systemd, netplan).

uci add_list dhcp.lan.dhcp_option=option:posix-timezone,CET-1CEST,M3.5.0,M10.5.0/3
uci add_list dhcp.lan.dhcp_option=option:tzdb-timezone,Europe/Warsaw
uci commit

service dnsmasq reload

Odpowiedni łańcuch POSIX dla strefy czasowej można znaleźć tutaj.

Konfiguracja klienta

W przypadku gdy adres WAN jest zdobywany przez DHCP można usunąć listę serwerów NTP używać tylko adresów zwróconych przez DHCP (jeżeli takie adresy są zwracane):

uci delete system.ntp.server
uci commit

service sysntpd reload

Można też używać serwerów czasu Głównego Urzędu Miar.

uci add_list system.ntp.server=tempus1.gum.gov.pl
uci add_list system.ntp.server=tempus2.gum.gov.pl
uci commit

service sysntpd reload

Ustawienie strefy czasowej zwróconej przez DHCP

Najpierw musimy poprosić serwer DHCP o zwrócenie potrzebnych informacji:

uci set network.wan.reqopts='tzstr tzdbstr'

Potem musimy utworzyć skrypt /etc/udhcpc.user.d/10-timezone:

#
# udhcpc: Timezone from DHCP
#

set_transient_timezone() {
    echo $1 > /tmp/TZ

    [ -n "$2" ] && \
        [ -f "/usr/share/zoneinfo/$2" ] && \
        ln -sf "/usr/share/zoneinfo/$2" /tmp/localtime && \
        rm -f /tmp/TZ

    if [ -f /tmp/TZ ]; then
        echo "setting transient timezone to $(cat /tmp/TZ)"
    else
        echo "setting transient timezone to $(readlink /tmp/localtime)"
    fi
    hwclock -u --systz
}

case "$1" in
    renew|bound)
        [ -z "$tzstr" -a -z "$tzdbstr" ] || set_transient_timezone ${tzstr:-UTC} ${tzdbstr:-UTC}
    ;;
    deconfig)
        tzstr=$(uci -q get system.@system[0].timezone)
        tzdbstr=$(uci -q get system.@system[0].zonename)
        set_transient_timezone ${tzstr:-UTC} ${tzdbstr:-UTC}
    ;;
esac

2

Odp: [HOWTO] NTP - Konfiguracja

Przy okazji skryptów dla klienta DHCP to jeszcze jeden skrypt ustawiający nazwę hosta zwróconego przez DHCP.
Tworzymy plik /etc/udhcpc.user.d/20-hostname:

#
# udhcpc: Hostname from DHCP
#

set_transient_hostname() {
    echo "setting transient hostname to $1"
    echo $1 > /proc/sys/kernel/hostname
}

case "$1" in
    renew|bound)
        [ -z "$hostname" ] || set_transient_hostname $hostname
    ;;
    deconfig)
        hostname=$(uci -q get system.@system[0].hostname)
        set_transient_hostname ${hostname:-OpenWrt}
    ;;
esac

3 (edytowany przez rybirek 2023-10-14 10:20:01)

Odp: [HOWTO] NTP - Konfiguracja

Jak jest temat czasu i ntp, to może mi podpowiecie jak rozwiązać problem.

Podczas zaniku zasilania i później ponownym uruchomieniu zegar wbudowany w procesor idzie w powietrze (brak podtrzymywania) i ustawia losową datę ~100lat do przodu. Zanim sieć się podniesie i ntp złapie synchronizację, to usługi typu vnstat wpiszą sobie do bazy rekordy z przyszłości.
Pytanie, czy jest jakiś sposób na konfigurację openwrt, żeby tak się nie działo ?
Kompletnie nie rozumiem działania sysfixtime, może mi podpowiecie jaka jest idea jego działania ?

Pozostaje tylko napisanie własnego skryptu zapisującego okresowo datę i przy starcie dopóki nie załapie ntp to jej ustawienie ?

4

Odp: [HOWTO] NTP - Konfiguracja

W /etc masz plik ze złą datą. sysfixtime bierze datę z jednego z plików z katalogu /etc na dzień dobry, później sobie synchronizuje czas jak ma połączenie z internetem.

Najprościej - cyklicznie np. raz na godzinę zrób np. touch /etc/banner to po restarcie będzie miał czas z modyfikacji tego pliku lub jakiegoś nowszego (oczywiście wcześniej napraw nieprawidłową datę w innych plikach). Ale robienie takiego czegoś docelowo zniszczy flash nadmiernymi zapisami. 24 na dobę to i jak pewnie upłynie kilka lat zanim rozwali się router.
Mniej prościej - załatw sobie router który ma RTC (i upewnij się że ma dobry czas) lub np. odbiornik gps który taki czas też daje.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez rybirek 2023-10-14 12:57:29)

Odp: [HOWTO] NTP - Konfiguracja

Dzięki.
Router ma rtc, tylko trochę "źle działa".

[    1.511218] armada38x-rtc f2284000.rtc: registered as rtc0                                                      
[    1.516737] armada38x-rtc f2284000.rtc: setting system clock to 2104-12-09T11:58:57 UTC (4258267137) 

6

Odp: [HOWTO] NTP - Konfiguracja

rybirek napisał/a:

Dzięki.
Router ma rtc, tylko trochę "źle działa".

[    1.511218] armada38x-rtc f2284000.rtc: registered as rtc0                                                      
[    1.516737] armada38x-rtc f2284000.rtc: setting system clock to 2104-12-09T11:58:57 UTC (4258267137) 

To przestaw sobie w nim czas hwclock do tego  służy z odpowiednimi opcjami.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.