”攻破天翼3.0网关IPv6防火墙“:一次家庭服务器的公网访问突围战(通过telnet开放光猫防火墙端口,用ipv6访问NAS)
”攻破天翼3.0网关IPv6防火墙“:一次家庭服务器的公网访问突围战
📖 写在前面:动机与声明
重要声明:本文记录的所有操作均在博主本人合法拥有的家庭网络设备上,为个人学习和研究目的而进行。所涉及的技术方法仅用于理解网络原理、改善个人网络使用体验。任何读者在尝试时,应确保:
- 操作对象为你自己拥有管理权限的设备。
- 充分理解每一步操作的含义和潜在风险。
- 遵守本地法律法规及互联网服务提供商(ISP)的相关规定。
- 修改运营商网关配置可能导致设备不稳定或失去保修,请谨慎操作。
🚀 背景:为什么我要折腾IPv6?
一切始于我对家庭数字化的“痴迷”。一台All in One服务器(基于旧硬件和Proxmox,运行飞牛NAS,Linux服务器),构成了我的家庭数据中心。在内网,一切丝滑流畅。
然而,假期返乡,当我试图从外部访问家中服务时,问题来了:
- 飞牛自带的中继服务:稳定但速度是硬伤,传输大文件时格外捉急。
- Tailscale等异地组网:速度提升显著,P2P打通后体验很好。但对于偶尔需要访问的家人来说,安装客户端、登录账户的步骤还是太“极客”了。
- 最直接的解决方案:利用每家每户都分配到的公网IPv6地址。这理论上能提供直连、高速的访问体验。
但我知道,家门口那台“历史悠久”的天翼3.0光猫路由器一体机,绝不会让我轻易过关。更“棘手”的是,由于家里早年装修,弱电箱被完美封死,这台网关设备我连物理接触都做不到,任何需要插线、按复位键的方案都宣告无效。

“不可接触”之网关*
别无选择,只能从逻辑层面发起进攻。目标:在不接触设备的前提下,通过软件配置,开放其IPv6防火墙,让外部互联网能访问到我内网的服务器。
🔍 战前侦察:了解你的堡垒
第一件事,确认网关型号并开启“后门”。通过路由器背面标签(侥幸在封箱前记下了信息)或登录普通用户后台,我确定了这是中兴方案的天翼网关3.0。搜索得知,这类设备通常留有Telnet接口作为维护入口。
关键第一步:开启Telnet
通常需要特定的请求或使用已知的临时开启方法。前提是需要超密(没有的话可以上小黄鱼),通过向网关特定端口发送一个特殊构造的HTTP请求,成功打开Telnet服务(具体方法因型号和地区固件版本差异极大,此处不展开,后续若有需要,会单独做一篇具体细节)。
# 成功后,在电脑终端连接
telnet 192.168.1.1
登录凭证通常是超级管理员账号(如 telecomadmin)和密码,而且在开启Telnet服务页面通常会有(账户和密码默认都是telnetadmin),或者设备背面标签上的普通用户密码。
⚔️ 核心战斗:分析并修改IPv6防火墙规则
登录后,我们便进入了BusyBox构成的简易Linux shell。真正的挑战从这里开始。
1. 初探敌情:查看防火墙状态
ip6tables -nvL --line-number
通常telnetadmin正常登录是会被拒绝的(如图)

