云计算百科
云计算领域专业知识百科平台

”攻破天翼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分析并给出修改指令。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » ”攻破天翼3.0网关IPv6防火墙“:一次家庭服务器的公网访问突围战(通过telnet开放光猫防火墙端口,用ipv6访问NAS)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!