← 回到技术随笔
· 9622 字

H3C交换机NTP时间同步配置实例

以 Ubuntu Server 24.04 LTS、Chrony、H3C S5570S 和 Comware V7 为例,搭建内网 NTP 时间源,配置交换机 IPv4/IPv6 时间同步,并检查同步状态。

本文以 H3C S5570S 系列和 Comware V7 为主要示例,只适用于本人拥有或已经明确授权管理的交换机。文中的地址和设备名称都是示例,使用时要换成现场实际规划。

一、现场场景

交换机接入网管系统后,我发现各交换机时间与服务器时间不一致。设备操作虽然都有记录,但时间对不上,出了问题排查起来很难判断事情发生的先后顺序。

这次把交换机时区设置为东八区(北京时间),再让它从公司的内网 NTP 服务器同步时间。NTP 报文统一使用管理 VLAN 100 的地址发出,方便服务器和防火墙识别。

本次使用下面的示例:

项目 示例值
交换机 HQ-Access-01
管理 VLAN 接口 Vlan-interface100
交换机 IPv4 192.168.100.2
交换机 IPv6 2001:db8:100::2
内网 NTP 服务器 IPv4 192.168.100.30
内网 NTP 服务器 IPv6 2001:db8:100::30
NTP 服务器系统 Ubuntu Server 24.04 LTS
NTP 服务程序 Chrony
时区 东八区 UTC+08:00

示例中的 IP 地址不能直接用于生产网络。NTP 服务器地址要向服务器管理员确认。

二、配置目标

  1. 在 Linux 服务器上启用 Chrony,只允许示例交换机访问;
  2. 把交换机显示时区设置为东八区;
  3. 同时配置内网 IPv4 和 IPv6 NTP 服务器;
  4. 使用管理 VLAN 接口作为 NTP 报文来源;
  5. 确认交换机已经选中可用的时间源;
  6. 检查当前时间和日志时间是否正确。

三、配置前检查

先查看交换机当前时间和 NTP 状态:

# 查看当前日期、时间和时区。
<HQ-Access-01> display clock

# 查看 NTP 是否已经同步,以及当前使用的时间源。
<HQ-Access-01> display ntp-service status

# 查看现有 IPv4 和 IPv6 NTP 会话。
<HQ-Access-01> display ntp-service sessions
<HQ-Access-01> display ntp-service ipv6 sessions

# 查看当前配置,确认设备是否已经使用 NTP 或 SNTP。
<HQ-Access-01> display current-configuration

NTP 和 SNTP 不能同时使用。如果当前配置中已经有 sntp 命令,要先确认它是否仍被现有系统使用,再决定迁移,不能直接叠加 NTP。

然后检查管理接口和 NTP 服务器是否可达:

# 确认管理 VLAN 接口处于 UP 状态,并且地址正确。
<HQ-Access-01> display interface Vlan-interface100

# 测试内网 NTP 服务器的 IPv4 地址。
<HQ-Access-01> ping 192.168.100.30

# 测试内网 NTP 服务器的 IPv6 地址。
<HQ-Access-01> ping ipv6 2001:db8:100::30

Ping 正常不代表 NTP 一定能用。交换机到服务器之间还要允许 UDP 123,NTP 服务器也要允许来自 192.168.100.22001:db8:100::2 的请求。

如果公司 NTP 服务器要求身份认证,还要提前取得服务器实际使用的密钥编号、算法和密钥。交换机与服务器参数必须完全一致,不能自己临时编一组。本文示例使用的是未启用 NTP 认证的内网服务器;要求认证的环境不能直接照搬后面的服务器配置。

四、配置 Linux NTP 服务器

这里以 Ubuntu Server 24.04 LTS 和 Chrony 为例。服务器必须长期在线、地址固定,而且自身已经能从可靠的上级时间源同步。临时开一台电脑虽然也能用,但电脑关机后,交换机就会失去时间源。

1. 安装并检查 Chrony

# 更新软件包索引。
ubuntu@ntp-server:~$ sudo apt update

# 安装 Chrony。已经安装时,apt 会提示无需重复安装。
ubuntu@ntp-server:~$ sudo apt install -y chrony

