OpenWRT 防火墙劫持 NTP 请求

解决电视盒子无法时间同步问题

家里的电视盒子,使用的是 Google 的时间同步服务器,自然会有无法同步时间的问题。偏离当前时间太多时, HTTPS 的证书会被视为“尚未生效”或“已过期”,从而导致访问网络服务故障。

安卓无法直接在图形界面上设置 NTP 服务器,所以以前是靠 adb 设置成阿里云的 NTP(网络时间协议)服务器解决。但用了一段时间以后又出现了无法时间同步问题,于是干脆把 NTP 请求劫持到路由器的 NTP 服务上来解决问题。

以下步骤需要基于 nftables 的 fw4 防火墙,所以适用于 版本 22.03 以后的 OpenWRT。当然有些固件编译者为了兼容旧插件,给新版本 OpenWRT 缝合上了 fw3 防火墙,我的建议是别用这类固件。

详细步骤:

  1. 开启路由器 NTP 服务
    登录到 OpenWRT 路由器的 LuCI Web 界面,导航到 系统 -> 系统 -> 时间同步。
    勾选作为 NTP 服务器提供服务,点击 保存并应用

  2. 备份现有配置文件(可选但推荐)
    在进行任何修改之前,建议备份防火墙配置文件,以防意外发生。通过 SSH 连接到 OpenWRT 路由器,然后执行以下命令:

    1
    
    cp /etc/config/firewall /etc/config/firewall.bak
    
  3. 编辑防火墙配置文件
    使用文本编辑器(如 vinano)打开防火墙主配置文件:

    1
    
    vi /etc/config/firewall
    

    或者

    1
    
    nano /etc/config/firewall
    
  4. 添加 include 配置
    在文件的结尾部分,添加一个 include 配置,指向一个单独的 NTP 劫持规则文件。这样做可以使配置更清晰,便于管理。

    1
    2
    3
    4
    5
    6
    
    config include
            option type 'nftables'
            option path '/opt/etc/ntp_dnat.nft'
            option position 'chain-post'
            option chain 'dstnat'
            option enabled '1'
    
    • option type 'nftables': 指定规则类型为 nftables。
    • option path '/opt/etc/ntp_dnat.nft': 指定包含具体 NTP 劫持规则的文件路径。可以根据需要修改此路径。
    • option position 'chain-post': 指定规则的应用位置,chain-post 表示在数据包经过目标 NAT(DNAT)链后应用。
    • option chain 'dstnat': 指定规则应用于 dstnat 链。
    • option enabled '1': 启用此 include 配置。
  5. 创建并编辑 NTP 劫持规则文件
    根据上一步的 option path,创建并编辑 /opt/etc/ntp_dnat.nft 文件:

    1
    
    vi /opt/etc/ntp_dnat.nft
    

    或者

    1
    
    nano /opt/etc/ntp_dnat.nft
    

    在该文件中添加以下规则:

    1
    
    ip saddr 192.168.6.192 udp dport 123 iifname "br-lan" dnat to 192.168.6.1:123
    
    • ip saddr 192.168.6.192: 指定源 IP 地址为电视盒子的 IP 地址(根据实际情况修改)。
    • udp dport 123: 指定协议为 UDP,目标端口为 123(NTP 默认端口)。
    • iifname "br-lan": 指定数据包的入口接口为 br-lan(局域网接口,根据实际情况修改)。
    • dnat to 192.168.6.1:123: 将匹配的数据包的目标地址和端口重定向到指定的 NTP 服务器 IP 地址和端口(这里以 OpenWRT 路由器自身 IP 192.168.6.1 为例)。
  6. 重启防火墙服务
    为了使新的防火墙规则生效,需要重启防火墙服务:

    1
    
    service firewall restart
    

通过以上步骤配置 OpenWRT 防火墙,就可以解决电视盒子因 NTP 请求不通导致的时间同步问题。

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计