Skip to main content

ubuntu18.04安装ntp,并配置内网校时,含离线安装NTP方法

在你的场景里,本质是做一个NTP层级结构

  • server-1:能访问互联网 → 作为上游时间源(NTP Server)

  • server-2:不能访问互联网 → 从 server-1 同步时间(NTP Client)

下面一步步配置 👇


一、在 server-1 上配置(作为 NTP 服务器)

1. 安装 NTP 服务

sudo apt update
sudo apt install ntp

2. 修改配置文件

编辑:

sudo vim /etc/ntp.conf

确保有公网时间源(默认一般已经有):

server 0.ubuntu.pool.ntp.org iburst
server 1.ubuntu.pool.ntp.org iburst
server 2.ubuntu.pool.ntp.org iburst

3. 允许内网 client(server-2)访问

在配置中添加(很关键):

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

👉 根据你的内网网段修改,比如:

  • 192.168.0.0

  • 10.0.0.0


4. 重启服务

sudo systemctl restart ntp

5. 检查是否正常同步公网

ntpq -p

看到类似:

*ntp1.aliyun.com

说明已经同步成功 ✅


6. 确认监听端口

sudo netstat -lnup | grep 123

二、在 server-2 上配置(作为客户端)


1. 安装 NTP

sudo apt update
sudo apt install ntp

2. 修改配置文件

sudo vim /etc/ntp.conf

👉 注释掉所有公网 server:

# server 0.ubuntu.pool.ntp.org iburst
# server 1.ubuntu.pool.ntp.org iburst

👉 添加 server-1:

server 192.168.1.10 iburst

(这里填 server-1 的IP)


3. 重启服务

sudo systemctl restart ntp

4. 验证同步状态

ntpq -p

看到:

*192.168.1.10

说明已经成功同步 🎉


三、可选优化(推荐)

1. 强制 server-1 作为时间源(避免无外网时漂移)

在 server-1 的 /etc/ntp.conf 添加:

local stratum 10

2. 防火墙放行(如果有防火墙)

server-1 需要开放 UDP 123:

sudo ufw allow 123/udp

3. 手动立即校时(客户端)

server-2 可以执行一次:

sudo ntpdate 192.168.1.10

四、整体结构图

互联网 NTP
     ↓
 server-1(有公网)
     ↓
 server-2(内网)

五、常见问题排查

❌ server-2 不同步?

检查:

  1. 能否 ping 通 server-1

  2. 防火墙是否放行 123/UDP

  3. server-1 是否在监听

  4. ntpq -p 是否有 reach 值(非0)


如果你愿意,我可以帮你把这套改成更现代的 chrony方案(Ubuntu 18.04更推荐)04 上离线安装 ntp,核心思路是:在有网的机器上下载 .deb 安装包及其所有依赖包,拷贝到无网机器上,然后使用 dpkg 进行批量安装。

由于 ntp 依赖于 libopts25 等库,直接拷贝一个 ntp.deb 通常会报错缺失依赖。最稳妥的方法是下载整个依赖树。

以下是具体操作步骤:

准备工作

    机器 A:有互联网权限的服务器(或任何一台能上网的 Ubuntu 18.04/相似环境电脑)。 机器 B:目标服务器(无网,需要安装 ntp)。 传输工具:U 盘、或者通过 scp 从机器 A 传到机器 B。

    第一步:在机器 A(有网)上下载安装包及依赖

    我们需要利用 apt-get download 配合 --print-deps 来一次性下载所有需要的包。

      创建存放目录

      mkdir ~/ntp-offline-packages
      cd ~/ntp-offline-packages
      

      下载 ntp 及其所有依赖包
      执行以下命令。这条命令会解析 ntp 的所有依赖,并下载当前系统架构(通常是 amd64)对应的所有 .deb 文件。

      # 获取依赖列表并下载
      apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances ntp | grep "^\w")
      

      解释:

        apt-cache depends ...:列出 ntp 的所有深层依赖。 grep "^\w":过滤出有效的包名。 apt-get download:只下载 .deb 包到当前目录,不进行安装(所以不会报依赖错误)。

        确认下载结果
        查看目录下是否有多个 .deb 文件:

        ls -lh *.deb
        

        您应该能看到类似 ntp_*.deb, libopts25_*.deb, libedit2_*.deb 等文件(具体依赖数量视系统环境而定,通常 5-10 个左右)。

        打包文件
        为了方便传输,打个包:

        cd ..
        tar -czvf ntp-offline.tar.gz ntp-offline-packages
        

        第二步:传输到机器 B(无网)

        ntp-offline.tar.gz 复制到机器 B。

          方法 1 (U 盘):拷贝到 U 盘,插到机器 B 上挂载复制。 方法 2 (SCP):如果机器 B 虽然没外网但能和机器 A 内网互通:
          # 在机器 A 上执行
          scp ntp-offline.tar.gz user@server2-ip:/home/user/
          

          第三步:在机器 B(无网)上安装

            解压文件

            tar -xzvf ntp-offline.tar.gz
            cd ntp-offline-packages
            

            批量安装所有 .deb 包
            使用 dpkg -i 配合通配符 *.deb 一次性安装当前目录下所有的包。dpkg 会自动处理同一批次内的依赖关系。

            sudo dpkg -i *.deb
            

            验证安装结果

              检查状态

              dpkg -l | grep ntp
              

              如果状态显示 ii同步更快更稳定。说明安装成功。

              检查服务

              systemctl status ntp
              

              如果看到 active (running),说明服务已启动。

              如果报错 "dependency problems":
              如果在第 2 步中仍然报错缺少某个特定的包(极少见,除非机器 A 和 B 的系统版本差异巨大,比如一个是 18.04.1 一个是 18.04.6 且基础库不同),您需要记下缺少的包名,回到机器 A,单独下载那个包:

              # 在机器 A 上
              apt-get download <缺失的包名>
              

              然后再次拷贝到机器 B 运行 sudo dpkg -i *.deb


              第四步:配置时间同步

              安装完成后,您就可以按照之前的方案配置 /etc/ntp.conf 了:

                编辑配置

                sudo vim /etc/ntp.conf
                
                  注释掉所有 pool 或 server 指向外网的行。 添加指向服务器 1 的内网 IP:
                  server 192.168.x.x iburst  # 替换为服务器 1 的 IP
                  

                  重启服务

                  sudo systemctl restart ntp
                  

                  验证同步

                  ntpq -p
                  

                  看到服务器 1 的 IP 前面出现 * 号即表示成功。

                  💡 备选方案:如果无法下载依赖

                  如果机器 A 和机器 B 的小版本号差异太大导致依赖包不匹配,或者您觉得下载依赖太麻烦,还有一个“简单粗暴”但不推荐用于生产环境的方法:

                  使用 ntpdate 命令(无需守护进程,只需一个二进制文件):

                    在机器 A 上下载 ntpdate 包:apt-get download ntpdate 如果它依赖 libopts25,也一起下载。 在机器 B 上 dpkg -i *.deb 在机器 B 上写个定时任务:*/5 * * * * /usr/sbin/ntpdate -u 192.168.x.x
                    (缺点:时间是跳变的,不是平滑过渡,可能导致日志时间错乱,但在极度受限环境下可用)

                    首选方案依然是上述的完整 ntp 离线安装。