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 不同步?
检查:
-
能否 ping 通 server-1
-
防火墙是否放行 123/UDP
-
server-1 是否在监听
-
ntpq -p是否有reach值(非0)
在 Ubuntu 18.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 离线安装。
No Comments