# 设置 Chrony 开机启动,并立即启动服务。
ubuntu@ntp-server:~$ sudo systemctl enable --now chrony

# 查看服务器当前使用的上级时间源。
ubuntu@ntp-server:~$ chronyc sources -v

# 查看服务器自身是否已经同步。
ubuntu@ntp-server:~$ chronyc tracking

chronyc tracking 中的 Leap status 应显示 Normal。如果服务器自己还没有同步,我不会急着让交换机使用它,而是先检查服务器原有的 serverpool 配置、DNS 和外网访问策略。

2. 只允许交换机访问

先备份配置文件,再编辑 /etc/chrony/chrony.conf

# 保留一份修改前的配置,回退时可以直接恢复。
ubuntu@ntp-server:~$ sudo cp -a /etc/chrony/chrony.conf /etc/chrony/chrony.conf.before-h3c-ntp

# 打开 Chrony 配置文件。
ubuntu@ntp-server:~$ sudo nano /etc/chrony/chrony.conf

保留服务器原有并且已经验证可用的 serverpool 配置,在文件末尾加入下面两行:

# 只允许示例交换机的 IPv4 地址向本机请求时间。
allow 192.168.100.2/32

# 只允许示例交换机的 IPv6 地址向本机请求时间。
allow 2001:db8:100::2/128

Chrony 默认不接受其他设备的 NTP 请求。加入 allow 后,它才会监听 NTP 使用的 UDP 123 端口,并且只响应允许的来源。这里没有加入 local 配置,避免服务器失去上级时间源后仍把自己的本地时间当成可靠时间提供出去。

保存文件后重启服务:

# 重新读取刚才修改的配置。
ubuntu@ntp-server:~$ sudo systemctl restart chrony

# 确认服务正在运行。
ubuntu@ntp-server:~$ sudo systemctl status chrony --no-pager

3. 放行 UDP 123

Ubuntu 常用 UFW 管理防火墙。先查看它是否已经启用,以及有没有对所有地址开放 UDP 123

# 查看 UFW 状态和现有规则。
ubuntu@ntp-server:~$ sudo ufw status verbose

# 双栈环境应显示 IPV6=yes,确保 UFW 同时处理 IPv6 规则。
ubuntu@ntp-server:~$ grep '^IPV6=' /etc/default/ufw

如果现有规则中已经对所有地址开放 123/udp,要先确认该规则是否仍被其他设备使用,再决定如何收紧。UFW 已启用时,可以只放行这台交换机:

# 只允许交换机 IPv4 地址访问 UDP 123。
ubuntu@ntp-server:~$ sudo ufw allow proto udp from 192.168.100.2 to any port 123 comment 'H3C NTP IPv4'

# 只允许交换机 IPv6 地址访问 UDP 123。
ubuntu@ntp-server:~$ sudo ufw allow proto udp from 2001:db8:100::2 to any port 123 comment 'H3C NTP IPv6'

# 按编号查看规则,确认 IPv4 和 IPv6 来源限制已经加入。
ubuntu@ntp-server:~$ sudo ufw status numbered

如果 ufw status 显示 inactive,不要在远程 SSH 会话中直接执行 ufw enable。启用防火墙前要先放行现有 SSH 管理端口,并核对服务器原来的安全策略,避免把自己挡在服务器外面。

五、Comware V7 配置实例

1. 设置时区

时区决定交换机显示哪个地区的时间,NTP 负责让这个时间保持准确。中国地区通常设置为东八区,再通过 NTP 服务器自动校准时间。

# 时区命令在用户视图下执行,不需要先进入 system-view。
# 把时区命名为 Beijing,并设置为 UTC 加 8 小时。
<HQ-Access-01> clock timezone Beijing add 08:00:00

执行后先看一眼显示结果:

<HQ-Access-01> display clock

如果所在地区不是东八区,要按所在地实际时区配置,不能照搬 08:00:00

2. 配置 IPv4 和 IPv6 NTP 服务器

这里使用管理 VLAN 接口作为源接口。只要 Vlan-interface100 保持 UP 且管理地址没有变化,服务器看到的来源就是交换机管理地址。如果管理接口关闭、地址被删除或管理 VLAN 不通,NTP 也会失效。

<HQ-Access-01> system-view

