天天看點

配置路由器ipv6通路(padavan&mi_r2d)

研一和研二因為有張無限流量的校園聯通卡,是以一直沒在意上網的事情。研三最後半個學期沒有流量真是難受的要死。東北大學校園網ipv6出口免流量,家裡移動的網絡有ipv6,有幾次放假回家都想着配好了能在學校用,之前沒動力,也就沒怎麼仔細研究,到畢業了都沒搞出來。最後一個學期用着vps的ipv6代理,由于海外ip,視訊網站還不能看,網速還不确定,憋屈。

這次畢業了在家沒事幹,倒是把ipv6配出來了。。。記錄一下自己踩的坑吧,其實就一層窗戶紙,哎。

0.驗證網絡是否有ipv6

我家的網絡環境,光纖入戶,破解了光貓,由路由器進行pppoe撥号。由于路由器一般都沒有配置ipv6,是以無法擷取ipv6位址。

建議測試時,直接将光貓連接配接電腦,然後配置pppoe撥号。打開http://test-ipv6.com/測試是否可以通路ipv6。确定可以通路之後,下一步配置路由器。

1.配置padavan路由器通路ipv6

參考内容很多,放一個最近配置時看到的。

H大Padavan固件中NAPT66子產品的使用方法【适用于教育網原生IPv6】(20190131更新)

這裡我再轉述一遍。

這裡是使用NAPT66子產品,我家的newifi mini的固件自帶這個插件,OpenWrt可能需要安裝,安裝可以參考這個連結Padavan/Openwrt/LEDE下實作ipv6 nat/napt66

在确定擁有NAPT66子產品的Padavan固件下:

1)修改外部網絡(WAN)中的Ipv6設定

配置例子如下,配置成功後,在網絡地圖->外部網絡狀态的”Ipv6位址 WAN”中就可以看到ipv6位址,這個時候路由器已經可以通路ipv6了,但是區域網路還沒有配置設定ipv6位址

配置路由器ipv6通路(padavan&mi_r2d)

2)在“在防火牆規則 (Emong\'s Qos) 啟動後執行”腳本中添加如下腳本:

### NAPT66 所需要的防火牆政策
ip6tables -F
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
           

3)進入“自定義設定 - 腳本”中“路由器啟動後執行”腳本中添加如下腳本:

### 啟動 NAPT66 子產品
insmod /lib/modules/$(uname -r)/kernel/net/napt66/napt66.ko wan_if=ppp0
           

注意!上面的wan_if後面的參數,原文章給的是eth0.2,就是因為這個我被坑了這麼久,沒配置正确。這裡需要自己确定具體的參數。确定的方式很簡單,登入ssh,輸入ifconfig,看是哪個網絡擷取了ipv6位址。

例如我這裡,可以看出是ppp0擷取到的ipv6位址,是以設定為ppp0:

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.***.****.180  P-t-P:10.253.64.1  Mask:255.255.255.255
          inet6 addr: 2409:8a44:****:3b:****:8ebc:****:a7f8/64 Scope:Global
          inet6 addr: fe80::****:****:****:a7f8/10 Scope:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:3808279 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4144880 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:3205203030 (2.9 GiB)  TX bytes:757281553 (722.1 MiB)
           

4)重新開機路由器,重新開機計算機網絡

2.配置小米r2d擷取ipv6網絡

回家之後在拼多多又淘了個小米路由器r2d,自帶1t硬碟,cpu雙核A9+256RAM+512ROM,性能可以,才272塊。雖然最後确認是官翻,而且硬碟通電3000+小時,還行吧,這麼便宜要啥自行車,帶1年保修。

小米的路由器本身無法配置ipv6,是以繼續研究。

2.1 開啟ssh

配置ipv6需要開啟ssh,而小米官方管道開啟ssh會失去保修,這裡提供小米r2d非官方開啟ssh的方法。

參考:更新小米路由器3 SSH

需要舊版的開發版固件,brcm4709_r2d_all_2.8.14.bin

1)手動更新,選擇舊版固件。

2)進入192.168.31.1,并登入,登入後在位址欄會有stok,記錄,用來替換下面網址中的stok,替換stok後陸續在位址欄執行以下4條(注意每次執行要等待指令執行完成後,即頁面打開狀态的小圓圈轉完)。

http://192.168.31.1/cgi-bin/luci/;stok=【你的stok,登入路由器管理界面在位址欄可以看到】/api/xqnetwork/set_wifi_ap?ssid=tianbao&encryption=NONE&enctype=NONE&channel=1%3Bnvram%20set%20ssh%5Fen%3D1%3B%20nvram%20commit

http://192.168.31.1/cgi-bin/luci/;stok=【你的stok,登入路由器管理界面在位址欄可以看到】/api/xqnetwork/set_wifi_ap?ssid=tianbao&encryption=NONE&enctype=NONE&channel=1%3Bsed%20%2Di%20%22%3Ax%3AN%3As%2Fif%20%5C%5B%2E%2A%5C%3B%20then%5Cn%2E%2Areturn%200%5Cn%2E%2Afi%2F%23tb%2F%3Bb%20x%22%20%2Fetc%2Finit.d%2Fdropbear

