一直以来都是 NATv6 凑合着用,但是最近想要让下游的 BT 机器也有 v6 入站的能力,感觉还是研究一下比较好
光猫是移动的 H3-2r ,已经干进去了 Telnet (但无从下手),改了桥接
主路由是一台跑了 Debian 12 的小主机,PPPoE 拨号可以正常拿到双栈地址( v6 是/64 的地址)
按照网上教程使用 wide-dhcpv6-client ,却无法获取 IPv6 PD 。手动运行 dhcp6c 也拿不到前缀,表现为远端无响应:
root@router:~# dhcp6c -dDfi ppp0
Feb/06/2025 16:14:06: get_duid: extracted an existing DUID from /var/lib/dhcpv6/dhcp6c_duid: 00:01:00:01:2e:3a:7b:ae:*:*:*:*:*:*
Feb/06/2025 16:14:06: dhcp6_reset_timer: reset a timer on ppp0, state=INIT, timeo=0, retrans=720
Feb/06/2025 16:14:07: client6_send: a new XID (58d61a) is generated
Feb/06/2025 16:14:07: copy_option: set client ID (len 14)
Feb/06/2025 16:14:07: copy_option: set elapsed time (len 2)
Feb/06/2025 16:14:07: client6_send: send information request to ff02::1:2%ppp0
Feb/06/2025 16:14:07: dhcp6_reset_timer: reset a timer on ppp0, state=INFOREQ, timeo=0, retrans=987
# 之后都是不断的重试
ping ff02::1:2%ppp0
(通不通过-I 指定接口都尝试过),无响应
切换为光猫拨号,就可以在光猫后台看到前缀,下级路由也可以拿到前缀,继续分地址(之所以不使用光猫拨号,原因在于,此时下级设备分到的 IPv6 地址的入站访问会被光猫拦截,即使是已经把所有 WebUI 上能找到的和防火墙有关的开关全部关闭,外部网络路由追踪可以发现,显示到光猫那一跳,再往下就没有任何回应了。而如果是路由器拨号,那么就可以一路直通到路由器,访问服务也正常)
如有需要补充日志的,请留言指出,谢谢!
原因:原本为了防止外网扫描内网主机的 ip6tables 规则过于粗糙,屏蔽了 UDP 1:1024 的入站请求
单独放行 UDP 546 端口入站后,故障消失
![]() |
1
MFWT OP 另:尝试过在分配给路由器 WAN 口的/64 地址中,『假装』前 64 位是前缀,自己补上后 64 位,分配给接口,依然可以使用,外部也可以正常接入(包括此时 WAN 口实际上打开了临时地址功能,也能正常使用,可能上级做了整个/64 的路由过来?)。我在想可不可以:
1. 用同样的方法拼接一个/128 的地址,交给下级设备 2. 同时,路由器上做好静态路由,目标地址为这个/128 的,路由到 LAN 口 这种办法除了麻烦之外,还会有什么弊端吗 |
![]() |
2
titanium98118 6 天前
没折腾过 debian 拨号,用 openwrt 拨号就能自动获取到 PD /60
|
![]() |
3
billytom 6 天前
我也是广东移动,经常搞着搞着甚至连 ipv6 地址都没有了,这时候需要光猫重新注册
|
4
djw123 6 天前
0752 表示还是 v6 老实用 OP 吧
|
5
djw123 6 天前
同时建议看下是不是中兴 vbras ,可能存在响应兼容性问题
|
8
Ggmusic 6 天前 via iPhone
用 2 楼的办法,装个 openwrt 虚机拨号,如果不想放弃 Debian ,可以抓 openwrt 的包,和 Debian 的做比较,修改 widedhcpv6client 配置。
如果想用一楼凑合,可以看看 v6 的 ndp 代理 |
![]() |
9
htfcuddles 5 天前
|
![]() |
10
MFWT OP @htfcuddles
profile default { information-only; request domain-name-servers; request domain-name; script "/etc/wide-dhcpv6/dhcp6c-script"; }; interface ppp0 { send ia-pd 0; }; id-assoc pd 0 { prefix ::/64 infinity; prefix-interface eth0 { sla-len 4; ifid 1; }; }; 这个是 dhcp6c.conf 的内容,不确定是不是缺少了什么内容? |
![]() |
11
htfcuddles 5 天前 ![]() 以下方法逐个试试:
1. 移动可能不支持无穷大的租期时间,修改为 prefix ::/64 3600; 2. 删除 ifid 1 3. /etc/ppp/options 添加 +ipv6 ipv6cp-accept-local ipv6cp-accept-remote 4.换成 odhcp6c ( op 同款) |
12
liaoyuan6666 4 天前
没试过,个人喜欢爱快或者 openwrt
|
![]() |
13
MFWT OP @htfcuddles
经尝试,均无效,其表现都是 ff02::1:2 无响应 所使用的 odhcp6c 包是:sbyx/odhcp6c 所使用的命令是: 1. odhcp6c -v -P 0 ppp0 2. odhcp6c -v -P 60 ppp0 3. odhcp6c -v -N try -P 0 ppp0 运行后,命令行均无输出 |
14
xqzr 4 天前 ![]() tcpdump -ni ppp0 port \(546 or 547\)
|
![]() |
15
MFWT OP @xqzr
root@router:~# tcpdump -ni ppp0 port \(546 or 547\) tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on ppp0, link-type LINUX_SLL (Linux cooked v1), snapshot length 262144 bytes 23:36:23.657373 IP6 fe80::1060:9335:2d8:eba0.546 > ff02::1:2.547: dhcp6 solicit 23:36:23.659679 IP6 fe80::a67b:2cff:fe1f:a1f.547 > fe80::1060:9335:2d8:eba0.546: dhcp6 advertise 23:36:24.703343 IP6 fe80::1060:9335:2d8:eba0.546 > ff02::1:2.547: dhcp6 solicit 23:36:24.705625 IP6 fe80::a67b:2cff:fe1f:a1f.547 > fe80::1060:9335:2d8:eba0.546: dhcp6 advertise 23:36:26.749296 IP6 fe80::1060:9335:2d8:eba0.546 > ff02::1:2.547: dhcp6 solicit 23:36:26.752145 IP6 fe80::a67b:2cff:fe1f:a1f.547 > fe80::1060:9335:2d8:eba0.546: dhcp6 advertise 547 端口有回应,但是....似乎 dhcp6c 并不认 |
![]() |
18
MFWT OP @htfcuddles 如最新回复所示,抓包发现对端路由器 567 端口已经回包,tcpdump 可以看到,但是 dhcp6c 和 odhcp6c 均无任何反应,似乎就是没有包过来一样
|
![]() |
19
MFWT OP @djw123
@Ggmusic @htfcuddles @xqzr 感谢各位老哥的帮助,问题已解决 原因:原本为了防止外网扫描内网主机的 ip6tables 规则过于粗糙,屏蔽了 UDP 1:1024 的入站请求。单独放行 UDP 546 端口入站后问题解决 |