在OpenWrt路由器上使用IPv6

现在的教育网和宽带基本都提供了IPv6支持。但是,由于网络性质使然,IPv6并不能像IPv4那样,直接使用路由器共享,这使得路由器接入IPv6后,所有连接到路由器的设备都不能连接v6。

为此,必须对路由器进行一番魔改。如果路由器使用的是OpenWrt,或基于OpenWrt的固件,那么在经过一番设置后,IPv6的共享就不再是传说了。

设置脚本

为了方便路由器的配置,我将所有设置过程做成了一个脚本,并在GitHub上开源。

项目地址:https://github.com/AnClark/OpenWrt-IPv6-Scripts

脚本地址:戳这里直接下载,脚本文件名为operation.sh

使用脚本的步骤很简单,只要你准备好用于发送文件的WinSCP,与用于远程登录路由器的PuTTY。

  • 第一步,使用WinSCP,登录到路由器上,并将operation.sh上传到/tmp文件夹中。
  • 第二步,使用PuTTY或WinSCP自带的Shell,运行/tmp/operation.sh。稍等片刻,即可配置好。下次重启路由器,就可以自动将WAN的IPv6共享给路由器局域网内的设备了。

如果使用Linux,或在Windows下使用Cygwin或Git-SCM(一个在Windows下使用Git的套件),那么使用它们自带的scpssh工具,会方便得多:

# 将脚本发送到路由器上。注意路由器地址
scp operation.sh [email protected]:/tmp/
# 在路由器上运行脚本
ssh [email protected] "chmod +x /tmp/install.sh; sh /tmp/operation.sh"

原理

脚本完成的设置过程,包括了如下具体操作:

(1)安装kmod-ipt-nat6

kmod-ipt-nat6是用于启用IPv6 NAT的内核模块。在OpenWrt中,使用包管理工具opkg进行安装。

opkg update
opkg install kmod-ipt-nat6

(2)更改IPv6 ULA前缀

ULA,全称为“唯一的本地IPv6单播地址”(Unique Local IPv6 Unicast Address)[1]。这一步,我们要把它的前缀由f改为d,以将本地的IPv6地址向外广播,而不是localhost那样的闭环。

用于实现这一步的脚本如下:

uci set network.globals.ula_prefix="$(uci get network.globals.ula_prefix | sed 's/^./d/')"
uci commit network

OpenWrt的属性参数由uci工具管理,类似于Android的property机制(setprop/getprop),使用“域”来组织各类参数。脚本的第一行,在$()中调用uci命令,获取当前的ULA前缀,将执行结果传递给sed命令。这里sed命令使用了替换语法——sed 's/<原文本>/<替换文本>/',将开头第一个字符替换为字符“d”。Shell的$()语法可将命令运行结果作为文本使用,那么该用法内的命令结果就作为新的ULA前缀被应用。最后,运行第二行的命令,提交修改。


  1. 《IPv6地址》. 北海石松 - 博客园. https://www.cnblogs.com/gogly/articles/2558150.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章