在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

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