这台华为 HN8156XR-10 FTTR 主光猫,我拿到手的第一天就想把它的 DHCP 和 DNS 设置给改了。原因很简单:默认配置下,家里设备总是隔三差五断一下,部分网页打开时解析明显偏慢,后来查了一圈才发现问题出在光猫内置 DHCP 服务上——租期太短、DNS 用的是运营商默认值。如果你也在用这款或者类似型号的 FTTR 光猫,受同样的“玄学掉线”“网页卡解析”困扰,那这篇文章就是为你准备的。我会完整演示通过 Telnet 登录光猫、查看现有 DHCP 参数、修改租期和自定义 DNS 的过程,把每一步命令、每一个需要认准的字段都写清楚,顺带把我踩过的几个坑也一并说透。
1. 为什么要把手伸进光猫的 DHCP 和 DNS 设置里
1.1 FTTR 主光猫不是普通光猫,它是家里的“网络调度中心”
FTTR 方案里,主光猫承担的可不只是光电转换那么简单。它要负责拨号、路由、无线接入、DHCP 分配、DNS 转发,相当于把一台路由器和一台 ONU 塞进了同一个盒子里。HN8156XR-10 作为主光猫,默认情况下就开着 DHCP 服务,家里所有手机、电视、摄像头、智能家居设备的 IP 都是由它统一分配。这个模式本身没问题,问题在于运营商下发的默认参数,往往只考虑“能用”,不考虑“好用”。
我一开始也以为“光猫嘛,能拨号能上网就行”,直到有一天发现客厅的摄像头经常离线,查看日志发现它在不停地重新请求 IP,每次间隔只有两小时左右。这时候才意识到,DHCP 租期太短,设备多的时候会反复续约,一旦续约不及时,就会出现短暂断网。路由转发没问题,配置参数却在拖后腿,这就是我决定折腾 Telnet 的直接动机。
1.2 默认租期太短或 DNS 太朴素,体验差别有多大
先从租期说起。DHCP 租期就是终端获得 IP 后可以使用的时长,到期前设备需要向 DHCP 服务器续租。默认值如果设置成 7200 秒(2 小时),那么一台设备一天至少要续约 12 次。智能家居设备数量一多,每次续约都是一次广播交互,遇到光猫 CPU 忙的时候,就可能延迟。最直观的表现就是:电视投屏突然失败、手机连着 WiFi 但是提示“无互联网连接”、监控画面偶尔卡住。
DNS 的影响更隐蔽。如果你用运营商默认 DNS,平时刷短视频、看网页可能感觉不到,但当你访问一个解析节点较多的网站时,解析超时或者返回了一个很慢的节点,页面就要白屏好几秒。另外,如果你想在局域网里自建一个 AdGuard Home 或者用来缓存解析记录的轻量服务,那么光猫 DHCP 下发 DNS 这个动作就显得非常关键——它决定了你的终端设备是否会自动使用你自建的 DNS。否则你连了设备后,还要每台手动改 DNS,那体验真的太差了。
1.3 什么样的人真的需要改,什么样的人建议别动
我总结一下,真正需要改这些参数的是这几类人:
- 家里智能设备超过二十台,并且经常出现设备离线、掉线问题。
- 在局域网里跑了自己的 DNS 服务(比如 AdGuard Home、某款开源 DNS 缓存)。
- 对网页打开速度敏感,希望用公共 DNS 替代运营商默认 DNS 以便更快获得解析结果。
- 想固定某些 DHCP 地址段给录像机、NAS 等设备,方便访问。
反过来,如果你就是正常手机上网、刷视频,设备也不多,那我不建议你动这些参数。光猫的默认配置虽然不完美,但足够稳定。改配置有风险,特别是 Telnet 下敲错命令可能导致光猫变砖或者配置异常,到时候折腾的时间成本远大于收益。
2. 动手前必须确认的版本和 Telnet 前提条件
2.1 先确认你的光猫有没有“调试”这把钥匙
不是所有 HN8156XR-10 都默认开放 Telnet。运营商集采的固件,很多把 Telnet 服务关掉了,或者登录账号密码权限受限。我手上这台软件版本是 R22 系列,硬件版本是 HN8156XR-10,Telnet 是已经开启的。怎么确认?最直接的办法是打开电脑的命令提示符,输入telnet 192.168.1.1,如果出现登录提示,说明服务开着;如果提示“无法打开到主机的连接”,说明 Telnet 被关了或者端口不通。
如果你的 Telnet 没开启,也不要灰心。常规做法是联系宽带装维师傅,或者通过运营商的APP在线报修,说明自己需要做家庭网络调试,申请开启调试账号。很多地区是可以合法申请到临时调试权限的,这比自己在网上到处找“补全Shell”的方案要安全得多。我就是通过这个方式拿到的超级管理员密码,整个过程只花了半天时间,对方还提醒我“别随便改光猫的注册信息,只改局域网参数就好”。
2.2 用 Windows 自带 Telnet 还是第三方客户端?
我建议直接用 Windows 自带 Telnet 客户端就够了,因为只是敲几条命令。启动方式是在“启用或关闭Windows功能”里勾选“Telnet客户端”。如果你用的是 Mac 或者 Linux,终端里直接敲 telnet 命令即可。
不过如果你有 Putty 或者 FinalShell,我也推荐用它们,因为可以方便复制粘贴长命令,还能保存会话,反复连接比较方便。我用的是 Putty,主要是看中它的复制粘贴不会像 Windows 自带的 Telnet 那样偶尔卡顿。注意,连接时选择 Telnet 协议,端口默认 23,不是 SSH 的 22。
2.3 动手前把原始配置备份下来,这是最重要的一步
这个步骤太重要了,我要单独拉出来强调。很多人改配置失败,不是因为命令敲错,而是因为不知道原来的值是什么,改不回来。连接 Telnet 后,第一件事不是修改,而是把当前的 DHCP 配置表完整抄下来。哪怕你用手机拍屏幕,也要留一份。
我的备份方法很简单:
sendcmd 1 DB p DhcpCfg sendcmd 1 DB p Lan把这两条命令的输出全部复制到本地文本文件里,命名成backup_202501.txt。这样无论后面折腾成什么样,我都能照着这个文本把原始配置敲回去。特别是光猫重启后如果配置被网管系统覆盖,你至少还有一份自己设备上的真实基线数据,方便对比差异。
3. Telnet 连接后,先把 DHCP 配置表翻个底朝天
3.1 登录并进入配置命令行环境
确认 Telnet 可用后,我在电脑上执行:
telnet 192.168.1.1这里192.168.1.1是光猫默认的局域网管理地址,如果你家光猫改过网段,以你自己的为准。连接后会看到类似:
Login: admin Password:输入超级管理员账号和密码(不是普通用户密码)。登录成功后,有的固件直接进入 shell,有的还需要再敲一个shell命令。如果敲ls能看到一堆 Linux 目录,比如bin、etc、usr,说明你已经进入了系统 shell。
华为光猫的配置管理主要靠sendcmd这个内置命令。它可以直接读写光猫的数据库配置文件。如果是某些精简固件,可能连sendcmd都没有,那就需要先执行loaddef这类命令调出完整命令行,但一般我手头这台 R22 固件是直接有的。
3.2 用 sendcmd 读取 DHCP 表
进入命令行敲:
sendcmd 1 DB p DhcpCfg这条命令的意思是:以超级管理员的身份,从数据库(DB)中打印(p)名为DhcpCfg的表。我这边输出的内容大致如下:
<Tbl name="DhcpCfg" RowNo="0"> <P name="Enable" val="1"/> <P name="StartIp" val="192.168.1.2"/> <P name="EndIp" val="192.168.1.254"/> <P name="LeaseTime" val="3600"/> <P name="Dns1" val="0.0.0.0"/> <P name="Dns2" val="0.0.0.0"/> </Tbl>注意,不同固件的字段名可能不一样。有的叫LeaseTime,有的叫DhcpTime,还有的叫Duration。我在别人家的 HN8165 上就看到LeaseTime变成了DhcpTime。所以不要死记命令,关键是看val="..."后面的值。比如这里LeaseTime val="3600"就代表租期是 3600 秒,也就是 1 小时——难怪家里设备那么闹腾。
3.3 顺藤摸瓜:DNS 配置藏在哪个表里
如果DhcpCfg表里没有看到Dns1Dns2,或者这两个值是空的,那么 DNS 配置可能在Lan表里。继续敲:
sendcmd 1 DB p Lan输出中会有一堆字段,我们重点关注:
<P name="Dns1" val="0.0.0.0"/> <P name="Dns2" val="0.0.0.0"/> <P name="DnsOverride" val="0"/>0.0.0.0表示使用运营商下发或者光猫默认的 DNS,并没有手动指定。这里就是我们要改的地方。还有一个字段叫DnsOverride,这个字段很关键,它决定光猫会不会用内置的 DNS 转发。我一般把它保持为0,也就是不做强制覆盖,直接向 DHCP 客户端下发我指定的 DNS。
4. 修改 DHCP 租期和自定义 DNS 的完整操作流程
4.1 修改前想清楚你要的租期和 DNS 是多少
我们先确定需求。租期不是越长越好。如果设成一周(604800 秒),设备长时间不续约,当你改了网关或者调整网络拓扑的时候,终端可能要过很久才重新获取,容易造成新旧配置混乱。我建议是设成 86400 秒,也就是 24 小时。这样每天设备都会续约一次,既不会频繁到引发掉线,也不会造成配置变更后迟迟不生效。
DNS 我用的是一主一备:
- 首选 DNS:
223.5.5.5 - 备用 DNS:
119.29.29.29
这两个都是国内公共 DNS,解析速度快,且支持 DNS over HTTPS 的较多,兼容性也比较好。如果你有 AdGuard Home,那么首选 DNS 就填你的 AdGuard Home 局域网 IP,比如192.168.1.10,备用再填公共 DNS。
4.2 逐条写入修改命令并保存
现在开始动手。先修改租期:
sendcmd 1 DB set DhcpCfg 0 LeaseTime 86400这里0是行号(RowNo),表示修改第一行 DHCP 配置。如果你的光猫存在多个 DHCP 地址池(比如同时开了 LAN1 和 LAN2),需要先通过sendcmd 1 DB p DhcpCfg看清有几行,然后对指定行号操作。
接着设置 DNS:
sendcmd 1 DB set DhcpCfg 0 Dns1 223.5.5.5 sendcmd 1 DB set DhcpCfg 0 Dns2 119.29.29.29如果你的 DNS 字段在Lan表里,就改成:
sendcmd 1 DB set Lan 0 Dns1 223.5.5.5 sendcmd 1 DB set Lan 0 Dns2 119.29.29.29因为我这边修改后原来的Dns1Dns2没变化,所以我两条表都设置了,反正不改的字段不影响。设置完先别急着退出,执行保存命令:
sendcmd 1 DB save这一步不做的话,光猫一重启或者几分钟后配置可能就丢了。保存成功后一般会输出success字样。我再建议用sendcmd 1 DB p DhcpCfg重新查看一遍,确认LeaseTime变成了86400,Dns1变成了223.5.5.5。确认无误后再重启光猫。
4.3 修改之后如何验证
重启后,光猫会重新给连接的设备下发 IP 信息。如果你想立刻看到效果,可以在电脑上打开命令提示符:
ipconfig /release ipconfig /renew然后查看:
ipconfig /all重点看 DHCP 获得的租约时长和 DNS 服务器地址。如果显示租约到期时间是明天这个时间点,DNS 是我们设置的两个 IP,就说明修改成功了。
还有一个小技巧:如果家里某些设备是断电重启或者长时间不联网的,它可能还保留着旧租约,可以暂时忽略,等租约到期后自然生效。想加速就断开 WiFi 重新连接一次。
5. 重启失效与配置回滚:我踩过的那些坑
5.1 最尴尬的:重启后设置一夜回到解放前
我第一次改完,验证全部成功,心里美滋滋。结果第二天起床一看,DHCP 租期又变回了 3600,DNS 也变回了 0.0.0.0。后来才明白,这是光猫的远程管理机制在起作用。运营商网管平台会在指定时间同步配置,我手动改的本地配置不在管理平台的模板里,同步一次就被覆盖一次。
遇到这种情况,有两条路。一条是彻底关闭光猫的 TR069 远程管理通道,但我不建议普通用户这么做,因为光猫会失去和局端的通信,可能出现拨号异常,而且某些地区运营商可能会检测到并限制你的宽带。另一条就是接受现状,在每次被覆盖后重新改一遍,或者把“同步时间”避开。我选择的方法是定期检查,发现异常就重新连上 Telnet 改回去,并且把修改命令写成脚本,一键执行。这里只是分享我的应对思路,不鼓励你们模仿硬扛网管,毕竟断网的风险是自己的。
5.2 字段名不一致和“找不到表”的处理办法
很多朋友照着我的命令敲,却发现提示ERROR或者找不到DhcpCfg表。这是因为固件版本不同,表名和字段名都有差异。我自己也遇到过:在别人的设备上,DHCP 配置表不叫DhcpCfg,而叫DHCPv4ServerCfg;DNS 字段也不叫Dns1,而是DNSServers。这时候怎么办?我建议使用华为光猫命令行的自动补全功能。在sendcmd 1 DB p后面敲一个字母,然后按 Tab 键,它会自动列出所有可能的表名。比如输入sendcmd 1 DB p D再按 Tab,就能看到所有 D 开头的表。逐个查看,总能找到带 DHCP 字样的表。
5.3 客户端不生效的排查顺序
有时候光猫端配置是改好了,但手机电脑还是用旧 DNS。这时候不要怀疑光猫,先看终端本身的缓存。
排查顺序我总结为:
- 在终端上执行
ipconfig /flushdns清空 DNS 缓存。 - 执行
ipconfig /renew重新获取 DHCP 租约。 - 如果还不行,检查终端上是否手动设置过“静态 DNS”。手动配置的优先级远高于 DHCP 下发。
- 如果你用了无线路由器作为二级网关,问题往往出在二级路由器上——它的 WAN 口是从光猫获取 IP,但它的 LAN 口可能会自己分配 DNS 给下面的设备。需要在二级路由器里把 DNS 改成自动获取,或者也改成你想要的公共 DNS。
我一度以为光猫没改成功,排查半天才发现是客厅那个老旧无线路由器在里面“捣鬼”。
6. 尾声:稳定运行三个月后的几点心得
HN8156XR-10 这台光猫现在在我家已经稳定跑了快三个月。DHCP 租期保持在 86400 秒,DNS 走的是我自建的 AdGuard Home 和备用公共 DNS,设备掉线问题基本消失,网页解析速度也比原来快了不少。这里分享一下我最后想说的几点实在话。
首先,Telnet 操作光猫的底线是“只改局域网相关参数”,不要去碰拨号账号、注册标识、VLAN 这些运营商核心配置。改错了轻则上不了网,重则需要重新注册,麻烦的还是自己。其次,每一次修改都要有记录。我后来把sendcmd 1 DB p DhcpCfg和sendcmd 1 DB p Lan的输出定期备份,半年下来积累了三个不同时期的配置快照,每次调整都能清楚看到差异。
最后再分享一个小技巧:如果你不想每次开电脑搜命令,可以把常用修改命令写成一个.txt文件,用 Putty 登录后直接把内容粘贴进去,一次执行完。但粘贴的时候注意看每一条命令的反馈,别一股脑全敲完发现中间某条报错了,回头又要从头排查。光猫这种嵌入式设备,每一次 Telnet 会话后的反馈都值得多看两眼。
折腾这些,不是为了炫技,而是为了让家里的网络真正符合自己的使用习惯。希望这篇实战记录能帮你少走一点弯路。如果有其他光猫型号的配置问题,也欢迎在评论区互相交流,我尽量把我了解的情况分享出来。