需要获得root权限,各位要是知道光猫MAC地址的可以进入这个网站超级用户密码查询
sudo su
#切换root权限、输入刚刚查询到的root密码
ip6tables -nvL --line-number
#再次执行 ip6tables -nvL --line-number
这条命令列出了所有IPv6防火墙规则、匹配的数据包计数和规则编号。初看之下,FORWARD 链的默认策略是 ACCEPT,仿佛一切畅通。但陷阱藏在规则列表里。
# ip6tables -nvL --line-number
Chain INPUT (policy ACCEPT 59 packets, 5679 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT icmpv6 ppp1.2 * ::/0 ::/0 ipv6-icmptype 130
2 0 0 ACCEPT icmpv6 ppp1.2 * ::/0 ::/0 ipv6-icmptype 134
3 0 0 ACCEPT icmpv6 ppp1.2 * ::/0 ::/0 ipv6-icmptype 136
4 0 0 ACCEPT icmpv6 ppp1.2 * ::/0 ::/0 ipv6-icmptype 135
5 0 0 ACCEPT udp ppp1.2 * ::/0 ::/0 udp spt:547 dpt:546
6 0 0 DROP tcp ppp1.2 * ::/0 ::/0 tcp dpt:17998
7 0 0 DROP tcp ppp1.2 * ::/0 ::/0 tcp dpt:80
8 0 0 DROP tcp ppp1.2 * ::/0 ::/0 tcp dpt:23
9 0 0 DROP all veip0.4 * ::/0 ::/0
10 0 0 DROP all veip0.3 * ::/0 ::/0
11 0 0 DROP all veip0.1 * ::/0 ::/0
12 470 56595 ddos all * * ::/0 ::/0
13 0 0 SAMBA_IN tcp * * ::/0 ::/0 tcp dpt:445
14 16 1280 ftp tcp * * ::/0 ::/0
15 0 0 REJECT tcp br0 * ::/0 ::/0 tcp dpt:58000 reject-with tcp-reset
16 74 15826 ACCEPT all ppp1.2 * ::/0 ::/0 ctstate RELATED,ESTABLISHED
17 0 0 LOG tcp ppp1.2 * ::/0 ::/0 tcp flags:0x17/0x02 limit: avg 6/hour burst 5 LOG flags 0 level 1 prefix "Intrusion -> "
18 0 0 DROP all ppp1.2 * ::/0 ::/0
Chain FORWARD (policy ACCEPT 51 packets, 2672 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all ppp1.2 * ::/0 ff00::/8
2 0 0 DROP all br0 * ::/0 ::/0 limit: up to 100/sec burst 5 mode srcip htable-size 99 htable-max 99 htable-expire 60000
3 4 320 TCPMSS tcp * ppp1.2 ::/0 ::/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
4 20 1592 TCPMSS tcp ppp1.2 * ::/0 ::/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU
5 118 8534 rtchain all * * ::/0 ::/0
6 0 0 DROP all veip0.4 * ::/0 ::/0
7 0 0 DROP all veip0.3 * ::/0 ::/0
8 0 0 DROP all veip0.1 * ::/0 ::/0
9 0 0 SKIPLOG icmpv6 !br0 * ::/0 ::/0
10 70 3940 app_filter all br0 * ::/0 ::/0
11 104 7022 forward_npt all * * ::/0 ::/0
12 14 1358 urlfilter tcp * * ::/0 ::/0 tcp flags:0x07/0x00
13 49 2352 SKIPLOG icmpv6 br0 * ::/0 ::/0
14 0 0 SKIPLOG icmpv6 * ppp1.2 ::/0 ::/0 ipv6-icmptype 1
15 18 1802 ACCEPT all ppp1.2 * ::/0 ::/0 ctstate RELATED,ESTABLISHED
16 5 400 LOG tcp ppp1.2 * ::/0 ::/0 tcp flags:0x17/0x02 limit: avg 6/hour burst 5 LOG flags 0 level 1 prefix "Intrusion -> "
17 16 1280 DROP all ppp1.2 * ::/0 ::/0
#最后一条DROP规则导致主要问题
关键发现:在 FORWARD 链的尾部,有一条规则:
... DROP all ppp1.2 * ::/0 ::/0
这条规则会丢弃所有从互联网(ppp1.2 接口)主动发往内网的所有IPv6数据包。这就是外网无法访问的罪魁祸首。
2. 第一次突围:尝试简单放行
我的第一个想法是在这条 DROP 规则前插入一条 ACCEPT 规则。
ip6tables -I FORWARD X -i ppp1.2 -j ACCEPT
# X 是 DROP 规则前面的编号
执行后,规则计数器开始增长,但外部访问依然失败。logread 查看系统日志,发现了更棘手的问题:
Intrusion -> IN=ppp1.2 OUT=br0 ... DPT=80 ... MARK=0x8200000
网关内置的入侵检测系统(IDS) 将所有外部主动连接都标记为“入侵”,并打上一个特殊标记 (MARK=0x8200000)。虽然我的 ACCEPT 规则理论上放行了,但被打上标记的流量很可能被后续其他过滤链(如 app_filter, urlfilter)根据此标记丢弃。
3. 迂回战术:提前截获,避免标记
问题的核心变成了:如何让合法的外部访问流量,在被打上“入侵”标记之前就被放行?
经过多次规则顺序的调整和测试,我找到了关键路径。流量会先经过 FORWARD 链中的 rtchain 子链处理。我需要确保外部流量在 rtchain 链中不被错误丢弃,并顺利返回到 FORWARD 主链,然后在触发“入侵”标记和后续深度过滤之前,就被精准放行。
最终生效的“黄金规则”:
# 1. 确保外部流量能从 rtchain 链正确返回
ip6tables -t filter -I rtchain 2 -i ppp1.2 -j RETURN
# 2. 在 FORWARD 链的 app_filter (深度过滤)之前,插入精准放行规则
# 这条规则的位置(第Y行)至关重要,必须在入侵检测LOG规则和各类filter规则之前
ip6tables -I FORWARD Y -i ppp1.2 -p tcp -m multiport --dports 80,5666 -j ACCEPT
命令解释:
-I FORWARD Y:在FORWARD链的精确位置Y插入,这个位置避开了后续所有过滤。-i ppp1.2:匹配从互联网接口进入的流量。-m multiport --dports 80,5666:仅针对我需要的80(网页)和5666(自定义服务)端口。-j ACCEPT:允许通过。
4. 胜利验证
规则添加后,立即测试:
- 规则计数器:执行
ip6tables -nvL FORWARD Y,看到pkts(数据包计数) 开始稳步增加,证明规则生效。 - 系统日志:
logread中不再出现针对我服务器IP和端口的新“Intrusion”日志。 - 外部测试:使用手机蜂窝网络,通过
telnet [我的IPv6地址] 端口测试,连接成功! !!!又一重点,添加的规则可能在光猫重启后消失(关于怎样持久化博主还没有去研究,因为除了停电主播家的光猫不会重启,不过有技术的可以自己尝试,应该可以写成脚本存起来)!!!
💡 经验总结与安全提醒
-
运营商设备的复杂性:天翼网关等运营商设备并非标准路由器,其防火墙系统是一个多层、多链的复杂体系,除了基础的
iptables/ip6tables,还集成入侵检测(IDS)、应用过滤(app_filter)、URL过滤(urlfilter) 等功能。简单修改基础规则往往无效,必须理解其完整的数据包处理流程。 -
规则顺序决定命运:在
iptables体系中,规则顺序就是生命线。数据包按顺序匹配规则,一旦匹配即执行对应动作(ACCEPT, DROP, RETURN等),不再检查后续规则。因此,将你的放行规则放在正确的位置(通常是过滤和标记规则之前),是成功的关键。 -
持久化是奢望:通过Telnet执行的命令,在路由器重启后会全部丢失。这是此类运营商设备的最大痛点。将其视为“临时配置”,需要时将命令脚本化以便重新执行。追求永久生效通常需要更复杂的操作(如修改启动脚本),风险极高。
-
安全第一:
- 精准放行:始终使用
--dports指定端口,避免使用-j ACCEPT放行所有协议和端口。 - 设备安全:你的内网服务器一旦暴露在公网,必须强化自身安全:更新系统、使用强密码、配置防火墙、考虑禁用密码使用SSH密钥登录。
- 关注日志:定期查看
logread,了解是否有异常扫描或攻击尝试。
- 精准放行:始终使用
-
关于端口选择:住宅宽带普遍对 80、443、25 等常见服务端口进行入站封锁。建议将家庭服务架设在 8080、8888、5666 等非标准端口上,绕过运营商封锁。
🎉 尾声
一夜鏖战,期间博主也尝试过很多其他方式,桥接什么的,但是博主家里的路由拓扑是在是特殊,也就放弃了,不过肯定是有很多其他方法同样可以解决此问题。
这次折腾不仅解决了实际问题,更是一次对家庭网络架构、Linux防火墙和运营商设备逻辑的深度理解。技术之路,正是在一次次“突围”中变得宽广。
希望这篇记录,能给同样被挡在IPv6门外的你,点亮一盏灯。
最后再次提醒:网络配置有风险,操作需谨慎。享受技术乐趣的同时,请务必保障网络与数据的安全。
博主第一篇帖子,要是有疏忽或者需要细致解决的地方可以提出来!!博主也会以自己不多的经验帮助解决,少走弯路,另外可以将输出代码扔给ai,让ai分析并给出修改指令。
本文地址:https://www.yitenyun.com/591.html









