在 OpenWrt Chaos Calmer 中配置 IPv6 NAT

參考文章:「 在OpenWrt上配置原生IPv6 NAT 服務器

個人環境和參考文章相似都爲教育網,使用 Openwrt 版本同樣(15.05-rc2 比較精簡,不帶 luci,D-Link DIR-605 中可憐的 4M flash 竟然能剩896K空間能夠安裝軟件),對參考文章的步驟略作修改。網絡

  1. 刷入 OpenWrt 15.05-rc2,使用原始配置,安裝 IPv6 內核 nat 模塊及路由追蹤軟件:測試

    opkg update
    opkg install kmod-ipt-nat6
    opkg install iputils-tracepath6
  2. 修改 /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'
  3. 更改 /etc/firewall.user ,添加一行,爲內網訪問外網 IPv6 時提供IP假裝.net

    ip6tables -t nat -A POSTROUTING -o $(uci -q get network.wan6.ifname) -j MASQUERADE
  4. 建立 /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/route6blog

#!/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 網關。

相關文章
相關標籤/搜索