[2020.08.19] OpenWRT 在某大学校园网环境下通过NAT方式配置IPv6互联网访问
封面配图 PID 19136833
今天试着玩了一下宿舍里的 IPv6 接入,在这里记录一下自己的踩坑过程
网络环境
博主所在的学校宿舍区采用 DHCPv6 的方式下发 IPv6 地址,无需拨号。接入墙上网口的终端只能获取到一个 128 前缀的 IPv6 地址。
查找了网上其他关于在 OpenWRT 路由器中对 IPv6 的配置过程,总的来说分为三类接入类型:
- 路由器作为中继
所有接入的客户端以及路由器本身的 IPv6 流量转发到 OpenWRT 路由器本身的 IPv6 地址,然后 OpenWRT 路由器再将流量转发到其 IPv6 网关。路由器作为接入客户端的下一跳。此接入类型要求上级网关可以分配一个 IPv6 地址 段给路由器。博主尝试了在路由器上要求上级分配长度不同的地址段,但都没有成功。这大概率是因为上级(学校网络中心机房)没有配置 允许下级设备(学生们插在宿舍里的路由器)获取地址段。所以,路由器作为中续在博主所在的学校不适用。
- IPv6 穿透
路由器将 WAN 口和 LAN 口(包括无线网络接口,如果有的话)桥接在一起,路由器相当于一个交换机,转发接入的客户端的 DHCPv6 请求给上级,这样接入的客户端都可以从上级获取到一个 IPv6 地址了。而路由器对于接入设备发送的 IPv4 流量,则采用传统 NAT 的方法路由出 WAN 口。博主咱个人认为,配置穿透较为复杂(涉及到链路层和网络层的切换),加上需要手动配置 IPv6 防火墙,不小心手滑按错可就麻烦了。再加上 原生 Android 不支援也不计划支援 DHCPv6,以及不能控制设备获取到的 DNSv6 地址(采用 IPv6 地址的 DNS 服务器地址),这个接入方法也被博主抛弃了。
- 传统 NAT
传统 NAT 就是传统 NAT,路由器获取一个 IPv6 地址,同时向接入设备下发路由器自己给接入设备分配的内网地址(段)。路由器作为网关,所有流量流入路由器并经过路由器转换地址(NAT)后发送给上级(公网)。可以说是把 IPv4 的模式 copy 到 IPv6 下了。此接入方式配置简单,缺点是接入设备只能获取到内网地址,不可自由 被互联网上的其他设备访问(外网访问需要手动在路由器上设置端口转发,或在路由器上开启 upnp。也可以说是在另一面上方便了咱们对接入设备的防火墙管理),以及对路由器的地址转换性能有些的要求(接入设备访问互联网时需要路由器改写数据包的源地址)(但目前关于 IPv4 和 IPv6 两种协议在 NAT 时谁更吃性能这个问题尚无定论,可能因路由器型号及路由器系统内是否支援硬件转发而不同)。总之性能方面博主宿舍桌上供着的 MT7621 洋垃圾应该是不成问题的。
那么博主就采用第③种方法好了
路由器刷机
刷机包采用目前最新的 OpenWRT 19.07.3 官方稳定版本,刷机具体过程略。
路由器从上级获取 IPv6 地址
新建一个 WAN 口取名WAN6(已经有的就不需要再建了),接口协议选DHCPv6客户端,启动时连接勾上,请求IPv6地址选择总是,请求指定长度IPv6选择禁用。高级设置选项卡中,使用对端通告的DNS地址取消勾勾,使用自定义DNS服务器填上清大的 DNS 服务器2001:da8::666。
保存,保存并应用。
稍等两三秒钟,不出意外可以看到这个接口被分配到一个 128 前缀的 IPv6 地址了。一般在大陆的校园网环境中,这个 IPv6 地址是以2001:da8:开头的。
现在咱们来确认 IPv6 接入的有效性:
ssh 连入路由器,ping 一下2001:da8::666看看通不通。
如果是通的,那么恭喜你..... 的路由器,已经成功获取到 IPv6 地址并接入 IPv6 互联网了。
如果不通,先试试 traceroute2001:da8::666,如果只有第一跳,而且第一跳是路由器的 IPv6 公网地址(2001:da8:开头),延迟还巨高(大概 3000ms 左右),并附有!H 的标志(代表下一跳路由不可达),请给路由器加上一条路由表。可以参考 这篇文章 。我使用的 OpenWRT 官方固件已经自动帮我加好了,可能只在部分老版本 OpenWRT 以及自编译版本上需要手动添加。
其他情况,询问学校网管或许是最好的解决办法
修改路由器默认的 IPv6 地址前缀
在 OpenWRT 官网给出的 IPv6 NAT 上网指南 最后说明了关于 ULA 前缀需要修改的原因。
翻译成白话文是说,OpenWRT 默认的IPv6 ULA前缀是以fd**开头的,这是一个 IPv6 私网地址段,不能用于路由出内网。
解决方法是将IPv6 ULA前缀的第一位字符由f改为d。
在 OpenWRT 19.07.3 版本中,IPv6 ULA前缀设置项被单独放到了名为全局网络选项的选项卡中。见下图↓
(打码是为了防止泄露 MAC 地址,还请见谅)
修改后保存并应用。
路由器下发内网 IPv6 给接入设备
回到接口 >> LAN >> DHCP服务器 >> IPv6设置,设置为:
| 路由通告服务 | 服务器模式 |
| DHCPv6 服务 | 服务器模式 |
| NDP 代理 | 已禁用 |
| DHCPv6 模式 | 无状态 + 有状态 |
| 总是通告默认路由 | 勾上 |
保存并应用,拔插一下接入路由器的设备(可以的话最好重启路由器和接入路由器的所有设备)
最后检查一下笔电和手机平板等设备是否获取到了d开头的 IPv6 地址
路由器转发来自接入设备的 IPv6 流量
首先需要安装 NAT6 的内核模块,确定路由器已连入互联网并可以正常下载 opkg 软件源,ssh 执行
opkg update
opkg install kmod-ipt-nat6
少女祈祷后回到管理页面中,进入防火墙,Custom Rules,下面的框框中追加一条:(请将 {IPv6 ULA 前缀} 替换成之前修改后的IPv6 ULA前缀,别忘了结尾有个/48)
ip6tables -t nat -A POSTROUTING -s {IPv6 ULA前缀} -j MASQUERADE
保存并应用,生效后打开笔电上的 cmd,ping 一下2001:da8::666。看到来自清大那霸气的 28ms 回复,NAT6 就算配置成功了。(28ms 经供参考,因高校所处具体地理位置及校内网络 负优化而有所增减)
后续
至此已经实现了宿舍内接入路由器的设备通过 NAT 方式访问 IPv6 互联网 ,魔法上网的姿势增加了。 关于端口转发以及 DDNS 等奇怪的玩法,等博主的新 NAS 机箱壳做好寄到再开工吧。这些留着再水一篇新的博文(咕咕咕咕
附一张魔法上网测速图,BJ 时间晚上 10 点测得的
300 多的延迟,FPS 是别想了。但接近 300M 的带宽你管 4K 推流还是毫无压力的
参考链接:
OpenWRT IPv6 三种配置方式
Android does not support DHCPv6 and Google 'Won't Fix'that
OpenWrt 配置 IPv6 NAT
NAT6 and IPv6 masquerading - OpenWRT
本文链接:https://blog.hiirachan.moe/archives/1598021438.html
This blog is under a CC BY-NC-SA 3.0 Unported License
本站不提供任何可用于侵入、非法控制计算机信息系统的程序、工具
亦不提供非法定信道进行国际联网





