研一和研二因為有張無限流量的校園聯通卡,所以一直沒在意上網的事情。研三最后半個學期沒有流量真是難受的要死。東北大學校園網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地址
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 root@192.168.31.1
如果開啟失敗,會被拒絕訪問,類似下面的提示
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這個參數了,教訓就是以后用別人教程的時候,如果不管用,可以先考慮參數是否和原作者有區別,嘗試修改一下。