Public NTP server on BPI-R3: the success story

I’ll start with the links:

Server information: https://ntp.immortalex.ru (A small info/statistics page is available here) GitHub Project: GitHub - ntpservernsk/bpir3ntp (Contains all setup information with configuration examples)

In short: I’m thrilled with the result! Yes, the BPI-R3 is a powerful router, but it’s still just a router handling many other tasks. Despite this, it’s running an NTP server with the maximum load settings the pool allows. According to the stats, it’s currently serving about 1.6% of requests in the RU zone – several times higher than the zone average (100/420 ≈ 0.24%). This translates to roughly 3000-4000 requests per second. The load is only around 10%, and that’s on a single core. So theoretically, the router could handle significantly more.

Unfortunately, right before committing and writing this post, I accidentally wiped my stats. So the graphs have just started updating. Hopefully, everything will look great in 24 hours, and I’ll post some examples on GitHub.

Any feedback or criticism is welcome!

Notable hardware observation: the board’s internal clock is extremely inaccurate. Chrony reports a consistent drift of -1073 ppm (losing ≈1.5 minutes daily). However, its drift variation is remarkably low—just ±0.1 ppm—allowing Chrony to compensate perfectly. Essentially, the clock runs significantly slow but does so with near-perfect consistency.

I suspect this stability quirk might explain why the stock ntpd package failed to run reliably, while chrony works flawlessly.

Ideally, I’d love to add a PPS source and become a Stratum 1 server. Unfortunately, that’s beyond my current skills. I found a few guides (fairly superficial ones) for Raspberry Pi, but they aren’t very applicable to OpenWrt. If someone wrote a detailed, step-by-step guide – even if it required soldering – I’d genuinely appreciate it and would absolutely take on the challenge!