AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1064319
Accepted
Martin Melka
Martin Melka
Asked: 2021-05-22 05:40:57 +0800 CST2021-05-22 05:40:57 +0800 CST 2021-05-22 05:40:57 +0800 CST

systemd-timesyncd 需要打开传入的临时端口

  • 772

我正在尝试为 Ubuntu 服务器配置某种时间同步。服务器位于云提供商无状态防火墙后面。通过反复试验,我发现为了ntp工作,我必须打开传入的 UDP 端口 123。

然后我读到systemd-timesyncd现在首选使用,所以我尝试切换到那个。但这没有用。服务日志充满了

systemd-timesyncd[2656121]: Timed out waiting for reply from 91.189.89.199:123 (ntp.ubuntu.com).
systemd-timesyncd[2656121]: Timed out waiting for reply from 91.189.94.4:123 (ntp.ubuntu.com).

只有在我也将防火墙中的临时 UDP 端口列入白名单之后,32768–65535这才开始起作用:

systemd-timesyncd[2656121]: Initial synchronization to time server 91.189.91.157:123 (ntp.ubuntu.com).

是否真的需要打开该范围的端口才能运行systemd-timesync?


编辑以回应@Jesus-Loves-You 在下面的回复。更高的端口应该不是必需的,但在我的情况下,出于某种原因,它们显然是必需的。查看服务日志systemd-timesync(由我用 注释#):

# Before I enabled the 32786+ ports
May 21 11:49:21 myhost systemd-timesyncd[2656121]: Timed out waiting for reply from 91.189.89.198:123 (ntp.ubuntu.com).

# After I enabled the ports
May 21 11:49:06 myhost systemd-timesyncd[2656121]: Initial synchronization to time server 91.189.91.157:123 (ntp.ubuntu.com).

# After I disabled them again. Note that there are no log entries inbetween for almost
# three days. This, imo, pretty much proves that the ports are required.
May 24 09:29:34 myhost systemd-timesyncd[2656121]: Timed out waiting for reply from 91.189.91.157:123 (ntp.ubuntu.com).

有关港口的更多信息:

root@host:/# netstat -ulpvn | grep systemd
udp        0      0 127.0.0.53:53           0.0.0.0:*                           2218041/systemd-res
udp        0      0 0.0.0.0:42212           0.0.0.0:*                           2656121/systemd-tim

看起来42212是服务期望通信发生的端口。但几分钟后,当下一次轮询发生时:

root@host:/# netstat -ulpvn | grep systemd
udp        0      0 127.0.0.53:53           0.0.0.0:*                           2218041/systemd-res
udp        0      0 0.0.0.0:37240           0.0.0.0:*                           2656121/systemd-tim

现在端口变了。几分钟后,它再次变为51120。因此,我得出结论,该服务每次尝试同步时都会尝试在随机端口上进行通信。

firewall port systemd-timesyncd
  • 3 3 个回答
  • 1775 Views

3 个回答

  • Voted
  1. Best Answer
    Martin Melka
    2021-06-02T06:58:43+08:002021-06-02T06:58:43+08:00

    它确实使用临时端口。

    经过更多研究,我发现了这些:

    SNTP (RFC 4330) 允许(更常见的)临时源端口号

    https://iec61850.tissue-db.com/tissue/630

    IANA 分配给 NTP 的 UDP 端口号是 123。SNTP 客户端应该在客户端请求消息的 UDP 目标端口字段中使用该值。 这些消息的源端口字段可以是为识别或复用目的而选择的任何非零值。 服务器为相应的回复消息交换这些字段。

    这与 RFC 2030 规范不同,后者要求源端口和目标端口均为 123。

    https://datatracker.ietf.org/doc/html/rfc4330#section-4

    所以整个事情的答案似乎systemd-timesyncd是实现SNTP协议,而不是NTP,因此使用临时源 UDP 端口。这是设计使然。现在的问题变成了“如何在无状态防火墙上处理临时端口”/耸耸肩。

    • 3
  2. Thomas Landauer
    2021-09-24T08:42:45+08:002021-09-24T08:42:45+08:00

    我在 Debian 10 “Buster” 和 Debian 11 “Bullseye” 上所要做的就是打开出站 UDP 端口 123

    • 我的入站端口 123 未打开。
    • 不需要重新启动任何服务。

    结果/var/log/syslog:

    Debian 10:

    9 月 23 日 18:21:19 app systemd-timesyncd[20076]:第一次同步到时间服务器 194.35.12.189:123 (0.debian.pool.ntp.org)。

    Debian 11:

    9 月 23 日 18:25:21 发布 systemd-timesyncd[418]:初始同步到时间服务器 65.21.190.104:123 (0.debian.pool.ntp.org)。

    • 2
  3. Jesus-Loves-You
    2021-05-24T08:54:22+08:002021-05-24T08:54:22+08:00

    我确实有完全相同的问题。这对我有用(如果您使用的是 iptables):

    -A INPUT -p udp -m udp --sport 123 --dport 123 -m conntrack --ctstate ESTABLISHED -j ACCEPT -A OUTPUT -p udp -m udp --sport 123 --dport 123 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

    据我了解,systemd-timesyncd类似于ntp的客户端实现(https://wiki.archlinux.org/title/Systemd-timesyncd),只是建立一个传出请求,所以应该没有进一步的调整在你的情况下。
    并且根据 https://www.ietf.org/rfc/rfc5905.txt 必要的端口仍然是端口号 123 (UDP)

    所以回答你的问题,不,你提到的那些更高的端口是没有必要的。你做对了一切

    也许您只是错过了服务重启?
    sudo systemctl restart systemd-timesyncd systemctl status systemd-timesyncd.service timedatectl status

    请注意:如果这个答案在您的情况下并没有真正奏效,请知道我刚刚遇到了同样的问题。所以你非常接近真正的答案。最好的问候兄弟

    • 0

相关问题

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • MSMQ 防火墙端口

  • IP-KVM(在我的例子中是 ADDER Ipeps):轻松防火墙穿越

  • 远程连接 sql server 不工作,但如果防火墙禁用它呢?

  • 服务器 2003 R2 上的 Cisco VPN 客户端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve