InfrastructureFebruary 13, 202614 min read

    Hosting a Public NTP Server on a Proxmox VM: Good or Bad Idea?

    Time is a silent pillar of any infrastructure: TLS, logs, replication, Kerberos — everything relies on a reliable clock. At RDEM Systems, we operate a public NTP pool , part of which runs on Proxmox VMs. Here is our real-world feedback.

    Clock drift in VMs: why it happens

    On a bare-metal server, the OS has direct access to the hardware clock (RTC, TSC). In a VM, things are different: the hypervisor virtualizes the clock. The CPU is shared among multiple VMs, and each one only receives its cycles in slices. The result: the VM clock can drift.

    Bare-metal vs VM: clock access

    Bare-metal

    Direct access to TSC / HPET
    No steal time
    Direct PPS interrupts
    Accuracy: < 1 µs (with PPS)

    Virtual machine

    Shared / virtualized TSC
    Steal time possible under load
    No PPS / GPIO access
    Accuracy: ~0.5–2 ms (NTP)

    The main drift factors in a VM: steal time (shared CPU), live migration (VM pause), and suspend/resume.

    This clock drift is manageable for most use cases — provided you use the right synchronization tool.

    To understand the concrete impacts of a desynchronized clock, read our article Why NTP accuracy is critical in virtualized environments (fr) : invalid TLS certificates, Kerberos failures, replica corruption — the consequences are very real.

    Chrony vs ntpd vs systemd-timesyncd

    Three NTP daemons coexist in the Linux ecosystem. Their behavior in VMs differs significantly.

    CriterionChronyntpdtimesyncd
    Resync after suspendFastSlow (minutes)Average
    NTP server modeYesYesNo
    Time step (makestep)Native-g flagN/A
    Burst modeiburstiburstNo
    NTS (Network Time Security)YesNoNo
    VM suitabilityExcellentPassableClient only

    Verdict: For an NTP server in a VM, Chrony is the obvious choice. It was designed for environments where the clock drifts (VMs, laptops, containers). It resynchronizes in seconds after a live migration, whereas ntpd can take several minutes. Moreover, Chrony is the only one to support NTS (Network Time Security) , the security extension for the NTP protocol.

    Optimal Chrony configuration for a public NTP server in a VM

    Here is a /etc/chrony/chrony.conf configuration tailored for a public NTP server hosted on a Proxmox VM. Each directive is commented.

    The key directive for VMs is makestep 0.1 5: it allows Chrony to forcefully correct the clock if the offset exceeds 100ms during the first exchanges — typically after a reboot, migration or suspend.

    Visit ntp.rdem-systems.com to see our public NTP pool in production, powered by this configuration.

    VM vs LXC vs bare-metal for hosting NTP

    The choice of hosting type directly impacts NTP service quality. Here is a comparison:

    CriterionVM (KVM)LXCBare-metal
    ClockVirtual (kvm-clock)Shared with hostDirect hardware
    Independent ChronyYesNo (host clock)Yes
    PPS / GPS accessNoNoYes
    Typical accuracy~0.5–2 ms= host accuracy< 1 µs (with PPS)
    Recommended stratum2 or 3Not suitable (no control)1 (with GNSS)
    Live migrationCauses a jumpN/AN/A
    IsolationFullPartialFull

    Why not LXC?

    An LXC container shares the host's clock: it cannot run its own NTP daemon independently. If the host drifts, the container drifts too. To serve NTP to external clients, you need a clock you control — meaning a VM or bare-metal.

    The honest verdict

    Proxmox VM: perfect for Stratum 2/3

    • ~1 ms accuracy — sufficient for 99% of use cases
    • TLS, Kerberos, logs, replication: no issues
    • Chrony compensates clock drift automatically
    • Easily redundant (multiple VMs on different hosts)

    Bare-metal: required for Stratum 1

    • Direct access to GNSS receiver (GPS, Galileo)
    • PPS signal via GPIO or serial port
    • Sub-microsecond accuracy required
    • Hardware interrupts without virtualization

    Our experience: the RDEM Systems NTP pool

    At RDEM Systems, we operate a public NTP pool that combines both approaches:

    Architecture of the ntp.rdem-systems.com pool

    Stratum 1

    Raspberry Pi + GNSS

    Bare-metal server with GNSS receiver (GPS + Galileo) and PPS signal. A personal project from 2017, reintegrated into the company in early 2026. The pool's reference source.
    Direct synchronization
    Stratum 2

    VM Proxmox + Chrony

    NTP relay on a Proxmox VM. Synchronized to the Stratum 1 server + public pool as fallback. Serves network clients and the public pool.

    The Stratum 1 provides the absolute time reference. The Stratum 2 VM relays distribute time to clients.

    This hybrid architecture allows us to combine the absolute accuracy of bare-metal GNSS with the flexibility and redundancy of Proxmox VMs. Site details, the autonomous AS206014 network and the history since 2005 are documented on our NTP infrastructure page .

    You can check your machine's synchronization directly from our website. And for NTP security, see our page on NTS (Network Time Security) .

    Best practices for NTP on a Proxmox VM

    Operational checklist

    • Install qemu-guest-agent in the VM: allows Proxmox to communicate with the VM (fsfreeze, clean shutdown)
    • Chrony on the host too: the Proxmox hypervisor must itself be synchronized — a reliable hardware clock benefits all VMs
    • Monitor the offset: watch chronyc tracking — an offset > 10ms is a warning sign
    • Reliable NTP sources: prefer well-known Stratum 1 servers (PTB, NIST, your own GNSS) rather than the public pool alone
    • Minimum 3 sources: Chrony can detect and exclude a faulty source with at least 3 upstream servers
    • Aggressive polling in VMs: minpoll 4 maxpoll 6 (16s–64s) compensates for more frequent drift
    • Test after live migration: verify that Chrony resynchronizes within seconds after a VM move

    Summary table

    ScenarioRecommendation
    Public NTP Stratum 2/3Proxmox VM + Chrony — reliable and flexible
    NTP Stratum 1 GNSSBare-metal required — PPS access needed
    Enterprise internal NTPVM more than sufficient
    High-frequency tradingBare-metal + PTP — sub-µs accuracy
    Simple NTP clientVM, LXC or bare-metal — all suitable
    NTP daemon in LXCNot recommended — clock shared with host

    Frequently asked questions

    Official documentation

    To dive deeper into the concepts covered in this article:

    Related articles

    Need a time-synced Proxmox infrastructure?

    We deploy and monitor NTP servers, configure Chrony on your Proxmox clusters, and operate a public NTP pool that you can use freely.