二级路由下的 Openwrt 获取 ipv6

方法1: relay (中继模式 )

一般来说,较新的openwrt都已经内置了 Orelay 协议 !
优点:貌似是最优解的ipv6下发方式,且无需自行安装配置环境,且路由器本体也可以获得ipv6
缺点:可能会出现隔一段时间自行更换ipv6公网,导致ddns等服务更新不及时掉线

操作流程:首先ssh连上路由

vi /etc/config/dhcp

将配置中的lan、wan,wan6 三部分分别替换为如下文本,完成后:wq保存配置

config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option ra 'relay'
    option ndp 'relay'
    option dhcpv6 'relay'
    option ra_management '1'

config dhcp 'wan'
    option interface 'wan'
    option ignore '1'

config dhcp 'wan6'
    option interface 'wan'
    option ra 'relay'
    option ndp 'relay'
    option dhcpv6 'relay'
    option master '1'

如果你需要内网设备优先解析ipv6,则还需:

vi /etc/config/network
config globals 'globals'
   option ula_prefix 'f***:****:****::/48'

将option ula_prefix (ipv6 ula前缀设置)中的f***:****:****::/48改为 d***:****:****::/48
重启设备reboot即可使用

方法2: Passthrough ( 穿透模式 )

Passthrough就是不处理ipv4,直接将ipv6穿透至上级路由中去
优点:稳定不掉线,而且貌似是兼容性最强的玩法,你甚至可以做几级路由全部这样设置都能获取到,华硕路由器自带此功能
缺点:需要安装模块支持,很多固件可能会opkg安装不上,需要编译作者支持,且路由器本身无法获取到ipv6

opkg update
opkg install ebtables kmod-ebtables-ipv6

IPv4 转发

interface=`ip -6 route | grep "default" | awk '{print $7}'` 
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i $interface 

桥接至外网

brctl addif br-lan $interface

关闭odhcpd

/etc/init.d/odhcpd stop 
/etc/init.d/odhcpd disable 

进入openwrt管理页面,进入编辑 LAN 接口,在IPv6设置 选项卡中选上“始终通告默认路由”或者叫做“Always announce default router”