ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

交换机NTP时间同步配置与自建时间服务器实战指南

交换机NTP时间同步配置与自建时间服务器实战指南 记得刚做运维那两年我最怕的就是半夜被叫起来查“日志没记录”的故障。折腾半天最后发现是设备时间偏了几分钟日志时间线整个错位对不上号。后来我养成一个习惯无论装什么服务器、交换机、摄像头第一件事就是把时间同步NTP配置好。这篇就围绕“设置交换时间同步NTPInternet”这个话题把从时间源选型、交换机配置、自建NTP服务器到终端设备同步的整套实操经验分享出来。NTPNetwork Time Protocol是网络设备用来与Internet时间源或内网时间服务器校准时钟的标准协议。不管是物理交换机、虚拟机还是一台普通的Windows电脑只要接入网络都免不了和“时间”打交道。这篇文章适合网管、运维新手、自建机房的个人开发者也适合正在搭监控系统、需要统一摄像头时间的同学。我会尽量把操作步骤写到能直接复制执行的程度同时把背后的原理讲清楚。1. 时间不同步到底有多坑——先搞懂NTP在解决什么问题1.1 不是“对个表”那么简单时间偏差引发的连锁故障很多刚入门的朋友觉得时间差个几秒钟无所谓大不了自己看一眼手表改一下。但在真实网络环境里时间偏差引发的故障往往非常隐蔽而且排查成本极高。最典型的例子是HTTPS证书校验。证书的签发时间和到期时间都是基于绝对时间计算的如果客户端设备时间比真实时间偏早或偏晚超出了证书有效期范围浏览器就会直接报“证书无效”。我第一次遇到这个问题时还以为是证书配置错了查了半天最后发现是服务器时间快了整整一天。类似的情况还有Kerberos认证域环境里客户端和域控的时间差超过5分钟认证直接失败现象就是“用户无法登录”、“共享文件夹打不开”。日志和监控是另一个重灾区。运维排查故障的基本操作就是“以日志时间线为准”回放整个过程比如防火墙的拦截记录、交换机的接口up/down记录、服务器的应用报错。如果几台设备时间各差几分钟整个时间线就是乱的根本没法定位是先有故障还是先有告警。更麻烦的是这些时间偏差是持续累积的不是固定差多少你根本无法靠“脑补减去几分钟”来对齐。还有定时任务和数据库同步。Linux的crontab、Windows的任务计划程序都按照本地时间执行。如果服务器时间漂移严重凌晨3点的备份任务可能在早上8点才运行这会影响业务低峰期的窗口安排。数据库主从复制、消息队列的延迟告警也依赖各节点时间基本一致否则会出现“从库比主库慢了好几秒”的假性延迟。1.2 NTP的工作原理用一句话讲明白“网络对时”NTP的核心思路并不复杂客户端在发起同步时向NTP服务器发送一个带有本地时间戳的请求包服务器收到后在响应包里附上“我收到请求的时间”和“我发出响应的时间”。客户端收到响应后再记录一下“我收到响应的时间”。这样客户端手里就有四个时间点T1发出请求时间、T2服务器收到请求时间、T3服务器发出响应时间、T4收到响应时间。通过这四个时间点可以计算出网络延迟并校正本地时钟的偏移。通俗点说就像你给远方的人写信问时间对方回信时注明了写信和收信的钟点你结合信在路上的耗时就能倒推出自己表快了还是慢了。NTP服务器之间是有层级Stratum关系的。Stratum 0是原子钟、GPS等权威时间源Stratum 1直接与Stratum 0相连Stratum 2再与Stratum 1同步以此类推最多到Stratum 15。层级越深理论上精度越差但对绝大多数场景来说内网服务器从Stratum 2或者Stratum 3同步精度已经完全够用。我们常说的“Internet时间源”指的就是这些通过公网可访问的权威或公共NTP服务器。2. 时间源选型与Internet可达性检查——把源头先搞干净2.1 常见的Public Internet NTP时间源既然叫“设置交换时间同步NTPInternet”那第一件事就是确定时间源。很多人上来就问“IP是多少”其实现在国内公共NTP服务已经非常成熟直接用域名更省心因为域名背后有多台服务器在负载均衡可用性比单一IP高得多。我自己常用的是这几个国家授时中心ntp.ntsc.ac.cn。背靠中科院国家授时中心国内延迟低权威性没得说适合对时间准确性要求较高的场景。阿里云公共NTPntp.aliyun.com还有ntp1、ntp2、ntp3一直到ntp7等子域名。国内网络优化做得比较好解析出来的IP基本都在国内。腾讯云公共NTPtime.cloud.tencent.com另外还有time1、time2、time3等。华为云公共NTPntp.myhuaweicloud.com。NTP Pool Projectcn.pool.ntp.org。这是全球性志愿者项目在中国区的入口由大量公共NTP服务器组成如果你不想绑定某一家云厂商用它也行。选型逻辑其实很朴素如果设备能访问公网优先选国内的公共NTP服务器延迟低、丢包少如果内网设备多建议在内网搭一台NTP服务器设备全部指向内网服务器再由这台服务器去同步公网NTP这样可以避免上百台设备同时去请求公网服务。至于用哪家的域名我建议至少配置两个一主一备防止单一时间源故障导致全员时间漂移。2.2 检查设备到时间源是否“确实通”别让“没有Internet”背锅配置NTP之前最重要的一步是确认设备到时间源的UDP 123端口是否通。这里有个非常容易踩的坑很多人看到系统提示“无Internet访问”就直接断定“NTP也同步不了”。实际上NTP走的是UDP 123端口而Windows或手机上的“无Internet”检测通常依赖HTTP/HTTPS请求两者完全是两码事。我碰到过好几次“校园网显示无Internet但NTP照样能同步成功”的情况。因为校园网认证只是拦截了普通的网页流量UDP 123可能仍然能出网。反过来也一样有时候网页能打开但NTP请求被运营商的防火墙或企业防火墙挡掉了一样同步失败。所以正确的测试方式是用NTP专用工具去探测在Linux客户端上可以用ntpdate -q ntp.aliyun.comntpdate的-q参数只查询不同步可以用来快速验证时间源是否可达。如果输出里有类似offset、delay的信息说明UDP 123是通的。如果一直卡住或者提示no server suitable for synchronization found那大概率是网络不通。在Windows上可以用w32tm /stripchart /computer:ntp.aliyun.com /dataonly /samples:3这个命令会画出到时间源的往返延迟能看到数据就说明通看不到就说明UDP 123被挡了。如果确认不通就去查防火墙和路由。Linux的iptables/firewalld、Windows的入站规则、企业出口防火墙的NAT策略都要放行UDP 123。别忘了检查交换机ACL很多网络环境里三层交换机或核心交换机上做了ACL限制需要显式放行NTP流量。注意ping不通不代表NTP不通因为ICMP可能被禁ping得通也不代表NTP一定通因为UDP 123端口可能单独被封。一切以ntpdate或w32tm实测结果为准。3. 交换机上配置NTP时间同步——把“交换”这台设备做扎实3.1 先说清楚交换机为什么必须做时间同步标题里的“交换”两个字在网络语境下最直接的解释就是交换机。很多新手会忽略交换机的时钟问题觉得“交换机就是个转发数据的盒子时间不准无所谓”。但回看告警、排查环路、分析日志的时候交换机的时间戳是最底层的依据。举例来说当网络出现广播风暴或环路核心交换机、接入交换机都会产生大量日志你需要根据Syslog服务器上的时间戳判断故障是从哪个端口、哪个时刻开始的。如果交换机时间不准日志时间线就乱了根本无法还原故障过程。再比如802.1X认证、动态ARP检测这类安全特性也需要交换机有可靠的时间来源。3.2 常见厂商配置实操H3C、华为、锐捷不同厂商命令不一样但配置思路是共通的开启NTP功能、指定时间服务器、设置时区、确认同步状态。H3C华三/HP兼容设备的配置大概是这样的system-view ntp-service enable ntp-service unicast-server ntp.aliyun.com clock timezone Beijing add 08:00:00配置完成后用以下命令确认同步状态display ntp-service status看到clock status: synchronized、stratum level等字段说明已经同步成功。再看时间是否正常display clock华为设备的配置类似system-view ntp-service unicast-server ntp.aliyun.com clock timezone BJ add 08:00:00验证命令display ntp-service sessions display ntp-service status如果希望多个时间源可以在命令里重复指定ntp-service unicast-server ntp.aliyun.com ntp-service unicast-server time.cloud.tencent.com锐捷、部分思科风格的交换机则是enable configure terminal ntp server ntp.aliyun.com prefer clock timezone CST 8prefer表示首选该时间源如果配置了多个时间源交换机优先与prefer的服务器同步该服务器不可达时才切到备用。验证命令通常是show ntp status show ntp associations3.3 “同步间隔”和“时区”这两个坑配置交换机NTP时有两个细节经常被忽略一个是同步间隔一个是时区。同步间隔在NTP协议里有默认的轮询区间一般是2的指数次方秒起步比如64秒、128秒然后逐渐退避到更大的间隔。这个设计是为了减少对NTP服务器的压力。普通场景下保持默认即可不需要手动去改。有些设备确实暴露了ntp-service poll-interval之类的参数除非有特殊要求否则不建议把间隔调到非常短尤其当内网有成百上千台设备时过短的轮询间隔会白白消耗带宽和设备CPU。时区问题更常见。网络设备出厂时很多默认使用UTC协调世界时作为时区而咱们国内是UTC8也就是北京时间。如果你只配置了NTP服务器没配置时区那么设备显示的日志时间会一直比北京时间慢8小时。这看起来像是NTP没生效实际上NTP同步的是UTC标准时间时区只是显示层面的事情。处理方式就是在配置里显式加上东八区时区。H3C用clock timezone Beijing add 08:00:00华为用clock timezone BJ add 08:00:00思科/锐捷用clock timezone CST 8。有些设备还涉及夏令时国内目前不实行夏令时所以基本不用配置DST相关参数。实操心得配置完NTP后不要只看display clock的时间对不对还要确认UTC时间和北京时间是否都符合预期。我的习惯是先用display clock看本地时间再用display ntp-service status确认同步状态两个都对上才算配置成功。4. 自建NTP服务器Windows和Ubuntu一条龙4.1 为什么内网里最好有一台自己的NTP服务器当网络规模超过三五十台设备我非常建议在内网自建一台NTP服务器而不是让所有设备都直接连公网NTP。原因有三个。第一公网NTP虽然稳定性不错但毕竟依赖上游网络质量万一出口线路抖动全内网设备都会受影响。内网NTP服务器从公网同步一次然后内网设备全部指向它相当于做了一层缓冲。第二很多隔离网络、安全域的设备本身就无法访问公网内部必须有一台“权威”的时间源否则这些设备的时间只能靠手动设置越飘越远。第三从管理角度把时间源集中化出问题的时候只需排查一台服务器而不是去追踪每台设备的上游时间源指向。4.2 Windows Server开启NTP服务Windows Server自带的W32Time服务就可以当NTP服务器用配置起来不复杂但有几个注册表和服务的坑需要注意。这个问题也是很多人在网上搜“windows server 2008怎么开启ntp”的原因。在Windows Server上依次执行以下操作先打开注册表编辑器regedit找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters将Type的值改为NTP表示本机作为NTP服务器对外提供服务。再找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config将AnnounceFlags的值改为5十进制或0xa十六进制表示本机是可信任的时间服务器允许向外发布时间。然后配置上游时间服务器。在命令提示符管理员里执行w32tm /config /manualpeerlist:ntp.aliyun.com,0x1 ntp.ntsc.ac.cn,0x1 /syncfromflags:manual /reliable:yes /update这里的0x1表示使用特殊模式进行时间同步一般照抄即可。/reliable:yes是给本机标记为可靠时间源。重启时间服务并强制同步net stop w32time net start w32time w32tm /resync最后验证是否对外提供服务可以在另一台电脑上执行w32tm /stripchart /computer:Windows服务器IP /dataonly /samples:3如果能看到时间数据说明Windows服务器已经可以当NTP服务器使用。注意Windows Server 2008 R2及更老的系统W32Time默认可能不是自动启动状态而且存在一些已知的同步机制问题。如果是生产环境建议打全系统补丁或者直接用Linux搭建NTP服务稳定性更好。4.3 Ubuntu搭建NTP服务器用chrony最省心在Linux上搭建NTP服务器我非常推荐用chrony而不是老牌的ntpd。chrony配置更简单同步速度更快而且对网络抖动和间歇性断网的适应性更好。Ubuntu 18.04之后的系统很多默认已经装了chrony直接用就行。安装命令apt update apt install chrony -y编辑配置文件/etc/chrony/chrony.conf# 上游时间服务器推荐配置多个 pool ntp.aliyun.com iburst pool ntp.ntsc.ac.cn iburst # 允许内网哪些网段来同步时间 allow 192.168.1.0/24 allow 10.10.0.0/16 # 本机时间不同步时仍然对外提供服务 local stratum 10其中pool关键字用来配置上游服务器iburst表示在第一次同步时快速发送多个请求缩短启动后达到同步状态的时间。allow指定允许哪些内网网段访问本机的NTP服务。local stratum 10这行的意思是如果本机暂时同步不到上游服务器它依然会以Stratum 10的层级给内网其他设备提供时间保证内网不至于“没源可同”。重启服务并验证systemctl restart chrony chronyc sources -v看到输出里^*开头的行说明已经与上游服务器同步成功。*表示当前选中的同步源^表示这是一个服务器源。再确认本机时间状态timedatectl输出里System clock synchronized: yesNTP service: active就说明一切正常。4.4 让Windows客户端指向内网NTP服务器服务器搭好后客户端配置也简单。Windows电脑如果不想进图形界面点来点去直接用命令w32tm /config /manualpeerlist:192.168.1.10,0x1 /syncfromflags:manual /update w32tm /resync这里的192.168.1.10就是内网NTP服务器的IP。如果是在域环境里可以靠组策略GPO统一下发“配置Windows NTP客户端”策略把NtpServer指向内网服务器省得每台电脑手动改。对于非域环境的小规模网络也可以用批量脚本或者远程命令统一执行上述w32tm命令。Linux客户端配置就写进chrony或ntpd的配置把上游服务器改成内网IP即可。例如sed -i s/^pool/#pool/ /etc/chrony/chrony.conf echo server 192.168.1.10 iburst /etc/chrony/chrony.conf systemctl restart chrony实操心得自建NTP服务器时记得把防火墙放行UDP 123。Ubuntu上如果没有放行外部设备来请求会直接超时。可以用ufw allow 123/udp或者云防火墙、安全组里加一条入方向UDP 123规则。5. 终端设备与监控设备的时间同步——把高频场景都聊透5.1 Windows电脑时间同步从图形界面到命令行普通办公电脑的Windows时间同步最常见的就是右下角时间右键“调整日期/时间”然后在“同步时钟”里点击“立即同步”。如果系统默认连的是time.windows.com有时候在国内网络环境下同步不太稳定建议改成国内公共NTP服务器比如国家授时中心或阿里云。修改方式有两种。一种是图形界面设置 - 时间和语言 - 日期和时间 - 其他日期、时间和区域格式设置 - 设置时间和日期 - Internet时间 - 更改设置 - 服务器填ntp.aliyun.com点击立即更新。另一种是命令行适用于批量操作w32tm /config /manualpeerlist:ntp.aliyun.com /syncfromflags:manual /update w32tm /resync如果执行w32tm /resync时报错最常见的提示是“服务未启动或未启用”。可以先执行net start w32time w32tm /config /syncfromflags:manual /update w32tm /resync另外注意Windows的“自动设置时间”和“自动设置时区”这两个开关最好都打开。很多人只改了时间同步服务器却忘了时区被手动改错结果时间总差8小时。打开自动时区之后系统会根据当前所在时区自动调整。5.2 海康摄像机时间同步步骤监控系统的时间线统一监控项目是NTP需求最密集的场景之一。海康摄像机如果时间不准录像回放时会发现“回放时间点和实际案发时间对不上”这是很容易被忽略但影响很大的问题。海康摄像机的NTP配置路径一般是这样进入摄像机Web管理页面在“配置 - 系统 - 时间配置”里勾选“启用NTP”服务器地址填内网NTP服务器IP或公网NTP域名同步间隔可以按需设置比如默认的60分钟就够用。填完点“保存”即可。但这里有个更优做法如果你使用了海康NVR网络录像机最好让NVR统一校时然后让所有IPC网络摄像机指向NVR进行时间同步而不是每台摄像机都直连公网NTP。这样做的好处是NVR会统一管理整个监控系统的时间即使某台摄像机网络中断只要它还能连到NVR时间也能恢复一致。在NVR的“系统配置 - 时间配置”里也可以勾选NTP把NVR的上游指向内网NTP服务器或公网NTP。大华和其他品牌摄像机的配置逻辑也类似基本都是“启用NTP - 填服务器地址 - 设同步间隔”。遇到个别老固件不支NTP的只能手动校时建议能升级固件就升级固件。5.3 别忘了AP、防火墙、IoT等“看不见”的设备我见过不少项目服务器、交换机、摄像头都做了NTP唯独无线AP、防火墙、门禁控制器、工业网关这些设备被漏掉了。这些设备表面上不影响核心业务但它们产生的日志如果时间不对一旦出安全问题或者链路抖动排查时同样是灾难。尤其是防火墙因为它是安全边界所有攻击日志、策略命中日志都在它上面时间不准会导致整个攻击溯源没法做。建议在给防火墙、AC控制器、AP下发配置时顺手把NTP服务器地址也写了。如果设备支持最好也统一时区到东八区。6. 常见问题与排查技巧实录6.1 高频故障速查表我在给客户排查NTP问题时遇到的症状相对集中整理成了一张速查表症状可能原因排查命令解决办法时间总是差8小时时区未配置或配置错误timedatectl、display clock显式设置时区为UTC8NTP同步完全失败UDP 123端口不通ntpdate -q、w32tm /stripchart检查防火墙、ACL、NAT放行UDP 123Windows报错“服务未启动”W32Time服务未启用或配置丢失net start w32time启动服务并重新执行w32tm配置交换机的时钟来回跳变多个时间源不一致且未指定优先display ntp-service sessions配置prefer指定首选时间源摄像机时间总是不对NVR和IPC没统一切到同一时间源检查NVR/IPC的时间配置页面让IPC指向NVRNVR指向NTP服务器系统显示“无Internet”但网络正常HTTP连通性与NTP连通性不是一回事直接测UDP 123确认需求后再决定是否放行UDP 1236.2 分段排查法先测源、再测中间、最后看客户端如果NTP同步失败我有一个固定的排查顺序能帮你在最短时间内定位问题。第一步先在本机命令行直接测上游时间源。Linux用ntpdate -q 上游服务器IP或域名Windows用w32tm /stripchart /computer:上游服务器 /dataonly /samples:3。这能判断“本机到时间源”这一段通不通。不通就检查本机出网和防火墙规则。第二步如果本机能通但设备不通则检查中间链路。例如交换机A配置了NTP但一直不同步可以先在交换机上ping一下NTP服务器IP再用扩展的display ntp-service sessions看会话建立情况确认是不是ACL或默认路由挡了。第三步确认服务器自身时间已经同步。如果内网NTP服务器连公网源都是断的那它给内网下发的时间自然也不准。先保证“源头”干净再去排查下游。6.3 抓包验证NTP报文一锤定音的办法当日志、命令都看不出问题或者怀疑有人私搭NTP服务时可以直接抓包。在Linux服务器上用tcpdump抓UDP 123端口tcpdump -i eth0 udp port 123 -n -c 20正常情况下你会看到连续的NTP请求包和响应包源端口或目的端口是123。如果只有请求包没有响应包那说明响应方向被防火墙丢弃了要么是服务器端没放行要么是回程路由有问题。如果抓包看到响应了但客户端依然不同步那就要看看响应包里的“Stratum”和“Leap Indicator”字段。如果Stratum是16表示服务器认为自己的时间源不可用大概率是上游配置错误导致的而不是网络问题。6.4 重启后失效别忘了固化配置NTP配置有个很容易被忽略的点就是重启后是否生效。特别是交换机很多新手直接在命令行敲了ntp-service unicast-server当时显示同步成功但忘了保存配置设备一重启配置就丢了。Linux和Windows也一样。Linux上要确保chrony服务设为开机自启systemctl enable chronyWindows的W32Time服务默认是自动启动但如果手动改过启动类型要检查一下是否被改成了“手动”。我的习惯是任何设备做完NTP配置后都会执行一次保存操作。华为/H3C交换机是save锐捷是writeLinux如果是ntpd老服务用service ntp startchrony则直接检查systemd服务状态。保存完之后再强制重启试一次确认配置还在才算完成。写在最后的一次小经验NTP配置本身不复杂但它的坑都在细节里时区忘设、UDP端口被挡、上游源不可用、设备重启丢配置。我个人这两年的习惯是把NTP状态检查写进每周的巡检脚本里不管服务器还是交换机脚本里跑一条同步状态命令超过阈值就告警。时间同步这种事平时感觉不到价值一旦出问题代价往往远超想象。如果你正在规划内网时间同步方案我建议一步到位先搭一台内部NTP服务器Linux下用chrony最省事所有设备指向它再由它同步公网权威时间源。这样既统一了时间线后续排查故障、对日志、做安全审计都会顺很多。
返回列表