Skip to main content

🌐 Návod: Instalace NTP serveru (Chrony) na Minisforum N100

Tento návod popisuje nasazení vysoce přesného časového serveru pomocí Dockeru a Portaineru. Konfigurace je navržena pro české prostředí s důrazem na bezpečnost (Rate-limiting pro WAN) a vysokou dostupnost (Stratum 1 zdroje).

📋 Specifikace řešení

  • Hardware: Minisforum N100 (Intel Alder Lake-N)

  • Platforma: Docker + Portainer (Stack)

  • Software: Chrony (v image cturra/ntp)

  • Cílová skupina: ~300 LAN zařízení + omezený přístup z WAN


🛠️ 1. Příprava prostředí

Procesory Intel N100 mají nízkou spotřebu, což je pro 24/7 NTP server ideální. Pro nejvyšší přesnost doporučujeme:

  1. Mít server připojený kabelem, nikoliv přes Wi-Fi (jitter).

  2. V BIOSu Minisforum zkontrolovat, zda je zapnuté High Precision Event Timer (HPET).


🚀 2. Nasazení v Portaineru (Stack)

Vytvořte nový Stack (např. ntp-server) a vložte následující kód.

Docker Compose (YAML)

version: "3.8"

services:
  ntp:
    image: cturra/ntp:latest
    container_name: ntp-server
    restart: unless-stopped
    
    # Host mód je klíčový pro přesnost mikrosekundy a viditelnost IP adres klientů
    network_mode: host
    
    # Vyžadováno pro manipulaci se systémovými hodinami
    user: "0:0"
    cap_add:
      - SYS_TIME

    # Definice konfigurace přímo v entrypointu (vše v jednom souboru v Portaineru)
    entrypoint: 
      - /bin/sh
      - -c
      - |
        cat <<EOF > /etc/chrony/chrony.conf
        # UPSTREAM ZDROJE (ČR + Svět)
        server ntp.nic.cz iburst
        server tik.cesnet.cz iburst
        server time.cloudflare.com nts iburst
        server time.google.com iburst

        # SYSTÉMOVÉ NASTAVENÍ
        driftfile /var/lib/chrony/chrony.drift
        makestep 1.0 3
        rtcsync

        # ACCES CONTROL LIST (ACL)
        # 1. LAN - neomezený přístup
        allow 192.168.0.0/16
        allow 10.0.0.0/8

        # 2. WAN - omezený přístup (Security)
        allow 0.0.0.0/0
        ratelimit interval 3 burst 8
        EOF
        
        # Spuštění démona
        exec /usr/sbin/chronyd -d -s

    healthcheck:
      test: ["CMD", "chronyc", "tracking"]
      interval: 60s
      timeout: 10s
      retries: 3

🔍 3. Diagnostika a ověření (Cheat Sheet)

Tyto příkazy spouštějte v terminálu pro kontrolu stavu:

Kontrola synchronizace s internetem

Zobrazí seznam upstream serverů. Hvězdička (*) značí vybraný hlavní zdroj.

docker exec -it ntp-server chronyc sources -v

Detailní přesnost hodin

Ukazuje, o kolik mikrosekund se váš server liší od atomového času.

docker exec -it ntp-server chronyc tracking

Monitoring klientů a Rate-limitu

Klíčové pro zjištění, zda někdo nezneužívá váš server z WAN.

docker exec -it ntp-server chronyc clients
  • NTP: Počet odpovědí.

  • Drop: Počet zahozených dotazů (pokud klient překročil limit).


🛡️ 4. Bezpečnostní poznámky

  • Rate-limit: Nastavený parametr interval 3 znamená, že klient může poslat dotaz v průměru jednou za 8 sekund. Krátkodobý "náraz" (burst) je povolen do 8 paketů.

  • NTS (Network Time Security): Cloudflare zdroj je nastaven s příznakem nts, což zajišťuje autentizaci času.


📝 5. Údržba

NTP server je prakticky bezúdržbový. Díky Intel N100 a Dockeru spotřebovává minimum RAM (~15 MB) a CPU (~0.1 %). Pokud v budoucnu změníte rozsahy LAN, stačí upravit řádky allow v Portaineru a dát Update the Stack.