# 开启 NTP 服务。S5570S 默认未开启 NTP。
[HQ-Access-01] ntp-service enable

# 本机只作为 NTP 客户端,不向其他设备提供 IPv4 时间服务。
[HQ-Access-01] undo ntp-service time-server enable

# 同样关闭本机对外提供的 IPv6 时间服务。
[HQ-Access-01] undo ntp-service ipv6 time-server enable

# 指定 IPv4 NTP 服务器,使用 NTPv4,并从管理 VLAN 接口发出请求。
[HQ-Access-01] ntp-service unicast-server 192.168.100.30 version 4 source Vlan-interface 100

# 指定 IPv6 NTP 服务器,同样从管理 VLAN 接口发出请求。
[HQ-Access-01] ntp-service ipv6 unicast-server 2001:db8:100::30 source Vlan-interface 100
[HQ-Access-01] return

IPv4 命令和 IPv6 命令不能混写。IPv6 写法中,ipv6 位于 ntp-service 后面。

本文示例中的两个地址属于同一套内网时间服务。一般有一套就够了,如果公司系统对时间要求很高,会提供主、备两台 NTP 服务器,可以继续增加服务器命令,并且只给首选服务器添加 priority,避免设备在同优先级时间源之间频繁切换。

3. 等待设备完成同步

NTP 配置后不会保证瞬间完成同步。我通常先等待几个查询周期,再查看状态,不会看到命令执行成功就认为时间已经准确。

# 查看交换机整体同步状态。
<HQ-Access-01> display ntp-service status

# 查看 IPv4 会话及其可达性、层级和时间偏差。
<HQ-Access-01> display ntp-service sessions verbose

# 查看 IPv6 会话。
<HQ-Access-01> display ntp-service ipv6 sessions verbose

同步正常时,重点确认下面几项:

  1. Clock status 已经处于同步状态;
  2. Reference clock ID 不再是 INIT
  3. 服务器的可达计数不是 0
  4. 时钟层级不是 16,因为 16 表示尚未同步;
  5. 会话中的源接口为管理 VLAN 接口。

不要照抄网上的完整输出做比较。服务器层级、延迟和时间偏差会随现场环境变化。

六、Comware V5 配置

本文参考的 H3C S5500 Comware V5 Release 2208 使用 source-interface,并且 NTP 版本最高配置为 3:

# V5 的时区命令与 V7 相同。
<HQ-Access-01> clock timezone Beijing add 08:00:00

<HQ-Access-01> system-view

# 指定 IPv4 NTP 服务器,使用 NTPv3,并固定管理 VLAN 源接口。
[HQ-Access-01] ntp-service unicast-server 192.168.100.30 version 3 source-interface Vlan-interface 100
[HQ-Access-01] return

这个 V5 版本没有 V7 示例中的 ntp-service enable 命令,也没有本文需要的 ntp-service ipv6 unicast-server 配置,因此这里只能完成 IPv4 时间同步。双栈网络不能把这段 V5 配置当成完整的 IPv4/IPv6 NTP 配置。

如果现场使用其他 V5 型号或更晚的软件版本,应按该型号官方手册确认是否增加了 IPv6 NTP,不能仅凭“都是 V5”判断功能相同。

七、验证方法

1. 检查交换机时间

# 确认日期、时间和 UTC+08:00 时区正确。
<HQ-Access-01> display clock

# 确认整体状态已经同步,并显示有效的参考时间源。
<HQ-Access-01> display ntp-service status

把交换机时间与公司的标准时间页面、NTP 服务器或同一网管系统中的服务器时间比较。允许存在很小的显示差异,但不能相差几分钟或几个小时。

2. 分别检查 IPv4 和 IPv6

# 检查 IPv4 NTP 会话。
<HQ-Access-01> display ntp-service sessions

# 检查 IPv6 NTP 会话。
<HQ-Access-01> display ntp-service ipv6 sessions

配置了两种地址,不等于两种路径都能用。两张会话表都要能看到服务器,至少要确认地址解析、可达计数和会话状态正常。

3. 检查日志时间

查看最近的设备日志,把日志时间与当前时间比较:

# 查看设备日志缓冲区中的近期记录。
<HQ-Access-01> display logbuffer reverse