http://192.168.31.1/cgi-bin/luci/;stok=【你的stok,登入路由器管理界面在位址欄可以看到】/api/xqnetwork/set_wifi_ap?ssid=tianbao&encryption=NONE&enctype=NONE&channel=1%3B%2Fetc%2Finit.d%2Fdropbear%20start

http://192.168.31.1/cgi-bin/luci/;stok=【你的stok,登入路由器管理界面在位址欄可以看到】/api/xqsystem/set_name_password?oldPwd=路由器管理密碼&newPwd=路由器管理密碼 
           

前三個URL傳回的相關錯誤代碼是:

{
    "msg": "未能連接配接到指定WiFi(Probe timeout)",
    "code": 1616
}
           

最後一個是root ssh登入小米路由器的密碼設定,是以,隻有傳回如下,才能說明ssh破解正常:

{
    "code": 0
}
           

3)測試ssh

成功開啟ssh後,使用powershell、putty或者你熟悉的ssh用戶端,輸入下面指令,如果開啟ssh成功,輸入密碼即可登入路由器。

ssh [email protected]
           

如果開啟失敗,會被拒絕通路,類似下面的提示

ssh: connect to host localhost port 22: Connection refused
           

開啟ssh成功後,可以直接線上更新最新版的固件,ssh權限不會被關閉。

2.2 開啟ipv6

這部分基本照搬下面的參考連結,我也沒有遇到什麼坑

參考:小米路由的IPv6支援教程(Update: 19/03/04)

1)外部網絡(WAN)擷取ipv6

替換路由器檔案 /etc/config/ipv6 為

config ipv6 \'settings\'
        list if_on \'wan\'
        option enabled \'1\'
        list if_on \'ipv6\'
        option enabled \'1\'
           

重新開機路由器,通過兩種方法判斷路由器是否擷取到ipv6位址。

  • ifconfig判斷是否擷取到ipv6網址
  • 通過下面的指令判斷路由器是否獲得ipv6位址
    ping6 ipv6.tsinghua.edu.cn
               

2)局部網絡(LAN)擷取ipv6

小米路由事實上已經實作了大多數的 IPv6 支援,然而由于固件版本太低,唯獨 NDP 在光貓路由情形下無法正常工作,需要額外可執行檔案來幫忙。

6relayd 可以作為合适的 NDP 中繼。其實 6relayd 功能還有很多,更有 odhcpd 作為更豐富的繼承者。然而這兩個元件官方均未提供使用,于是運用小米提供的 SDK 自行編譯了 6relayd

下載下傳:6relayd

百度網盤:連結: https://pan.baidu.com/s/1pmoeEJcGIB6tHeaJISWVqQ 提取碼: u2df

将 6relayd 檔案放入/sbin/并使其可執行。由于該檔案夾預設隻讀,先在 SSH 中輸入以下指令解鎖:

mount -o remount rw /
           

之後,用之前推薦的軟體通過 SCP 把檔案放入上述檔案夾。并授予其可執行權限:

chmod +x /sbin/6relayd
           

此時,在SSH中執行“6relayd”應該會顯示程式的幫助資訊。

在本案例中,輸入如下指令:

6relayd -N eth0.2 br-lan &
           

重新開機區域網路中的計算機後,再通過網站驗證 IPv6,應當會通過驗證。

走到這一步,說明全部的技術路線已經打通。為了讓 6relayd 能夠在路由器重新開機後自動執行,将其附加在開機自動執行的腳本上。以 /etc/init.d/plugin_start_.sh 為例,加入的方式如下:

netmode=$(uci get xiaoqiang.common.NETMODE)
        if [ "$netmode"x != "lanapmode"x ] && [ "$netmode"x != "wifiapmode"x ]
        then
                copy_plugin_chroot_file
                sync
                # decrese current priority and throw myself to mem cgroup
                # so all plugins inherit those attributes
                renice -n+10 -p $
                echo $ > /dev/cgroup/mem/group1/tasks
                /usr/sbin/plugin_start_impl.sh &
                6relayd -d -N eth0.2 br-lan
        fi
           

重新開機路由器後,路由器下屬裝置應當自動獲得正常的 IPv6 連接配接,這樣的話就大功告成了。

3)對外網暴露的支援

如果本地計算機已經可以通過 IPv6 測試、可以通路 IPv6 網站,但外網通過 IPv6 無法通路本機,首先是因為 openwrt 預設阻擋所有外網主動發起 IPv6 連接配接。小米路由自帶 IPv6 防火牆 ip6tables,為了确定問題,可以用以下指令使該防火牆放行所有資料:

ip6tables -F
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
           

需要注意的是,這樣會降低内網裝置的安全性。建議自行研究和配置 ip6tables,對放行進行嚴格的限制。确定規則後,可以模仿之前思路将其設為開機啟動。

另外,不要忽略本地計算機作業系統的防火牆。例如 Windows 防火牆預設阻擋 ICMP。在此配置下,外網 ping 本機 IPv6 是沒有答複的。

3.結語

至此,我的兩個路由器都可以擷取ipv6位址,由于移動的ipv4沒有公網ip,bt下載下傳很不友善,配置ipv6之後就擁有公網ip了。

唯一踩的坑就是wan_if這個參數了,教訓就是以後用别人教程的時候,如果不管用,可以先考慮參數是否和原作者有差別,嘗試修改一下。