|
|
本帖最后由 Gzce 于 2023-10-24 02:51 编辑
先说一下此教程所适合的版本以及情况
固件版本是OpenWrt 10.22.2023 by Kiddin' / LuCI Master git-24.286.72457-5518424
设备是JDCloud RE-SP-01B
由于我有一台纯ipv6的vps,需要经常访问,家里的一级路由是可以正常使用ipv6的,但是由于一些情况只能通过无线方式连接二级openwrt路由,来回切换很麻烦,一开始openwrt路由怎么都获取不到ipv6,由于我是个小白第一次接触openwrt路由,经过数天的搜索以及尝试网上的各种教程,各种尝试最终总结出来,我的wan6接口可以显示成功获取公网ipv6地址,并且所连接的电脑设备也能获取到公网ipv6地址,但是却无法正常使用和访问ipv6的网址,但是ping一下自己的公网ipv6地址就立马变成可以使用的状态,重启或者重连后就又失效了。
先讲一下让设备获取ipv6的问题,然后在解决正常使用ipv6的问题
网上的教程版本众多但是总结下来无非是这几点
lan口的设置,dhcp服务器→ipv6设置里RA服务、dhcpv6服务、ndp服务这三样全改成混合模式。
wan口的设置,dhcp服务器,常规设置里忽略此接口,ipv6设置里RA服务、dhcpv6服务、ndp服务这三样全禁用。
wan6口的设置,协议改成dhcpv6,dhcp服务器,常规设置里忽略此接口,ipv6设置里RA服务、dhcpv6服务、ndp服务这三样全改成中继模式。
这样之后重启一下路由,你就会发现设备是可以获取ipv6的,但是很大概率是无法使用。
接下来需要用到ssh客户端,连接你的openwrt,打开编辑/etc/odhcp6c.user这个文件,把下面代码复制粘贴进去保存
- #!/bin/sh
- log() {
- logger -t "odhcp6c[fake-ipv6pd]" "$@"
- }
- reset_envs() {
- local entry
- local raroutes=""
- local userprefix=""
- for entry in $RA_ROUTES; do
- local route="$entry"
- local addr="${entry%%/*}"
- entry="${entry#*/}"
- local mask="${entry%%,*}"
- entry="${entry#*,}"
- local gw="${entry%%,*}"
- entry="${entry#*,}"
- local valid="${entry%%,*}"
- entry="${entry#*,}"
- local metric="${entry%%,*}"
- if [ "$addr" != "::" ]; then
- local prefix="$addr/$mask"
- log "found ipv6 prefix $prefix"
- userprefix="$userprefix $prefix"
- continue
- fi
- log "preserve ra route $route"
- raroutes="$raroutes $route"
- done
- RA_ROUTES="$raroutes"
- USERPREFIX="$userprefix"
- }
- fake_ipv6pd() {
- local device="$1"
- local action="$2"
- [ "$action" != "ra-updated" ] && return
- [ -n "$PREFIXES$USERPREFIX" ] && return
- [ -z "$ADDRESSES$RA_ADDRESSES" ] && return
- reset_envs
- [ -n "$ADDRESSES$RA_ADDRESSES$PREFIXES$USERPREFIX" ] && setup_interface "$device"
- }
- fake_ipv6pd "$@"
复制代码 保存以后在ssh输入
- /etc/init.d/network restart
复制代码 附上原作者连接
https://blog.icpz.dev/articles/notes/odhcpd-relay-mode-discuss/
里面的方法一我试了可能对我这个版本无效,帖子里所分享的是方法二,里面的第一步修改LAN口的ra、dhcpv6为服务模式ndp模式禁用,我特意测试过,这三项全改成混合与原作者所建议设置方案,只要是按教程步骤操作完,都可以让ipv6成功正常使用。
|
|