A public Stratum 1 GPS-synchronized NTP server providing precise time to our cul-de-sac and beyond!
1. Open Settings → Time & Language → Date & Time
2. Click Additional clocks (or Related settings → Additional date, time & regional settings)
3. Click Internet Time tab → Change settings
4. Enter the server address and click Update now:
ntp.grovestreet.zip
Open Command Prompt as Administrator and run:
w32tm /config /manualpeerlist:"ntp.grovestreet.zip" /syncfromflags:manual /update
net stop w32time && net start w32time
w32tm /resync
w32tm /query /status
w32tm /stripchart /computer:ntp.grovestreet.zip /samples:5
1. Open System Settings (or System Preferences on older macOS)
2. Go to General → Date & Time
3. Click Set date and time automatically and enter:
ntp.grovestreet.zip
One-time sync:
sudo sntp -sS ntp.grovestreet.zip
Permanent configuration:
sudo systemsetup -setnetworktimeserver ntp.grovestreet.zip
sudo systemsetup -setusingnetworktime on
# Edit configuration
sudo nano /etc/systemd/timesyncd.conf
# Add under [Time]:
[Time]
NTP=ntp.grovestreet.zip
# Restart service
sudo systemctl restart systemd-timesyncd
timedatectl timesync-status
# Install chrony
sudo apt install chrony
# Edit config
sudo nano /etc/chrony/chrony.conf
# Add at the top:
server ntp.grovestreet.zip iburst
# Restart
sudo systemctl restart chronyd
chronyc sources -v
sudo dnf install chrony
sudo nano /etc/chrony.conf
# Add: server ntp.grovestreet.zip iburst
sudo systemctl enable --now chronyd
chronyc tracking
sudo pacman -S chrony
echo "server ntp.grovestreet.zip iburst" | sudo tee -a /etc/chrony.conf
sudo systemctl enable --now chronyd
Configure via Group Policy Management (gpmc.msc):
Computer Configuration
→ Administrative Templates
→ System
→ Windows Time Service
→ Time Providers
→ Configure Windows NTP Client
Settings:
NtpServer: ntp.grovestreet.zip,0x9
Type: NTP
CrossSiteSyncFlags: 2
ResolvePeerBackoffMinutes: 15
ResolvePeerBackoffMaxTimes: 7
SpecialPollInterval: 3600
EventLogFlags: 0
# On PDC Emulator
w32tm /config /manualpeerlist:"ntp.grovestreet.zip" /syncfromflags:manual /reliable:yes /update
Restart-Service w32time
w32tm /resync /rediscover
Note: Only configure the PDC Emulator to sync externally. Other DCs sync from it via the domain hierarchy.
Configure your DHCP server to distribute the NTP server address automatically to all clients.
# /etc/dhcp/dhcpd.conf
option ntp-servers ntp.grovestreet.zip;
# PowerShell
Add-DhcpServerv4OptionDefinition -OptionId 42 -Name "NTP Servers" -Type IPv4Address -MultiValued
Set-DhcpServerv4OptionValue -OptionId 42 -Value "YOUR_NTP_IP"
# Or via GUI:
# DHCP Manager → Server Options → Configure Options
# → 042 NTP Servers → Add IP address
Services → DHCP Server → [Interface]
→ Other Options → NTP Server 1: ntp.grovestreet.zip
Settings → Networks → [Network] → DHCP
→ DHCP NTP Server: 178.238.99.189
The Open Time Project provides free, high-accuracy time synchronization using a GPS-disciplined Stratum 1 NTP server. Unlike typical Stratum 2+ servers that sync from other NTP servers over the internet, this server derives time directly from GPS satellites with nanosecond-level precision.
GPS Satellites → u-blox NEO-M9N: GPS satellites carry atomic clocks and broadcast precise time signals. The u-blox NEO-M9N GPS module receives these signals and produces two outputs:
NMEA → gpsd → Chrony: The NMEA data flows through gpsd (GPS daemon) which parses it and shares via shared memory. Chrony reads this for coarse time-of-day, but NMEA has ~45ms latency due to serial transmission — not precise enough on its own.
PPS → SDP2 → PHC: The PPS signal is routed via a direct PCB trace to the Intel i226 NIC's SDP2 (Software Defined Pin). When the pulse arrives, the NIC's PHC (PTP Hardware Clock) — backed by a TCXO (Temperature Compensated Crystal Oscillator) — timestamps exactly when it saw the pulse.
ts2phc → PHC Discipline: The ts2phc service reads these timestamps from /dev/ptp0. Since PPS pulses are defined to arrive exactly at .000000000, ts2phc can calculate the error. For example: "PHC said pulse arrived at .000000247 — that's 247ns fast." It then adjusts the PHC oscillator frequency to correct the drift, creating a continuous feedback loop that keeps the hardware clock aligned to GPS atomic time within nanoseconds.
PHC → Chrony → NTP Clients: Chrony reads the GPS-disciplined PHC directly as its primary time source. The PHC runs in TAI (International Atomic Time = UTC + 37 seconds), so Chrony applies the offset correction internally before serving UTC to NTP clients.
If GPS signal is temporarily lost, the TCXO maintains timing accuracy. With ~280ppb stability, the clock drifts only ~1ms per hour — plenty of time for GPS to reacquire.
Raspberry Pi 5, TimeHAT v6, TCXO-backed Intel i226-LM NIC with hardware timestamping, u-blox NEO-M9N GPS module.