技术实践
日常思考

老毛子Padavan获取IPv6 解决无网络访问权限 获取唯一ipv6

以前使用老毛子 Padavan 固件开启 IPv6 时,遇到过路由器能够获取 IPv6,但下面的电脑、手机没有 IPv6 网络访问权限,或者虽然能拿到 IPv6 地址却无法正常访问 IPv6 网站的情况。

当时使用的方法比较简单,通过 ebtables 把 IPv6 流量从 WAN 口桥接到 LAN,让下面的设备直接从上级网络获取 IPv6 地址,同时 IPv4 继续走 Padavan 原来的 NAT。

这篇是以前留下来的 Padavan 使用记录,现在重新整理一下。不同型号、Padavan 版本以及运营商网络环境可能不一样,最重要的是先确认自己的 WAN 接口名称,不要直接照抄 eth2.2

先确认 IPv6 所在接口

SSH 登录 Padavan 路由器,执行:

ifconfig

找到已经获取到 IPv6 地址的 WAN 接口。

我当时使用的是:

eth2.2

不同设备可能会显示为:

eth2.2
eth3
eth0.2

甚至其他名称,所以后面的命令需要把 eth2.2 换成自己的实际接口。

如果接口选错,不仅 IPv6 不会正常工作,还有可能影响原来的网络连接。

开启 IPv6 桥接

确认接口以后执行:

modprobe ip6table_mangle

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i eth2.2

brctl addif br0 eth2.2

如果自己的 WAN 接口是 eth3,则改成:

modprobe ip6table_mangle

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i eth3

brctl addif br0 eth3

这里不要机械复制接口名称,先用 ifconfig 确认。

这三条命令是做什么的

简单来说,这种配置相当于让 Padavan 对 IPv4 和 IPv6 使用两种不同的处理方式。

第一条:

modprobe ip6table_mangle

加载 IPv6 相关的内核模块。

第二条:

ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i eth2.2

利用 ebtables 的 BROUTING 规则,把非 IPv6 流量从桥接路径中分出来。

第三条:

brctl addif br0 eth2.2

把对应的 WAN 接口加入 Padavan 的 LAN 网桥。

最终效果大致可以理解为:

IPv4
上级网络
   ↓
Padavan 路由 / NAT
   ↓
电脑、手机

IPv6
上级网络
   ↓
Padavan IPv6 桥接
   ↓
电脑、手机直接获取 IPv6

也就是 IPv4 还是正常使用路由器 NAT,而 IPv6 更接近直通模式。

加入 Padavan 启动脚本

SSH 中直接执行以后,路由器重启配置会丢失,所以确认能够正常使用后,需要把命令加入 Padavan 的启动脚本。

进入:

高级设置 → 自定义设置 → 脚本

找到:

自定义用户脚本
→ 在路由器启动后执行

在最后加入:

# IPv6
modprobe ip6table_mangle
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i eth2.2
brctl addif br0 eth2.2

同样,eth2.2 必须改成自己实际使用的 WAN 接口。

保存以后重启路由器。

检查终端有没有获取 IPv6

路由器重新启动以后,可以在电脑或者手机上检查 IPv6。

Windows 可以执行:

ipconfig

Linux 可以执行:

ip -6 addr

正常情况下,除了 fe80:: 开头的链路本地地址以外,还应该能够看到运营商下发的全局 IPv6 地址。

也可以直接打开:

https://test-ipv6.com/

检查 IPv6 网络是否能够正常访问。

需要注意,只有拿到一个 fe80:: 地址并不能说明公网 IPv6 已经正常,这个地址主要用于本地链路通信。

有 IPv6 地址但还是不能上网

如果终端已经获得 IPv6,但是仍然打不开 IPv6 网站,可以先检查几个地方。

确认接口有没有选错

重新执行:

ifconfig

重点确认哪一个接口真正获得了上级网络的 IPv6。

如果实际接口是 eth3,脚本里面却还是写着 eth2.2,自然不会正常工作。

确认上级网络本身支持 IPv6

这个方法只是把已有的 IPv6 网络传递给下面的设备,并不能凭空提供 IPv6。

如果光猫或者上级网络本身没有获得 IPv6,Padavan 后面的终端也不会因此得到可用的 IPv6。

重连一次网络

修改以后终端可能还保留着之前的网络状态,可以尝试关闭再打开电脑网卡、Wi-Fi,或者重新连接一次网络。

实在不行再重启 Padavan 和终端重新测试。

现在还需要这样设置吗

这篇方法主要针对以前部分 Padavan 固件原生 IPv6 支持不完善,或者上级网络没有正常进行 IPv6 Prefix Delegation 的情况。

如果现在使用的路由器和运营商已经可以正常通过 DHCPv6-PD / SLAAC 给 LAN 设备下发 IPv6,就没必要再额外使用这种桥接方法。

能直接使用固件自带 IPv6 功能的情况下,优先使用原生配置会更简单。

IPv6 开启以后注意防火墙

IPv4 家庭网络大部分设备都躲在 NAT 后面,而 IPv6 的使用方式并不完全一样。

终端获得全局 IPv6 地址以后,不要因为“没有做端口转发”就默认外部一定访问不到。

实际能不能从公网直接访问,还要看运营商网络、路由器 IPv6 防火墙和终端自身防火墙。

如果只是为了正常使用 IPv6,建议保持 Padavan 和电脑自身的 IPv6 防火墙开启,不要为了测试方便直接把所有入站规则全部放开。

最后

当时 Padavan 遇到 IPv6 无网络访问权限的问题,我使用的核心配置就是:

modprobe ip6table_mangle
ebtables -t broute -A BROUTING -p ! ipv6 -j DROP -i eth2.2
brctl addif br0 eth2.2

配置以后相当于 IPv4 继续通过 Padavan 路由,IPv6 则从上级网络桥接到 LAN,让下面的设备直接获取 IPv6。

最容易出问题的地方其实就是 WAN 接口名称,所以不要直接照搬 eth2.2,先通过 ifconfig 确认自己的实际接口。

这是一篇 2019 年留下来的 Padavan 配置记录,老设备或者老固件目前仍然可以作为参考。如果现在使用的新固件已经能够正常通过原生 IPv6 / DHCPv6-PD 工作,就没有必要再额外加这几条命令。

赞(0) 打赏
未经允许不得转载:Kelro Blog » 老毛子Padavan获取IPv6 解决无网络访问权限 获取唯一ipv6

评论 2

  1. #1

    很有用,多谢!

    calmond7年前 (2019-07-25)回复
  2. #2

    多谢

    7年前 (2019-08-19)回复