方法 1 - 重设路由表
注意,该方法依赖 owipcalc 包来计算子网地址:opkg install owipcalc 。
我们可以手动在 WAN 口获得 IPv6 地址后添加一条路由表,让整个子网重定向到 LAN 口,这个操作可以通过 OpenWrt 的 hotplug 机制来进行,保存以下脚本放在 /etc/hotplug.d/iface/80-reset-route6 并重启 WAN 接口即可:
#!/bin/sh
wan_dev="wan6"
[ "$HOTPLUG_TYPE" = "iface" ] || exit 0
[ "$INTERFACE" = "$wan_dev" ] || exit 0
RTMETRIC=127
. /lib/functions/
network.shnetwork_get_physdev lan_dev lan || exit 0
ifup_cb() {
local _lan_dev="$1"
local _metric="$2"
local wan_subnet
network_get_subnet6 wan_subnet "$wan_dev" || return
_wan_network=$(owipcalc "${wan_subnet}" network)
ip -6 route replace "$_wan_network" dev "$_lan_dev" metric "$_metric"
}
ifdown_cb() {
local _lan_dev="$1"
local _metric="$2"
ip -6 route flush dev "$_lan_dev" metric "$_metric"
}
case "$ACTION" in
ifup)
ifup_cb "$lan_dev" "$RTMETRIC"
;;
ifdown)
ifdown_cb "$lan_dev" "$RTMETRIC"
;;
ifupdate)
ifdown_cb "$lan_dev" "$RTMETRIC"
sleep 1
ifup_cb "$lan_dev" "$RTMETRIC"
;;
*)
;;
esac
exit 0
第零步,安装软件包
0.1 系统--软件包--更新列表
过滤器输入:owipcalc
安装
0.2 编辑 80-reset-route6 文件,,内容见上面,拷贝到 /etc/hotplug.d/iface/80-reset-route6
0.3 赋予执行权限 777
chmod +X /etc/hotplug.d/iface/80-reset-route6
第一步,先搞定 wan6 口
1 、网络--接口--wan6--编辑
1.1 、常规设置
协议:DHCPv6 客户端
设备:eth0
开机自动运行:选择
请求 IPv6 地址:try
请求指定长度的 IPv6 前缀:自动
1.2 、高级设置
强制链路:不选
请求 DHCP 时发送的客户端 ID:空
使用默认网关:选择
自动获取 DNS 服务器:选择
DNS 权重:空
使用网关跃点:空
覆盖 IPv4 路由表:未指定
覆盖 IPv6 路由表:未指定
IPv6 源路由:选择
委托 IPv6 前缀:选择
IPv6 分配长度:已禁用
IPv6 前缀过滤器:-- 请选择 --
IPv6 后缀:::1
IPv6 优先级:空
1.3 、防火墙设置
创建和分配防火墙区域:wan 和 wan6
1.4 、DHCP 服务器--常规设置
忽略此接口:不选
1.5 、DHCP 服务器--IPv6 设置
指定的主接口:选择
RA 服务:中继模式
DHCPv6 服务:中继模式
NDP 代理:中继模式
学习路由:选择
第二步,搞定 lan 口
2 、网络--接口--lan--编辑
2.1 、常规设置
协议:静态地址
设备:br-lan
开机自动运行:选择
IPv4 地址:192.168.100.1
IPv4 子网掩码:255.255.255.0
IPv4 网关:灰色无法更改
IPv4 广播地址:灰色无法更改
IPv6 地址:空
IPv6 网关:空
IPv6 路由前缀:空
2.2 、高级设置
强制链路:选择
使用默认网关:选择
使用自定义的 DNS 服务器:空
DNS 搜索域名:空
DNS 权重:空
使用网关跃点:空
覆盖 IPv4 路由表:未指定
覆盖 IPv6 路由表:未指定
委托 IPv6 前缀:选择
IPv6 分配长度:禁用
IPv6 前缀过滤器:-- 请选择 --
IPv6 后缀:::1
IPv6 优先级:空
2.3 、防火墙设置
创建和分配防火墙区域:lan
2.4 、DHCP 服务器--常规设置
忽略此接口:不选
启动:100
客户数:150
租期:infinite
2.5 、DHCP 服务器--高级设置
动态 DHCP:选择
强制:不选
IPv4 子网掩码:灰色无法更改
DHCP 选项:空
2.6 、DHCP 服务器--IPv6 设置
指定的主接口:不选
RA 服务:中继模式
DHCPv6 服务:中继模式
NDP 代理:中继模式
学习路由:选择
NDP 代理从属设备:不选
第三步,网络--接口--全局网络选项
IPv6 ULA 前缀:空
数据包引导:选择
第四步,网络--DHCP/DNS--高级设置
过滤 IPv6 AAAA 记录:不选
过滤 IPv4 A 记录:不选
第五步,网络--防火墙
--自定义规则
# 放行入站(wan,lan,docker ,单向进入), icmpv6 续约
ip6tables -I input_rule -p udp --sport 546 --dport 547 -j ACCEPT
# 放行转发(光猫与下级 PC ,双向), icmpv6 续约
#ip6tables -I forwarding_rule -p udp --sport 546 --dport 547 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 1 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 2 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 3 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 4 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 128 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 129 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 130 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 131 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 132 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 133 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 134 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 135 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 136 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 137 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 141 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 142 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 143 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 148 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 149 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 151 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 152 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
ip6tables -I input_rule -p ipv6-icmp --icmpv6-type 153 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 131 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 132 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 133 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 134 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 135 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 136 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 137 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 141 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 142 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 143 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 148 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 149 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 151 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 152 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
#ip6tables -I forwarding_wan_rule -i eth0 -p ipv6-icmp --icmpv6-type 153 -m limit --limit 100/s --limit-burst 10 -j ACCEPT
-----------------------------------------------
软路由重启(系统--重启)
第六步,其他问题
6.1 、如果获得了 ipv6 地址,缺无法 ping 通,大概率是以下三个地方
网络--接口--全局网络选项,IPv6 ULA 前缀:空
网络--接口--wan6 ,IPv6 分配长度:已禁用
网络--接口--lan ,IPv6 分配长度:已禁用
原因是纯 relay 模式下客户端不会获取到“IPv6 ULA 前缀”下的地址/路由/邻居信息,当客户端尝试回复从路由器发出的 ULA-prefix 下地址的 neighbor solicitation 时,匹配不到这个 ULA 地址的路由只好放弃。
6.6 、文件 /etc/config/dhcp 如下
config dhcp 'lan'
option interface 'lan' #端口名称
option start '100' #端口号起始--结束
option limit '150'
option dhcpv4 'server'
option leasetime '12h' # infinite 租期,v4v6 均有效
option ra 'relay'
option ndp 'relay' #中继运行模式
option dhcpv6 'relay'
config dhcp 'wan'
option interface 'wan'
option ignore '1'
config dhcp 'wan6'
option interface 'wan6'
option master '1'
option ra 'relay'
option ndp 'relay'
option dhcpv6 'relay'
------------------------------------------------------
6.7 、passwall 插件,DNS 设置,过滤代理域名 IPv6 ,要勾选,不对 IPV6 解析,使得 IPV6 直接连通,不经过 passwall 。