在内网Ubuntu 24.04.2 LTS上配置NTP时间同步服务的完整解决方案


主机/服务规划:
192.168.100.211/24 作为内网的授时服务器Time Server,其时间来自于外网中国境内的时钟服务器,在首次安装时完成时钟同步。
192.168.100.210/24 作为客户端Time Client,从Time Server处同步时间。
内网中其他主机192.168.100.*/24 也都从Time Server处同步时间,即对应授时服务地址配置为:192.168.100.211:123

一、共同配置 (192.168.100.211和192.168.100.210)

在TimeServer和TimeClient上都执行以下操作

  1. (可选)检查机器操作系统和内核版本是否一致:
hostnamectl
  1. (可选)设置内网机器的代理,便于在线安装软件:
sudo export http_proxy="http://192.168.100.222:8118" 

上面首先需要在同时能连接外网和内网的机器192.168.100.222上搭建了代理,并开放了8118端口。
搭建代理可以使用轻量级的privoxy,下载链接

  1. (可选)替换官方源为清华源,便于网络访问:
# 替换源为清华源
sudo cp /etc/apt/sources.list.d/webmin.list /etc/apt/sources.list.d/webmin.list.bak
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak

sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list.d/ubuntu.sources
sudo sed -i 's|http://.*security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list.d/ubuntu.sources
sudo tee /etc/apt/sources.list.d/webmin.list <<'EOF'
deb https://mirrors.tuna.tsinghua.edu.cn/webmin/download/repository sarge contrib
EOF

sudo apt update
  1. 排除所有对时间服务可能的干扰项或残留:
sudo systemctl stop chrony chronyd ntp ntpd systemd-timesyncd # 停掉所有时间相关服务
sudo systemctl disable chrony chronyd ntp ntpd systemd-timesyncd # 禁用所有时间相关服务
# 删除所有可能的残留服务文件
sudo rm -f /etc/systemd/system/ntp.service            /etc/systemd/system/chrony.service            /etc/systemd/system/multi-usem/multi-user.target.wants/chrony.service
sudo systemctl disable chrony chronyd ntp ntpd systemd-timesyncd
# 重新加载systemd
sudo systemctl daemon-reload

sudo pkill -9 chronyd || true
sudo pkill -9 ntpd || true

# 强制卸载所有相关包(即使报错也继续)
sudo apt purge --allow-remove-essential ntp chrony -y
sudo apt autoremove -y

# 检查dpkg状态
sudo dpkg --configure -a
sudo apt --fix-broken install

# 重建systemd单元数据库
sudo systemctl reset-failed
# 检查服务状态(应该显示"not-found")
systemctl status ntp chrony 2>&1 | grep -i "could not be found"

# 检查进程(应该无输出)
pgrep -l chronyd || pgrep -l ntpd
  1. 彻底配置系统时区为东八区时区,以防应用程序时区不统一导致问题:
# 1. 设置系统时区(自动更新所有相关文件)
sudo timedatectl set-timezone Asia/Shanghai

# 2. 手动验证关键文件
cat /etc/timezone               # 应显示 "Asia/Shanghai"
ls -l /etc/localtime            # 应指向 "/usr/share/zoneinfo/Asia/Shanghai"
date                            # 时间应显示 CST (China Standard Time)

# 3. 如果文件未自动更新,手动修复
echo "Asia/Shanghai" | sudo tee /etc/timezone
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

上述时区配置完成后,深度验证Java时区来源

# 创建时区检测工具类
cat > TimeZoneDebug.java <<'EOF'
public class TimeZoneDebug {
    public static void main(String[] args) {
        System.out.println("System Property: " + System.getProperty("user.timezone"));
        System.out.println("Default TimeZone: " + java.util.TimeZone.getDefault().getID());
        System.out.println("OS TimeZone File: " + new java.io.File("/etc/timezone").exists());
        try {
            System.out.println("File Content: " + java.nio.file.Files.readString(
                java.nio.file.Paths.get("/etc/timezone")).trim());
        } catch (Exception e) { e.printStackTrace(); }
    }
}
EOF

# 编译运行(观察所有输出必须指向Asia/Shanghai)
javac TimeZoneDebug.java && java TimeZoneDebug

期望输出为:

System Property: Asia/Shanghai 或 null
Default TimeZone: Asia/Shanghai
OS TimeZone File: true
File Content: Asia/Shanghai

二、Time Server配置 (192.168.100.211)

  1. 安装NTP服务:
sudo apt update
sudo apt install chrony -y
  1. 配置chrony(使用中国境内的NTP服务器):
sudo nano /etc/chrony/chrony.conf

修改为以下内容(保留原有注释):

pool ntp.ntsc.ac.cn iburst
pool cn.ntp.org.cn iburst
pool time1.cloud.tencent.com iburst
pool time2.cloud.tencent.com iburst

# 允许内网网段访问
allow 192.168.100.0/24

# 启用本地时间源(当外部源不可用时)
local stratum 10

# 其他保持默认
  1. 重启chrony服务并设置开机自启:
sudo systemctl restart chrony
sudo systemctl enable chrony
  1. 检查同步状态:
chronyc sources -v
chronyc tracking

三、Time Client配置 (192.168.100.210)

  1. 同样安装chrony:
sudo apt update
sudo apt install chrony -y
  1. 配置chrony指向内网服务器:
sudo nano /etc/chrony/chrony.conf

修改为:

# 注释掉默认的pool配置
# pool 2.debian.pool.ntp.org offline iburst

# 添加内网时间服务器
server 192.168.100.211 iburst

# 如果时间服务器不可用,允许使用本地时间
local stratum 10
  1. 重启服务:
sudo systemctl restart chrony
sudo systemctl enable chrony
  1. 检查同步状态:
chronyc sources -v
chronyc tracking

三、验证配置

在Time Server上检查客户端连接:

chronyc clients

在Time Client上手动触发同步:

sudo chronyc makestep

四、防火墙配置(如有需要)

在Time Server上允许NTP端口(123/udp):

sudo ufw allow from 192.168.100.0/24 to any port 123 proto udp
sudo ufw enable

五、注意事项

  1. 确保两台主机间网络畅通,无防火墙阻挡UDP 123端口
  2. 初始同步可能需要几分钟时间
  3. 如需更强制同步,可在客户端执行:
    sudo chronyc -a 'burst 4/4'
    sudo chronyc -a makestep
    
  4. 中国境内推荐NTP服务器列表:
    • 国家授时中心:ntp.ntsc.ac.cn
    • 腾讯云:time[1-5].cloud.tencent.com
    • 阿里云:time[1-7].aliyun.com
  5. 如果时间同步不成功,可能是因为时间偏差太大导致(超过8小时),需要先手动设置时间后再同步:
     sudo systemctl stop chrony
     sudo date -s "2025-05-30 11:10:53"  # 手动设置正确时间
     sudo systemctl start chrony
     chronyc tracking  # 检查是否同步
    

六、排错命令

  1. 检查服务状态:
systemctl status chrony
  1. 查看详细同步信息:
chronyc tracking
chronyc sources -v
  1. 检查NTP端口是否监听:
ss -unlp | grep chronyd

这种配置方案使用了chrony而非传统的ntpd,因为chrony在现代Linux系统上表现更好,特别是对于不总是联网的系统,且能更快地同步时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值