如果命令行时间正确,但旧日志仍显示以前的时间,这是正常现象。历史日志不会因为后来完成 NTP 同步而自动改写。应重点检查同步完成后新产生的日志。

验证正常后保存配置:

# 保存当前配置。
<HQ-Access-01> save force

4. 回到 Linux 服务器检查客户端

交换机发出几次 NTP 请求后,在 Linux 服务器上查看客户端记录:

# 使用 -n 直接显示 IP 地址,避免 DNS 解析影响查看速度。
ubuntu@ntp-server:~$ sudo chronyc -n clients

# 确认 Chrony 正在监听 UDP 123。
ubuntu@ntp-server:~$ sudo ss -lunp | grep ':123'

客户端列表中应能看到交换机的 IPv4 或 IPv6 地址,并且 NTP 计数会随着查询增加。这里只能证明服务器收到了请求,最终是否同步成功仍以交换机的 display ntp-service status 为准。

八、常见问题与处理

1. 状态一直显示未同步

先检查 NTP 服务器本身是否已经同步。服务器时钟层级为 16、服务未启动或 UDP 123 被拦截时,交换机都无法完成同步。

2. Ping 正常,但 NTP 不通

Ping 使用的不是 UDP 123。要检查服务器防火墙、中间安全设备和管理网 ACL,并确认服务器允许交换机管理地址访问。

3. IPv4 正常,IPv6 会话不可达

检查 IPv6 默认路由、管理 VLAN 的 IPv6 地址和服务器防火墙,再核对 IPv6 命令是否写成了 ntp-service ipv6 unicast-server

4. 时间正确,但日志差了八小时

先检查 display clock 中的时区,东八区应使用 add 08:00:00,不能写成 minus。如果交换机时间正确,还要检查日志时间格式和日志平台的时区设置,避免平台再次换算时间。

5. 配置后时间没有立刻跳到正确值

NTP 需要建立会话并判断时间源是否可靠。先查看会话的可达计数和时钟层级,不要反复删除重配。如果长时间不恢复,再检查网络、服务器状态和认证参数。

九、回退方法

1. Linux 服务器回退

如果服务器原来已经运行 Chrony,只恢复本文改动,不要卸载软件:

# 恢复修改前的 Chrony 配置。
ubuntu@ntp-server:~$ sudo cp -a /etc/chrony/chrony.conf.before-h3c-ntp /etc/chrony/chrony.conf

# 删除本文添加的 IPv4 防火墙规则。
ubuntu@ntp-server:~$ sudo ufw delete allow proto udp from 192.168.100.2 to any port 123 comment 'H3C NTP IPv4'

# 删除本文添加的 IPv6 防火墙规则。
ubuntu@ntp-server:~$ sudo ufw delete allow proto udp from 2001:db8:100::2 to any port 123 comment 'H3C NTP IPv6'

# 让 Chrony 使用原配置运行。
ubuntu@ntp-server:~$ sudo systemctl restart chrony

如果服务器原来没有 Chrony,是否停用服务要根据它有没有被其他设备使用来决定,不能直接关闭。

2. H3C 交换机回退

已有 NTP 配置时,要恢复变更前记录的服务器、时区和源接口。下面只删除本文新增的 V7 示例配置:

<HQ-Access-01> system-view

# 删除 IPv4 NTP 服务器。
[HQ-Access-01] undo ntp-service unicast-server 192.168.100.30

# 删除 IPv6 NTP 服务器。
[HQ-Access-01] undo ntp-service ipv6 unicast-server 2001:db8:100::30

# 关闭 NTP 服务。若还有其他 NTP 会话,不要执行这条命令。
[HQ-Access-01] undo ntp-service enable

# 恢复 NTP 对外服务的默认开关状态,但此时整个 NTP 服务仍处于关闭状态。
[HQ-Access-01] ntp-service time-server enable
[HQ-Access-01] ntp-service ipv6 time-server enable
[HQ-Access-01] return

# 恢复默认 UTC 时区。已有其他时区规划时,应恢复原配置。
<HQ-Access-01> undo clock timezone

关闭 NTP 后,交换机时间会继续依靠本地时钟运行,但时间偏差可能逐渐增大。回退完成后应尽快恢复原有时间同步方式。

