參考文章:「 在OpenWrt上配置原生IPv6 NAT 」服務器
個人環境和參考文章相似都爲教育網,使用 Openwrt 版本同樣(15.05-rc2 比較精簡,不帶 luci,D-Link DIR-605 中可憐的 4M flash 竟然能剩896K空間能夠安裝軟件),對參考文章的步驟略作修改。網絡
刷入 OpenWrt 15.05-rc2,使用原始配置,安裝 IPv6 內核 nat 模塊及路由追蹤軟件:測試
opkg update opkg install kmod-ipt-nat6 opkg install iputils-tracepath6
修改 /etc/init.d/dhcp , 在設置 lan 那節添加內容,odhcpd 爲內網設備設置 IPv6 地址及路由等,以下:google
config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '12h' option dhcpv6 'server' option ra 'server' option ra_management '1' option ra_default '1'
更改 /etc/firewall.user ,添加一行,爲內網訪問外網 IPv6 時提供IP假裝.net
ip6tables -t nat -A POSTROUTING -o $(uci -q get network.wan6.ifname) -j MASQUERADE
建立 /etc/hotplug.d/iface/90-ipv6 ,設置外網 IPv6 路由,修改文件屬性爲755, 內容以下:rest
#!/bin/sh [ "$ACTION" = ifup ] || exit 0 [ "$INTERFACE" = wan6 ] && { route -A inet6 add ::/0 gw $(tracepath6 -n tv.byr.cn | grep '^ 1: ' | awk 'NR==1 {print $2}') dev $(uci -q get network.wan6.ifname) }
經過 tracepath6 -n tv.byr.cn 獲取外網 IPv6 網關,可選擇其它較快且能連通的 IPv6 服務器,注意不要用 ipv6.google.com 。code
重啓路由器或者重啓網絡和防火牆(/etc/init.d/network restart; /etc/init.d/firewall restart),而後能夠測試內網設備訪問IPv6。server
補充:有時我這裏多是外網得到 IPv6 地址太慢,致使 IPv6 路由添加失敗。因而我建立了一個檢測並添加 IPv6 路由的腳本 /etc/config/route6 :blog
#!/bin/sh GATEWAY6=$(tracepath6 -n tv.byr.cn | grep '^ 1: ' | awk 'NR==1 {print $2}') if [ -z "$(route -A inet6 | grep '::/0' | grep ${GATEWAY6})" ]; then route -A inet6 add ::/0 gw ${GATEWAY6} dev $(uci -q get network.wan6.ifname) fi
而後在 /etc/crontab/root 中添加一行,cron每分鐘檢測一次 IPv6 路由:crontab
* * * * * /bin/sh /etc/config/route6
20160118 補充:tracepath6 在不一樣的 IPv6 環境中獲得的結果略有不一樣,因此 grep '^ 1: ' 多是錯誤的,能夠根據 tracepath6 -n tv.byr.cn 的實際結果,例如換成 grep '^ 1 ', 總之要搜索到正確的網關。
20160506補充:根據aixlx的建議,若是busybox版本較高(可能要>1.24),traceroute支持 IPv6,可做以下修改:
第1步省略安裝 iputils-tracepath6
第4步改成:編輯 /etc/rc.local,設置外網 IPv6 路由, 內容以下:
sleep 15 route -A inet6 add ::/0 gw $(traceroute -m 1 -n tv.byr.cn | grep '^ 1 ' | awk '{print $2}') dev $(uci -q get network.wan6.ifname) exit 0
經過 traceroute -m 1 -n tv.byr.cn 獲取外網 IPv6 網關。