十、小结

NTP 配置并不复杂,容易忽略的是时区、源接口和真实同步状态。我会先确认内网服务器及 UDP 123 可达,再配置 IPv4/IPv6 时间源,最后查看两种会话和新产生的日志。

有些公司没有单独部署 NTP 服务器,也可以使用一台长期在线、地址固定并且已经配置好 NTP 服务的电脑或服务器作为时间源。这台设备本身也要有可靠的上级时间源,配置完成后还要确认交换机、服务器和日志平台的时间保持一致。

只有 display ntp-service status 显示已同步,参考时间源有效,日志时间也正确,才能说明这项配置真正完成。

十一、完整配置汇总

下面分别汇总 Linux 服务器和 Comware V7 交换机的示例。执行前必须替换 IP 地址和管理接口。Linux 服务器原有的上级时间源配置需要保留,不能用下面的片段覆盖整个 /etc/chrony/chrony.conf

1. Linux NTP 服务器

/etc/chrony/chrony.conf 需要增加:

# 只允许示例交换机通过 IPv4 和 IPv6 请求时间。
allow 192.168.100.2/32
allow 2001:db8:100::2/128

服务器端执行:

# 更新软件包索引并安装 Chrony。
ubuntu@ntp-server:~$ sudo apt update
ubuntu@ntp-server:~$ sudo apt install -y chrony

# 备份当前配置文件。
ubuntu@ntp-server:~$ sudo cp -a /etc/chrony/chrony.conf /etc/chrony/chrony.conf.before-h3c-ntp

# 编辑配置文件,加入上面的两条 allow,然后启动并重启服务。
ubuntu@ntp-server:~$ sudo nano /etc/chrony/chrony.conf
ubuntu@ntp-server:~$ sudo systemctl enable --now chrony
ubuntu@ntp-server:~$ sudo systemctl restart chrony

# UFW 已启用时,只允许示例交换机访问 UDP 123。
ubuntu@ntp-server:~$ sudo ufw status verbose
ubuntu@ntp-server:~$ grep '^IPV6=' /etc/default/ufw
ubuntu@ntp-server:~$ sudo ufw allow proto udp from 192.168.100.2 to any port 123 comment 'H3C NTP IPv4'
ubuntu@ntp-server:~$ sudo ufw allow proto udp from 2001:db8:100::2 to any port 123 comment 'H3C NTP IPv6'
ubuntu@ntp-server:~$ sudo ufw status numbered

# 确认服务器已同步、UDP 123 正在监听,并查看交换机请求记录。
ubuntu@ntp-server:~$ chronyc tracking
ubuntu@ntp-server:~$ chronyc sources -v
ubuntu@ntp-server:~$ sudo ss -lunp | grep ':123'
ubuntu@ntp-server:~$ sudo chronyc -n clients

2. H3C 交换机

# 设置东八区时区。其他地区要替换为实际时区。
<HQ-Access-01> clock timezone Beijing add 08:00:00

<HQ-Access-01> system-view

# 开启 NTP 服务。
[HQ-Access-01] ntp-service enable

# 本机只作为客户端,不向其他设备提供 IPv4/IPv6 时间服务。
[HQ-Access-01] undo ntp-service time-server enable
[HQ-Access-01] undo ntp-service ipv6 time-server enable

# 配置 IPv4 NTP 服务器,使用 NTPv4 和管理 VLAN 源接口。
[HQ-Access-01] ntp-service unicast-server 192.168.100.30 version 4 source Vlan-interface 100

# 配置 IPv6 NTP 服务器,并使用管理 VLAN 源接口。
[HQ-Access-01] ntp-service ipv6 unicast-server 2001:db8:100::30 source Vlan-interface 100
[HQ-Access-01] return

# 检查当前时间、整体状态和 IPv4/IPv6 会话。
<HQ-Access-01> display clock
<HQ-Access-01> display ntp-service status
<HQ-Access-01> display ntp-service sessions verbose
<HQ-Access-01> display ntp-service ipv6 sessions verbose

# 检查同步后新产生的日志时间,确认正常后保存。
<HQ-Access-01> display logbuffer reverse
<HQ-Access-01> save force

参考资料