日版Switch連不上校園網(wǎng)的解決方案
修改:switch可以直接連加速器,比如電腦安裝一個uu加速器,在電腦開啟主機游戲加速,點擊加速器的設置網(wǎng)絡查看設置信息,然后在switch上點擊對應WiFi,設置加速器提供的網(wǎng)關ip、子網(wǎng)掩碼、ip地址、dns地址,最后連接WiFi網(wǎng)絡即可。記住是電腦開啟加速器,switch和電腦連接同一個路由器(有線或WiFi),switch手動設置網(wǎng)關信息。這樣設置后,就不用設置路由器了,也不要求必須是openwrt路由器,同時可以解鎖一些國外游戲。缺點是加速器要錢!或者也可以嘗試在openwrt路由器上開啟加速器。
前排提醒:此方案需要使用運行openwrt或者其它linux系統(tǒng)的路由器
舍友買了一個日版Switch主機,發(fā)現(xiàn)連不上宿舍WiFi。

上圖是實測結果,嚴格來說,可以連上宿舍WiFi,不過第二步聯(lián)網(wǎng)測試掛了,然后Switch主動關閉了WiFi連接。
后面測試手機熱點是可以連接的,這說明不經(jīng)過代理連接是有可能的。
進一步排查問題,我通過PC分享熱點,然后用Wireshark抓包后得到這樣的結果:

聯(lián)網(wǎng)測試過程一般必須經(jīng)過DNS查詢的,這樣我們可以根據(jù)查詢結果看看具體用到哪些域名,通過上面的結果,我發(fā)現(xiàn)相關域名是?ctest.cdn.nintendo.net,ip是23.220.73.166
過濾這個ip得到:

通過上面的結果,可以得出以下結論:
DNS解析是正常的
目標ip的TCP(http)連接是正常的
http返回403錯誤
結論3可能是聯(lián)網(wǎng)測試出錯的原因。
上述結果的連接模式是:Switch <---> PC(抓包) <--->?路由器WiFi(校園網(wǎng))
進一步確認問題,我在可以正常訪問的網(wǎng)絡上進行了抓包,連接模式是:
Switch <---> PC(抓包)<---> 手機USB熱點(電信網(wǎng)絡)


可以看到,正常響應是200 ok
另外,雖然這個域名的dns解析變了,但是即便通過舊的ip地址23.220.73.166訪問依然是返回ok
現(xiàn)在,可以得出結論:?ctest.cdn.nintendo.net響應403是Switch認定不能聯(lián)網(wǎng)的原因,我們也可以認為,服務器返回403的依據(jù)是請求ip,也就是這個服務器封禁了校園網(wǎng)ip。
既然如此,我們可以嘗試一種簡單的辦法:
我們在Switch請求http://ctest.cdn.nintendo.net/的時候直接給它返回 200 ok。
這個方案其實并不難實現(xiàn),因為這是http請求,我們可以直接進行MITM(中間人攻擊)。
原本的請求:
Switch <---> 路由器 <---> 校園網(wǎng)網(wǎng)關 <---> 測試服務器
要實現(xiàn)的請求:
Switch <---> 路由器 <---> 劫持服務器(Nginx反向代理)
要求:
路由器是openwrt系統(tǒng)(或者其它linux系統(tǒng))
操作步驟:
1. 登錄路由器網(wǎng)關,選擇 網(wǎng)絡 > 主機名, 固定ctest.cdn.nintendo.net域名的ip解析為23.220.73.166(或者其它值),固定的目的是為了更方便劫持,因為這個域名可能有多個ip記錄。

2. 選擇 系統(tǒng)?> 管理權 打開ssh權限

3. 登錄ssh,通過powershell輸入 ssh -l root 192.168.1.1 (這是網(wǎng)關ip,和上面的瀏覽器輸入的ip地址一致,密碼也和瀏覽器輸入的一樣)。

4. 安裝nginx,輸入命令 opkg update && opkg install nginx

5. 檢驗nginx安裝成功,輸入 nginx -v

6. 配置反向代理

vim nginx.conf執(zhí)行后,按 i 鍵進入編輯模式,粘貼下面的內(nèi)容
粘貼好后,按ESC退出編輯模式,輸入 :wq 然后按回車,保存并退出。
7. 運行nginx并測試http請求正常
輸入 /etc/init.d/nginx enable 回車,設置nginx開機啟動
輸入 /etc/init.d/nginx start 回車,本次手動啟動

瀏覽器訪問 http://192.168.1.1:8080/

看到ok表示正常。
8. 設置iptables流量轉(zhuǎn)發(fā)
cat /proc/sys/net/ipv4/ip_forward 看看結果是否為1,不為1的話可以輸入
echo 1 >?/proc/sys/net/ipv4/ip_forward?
輸入?iptables -A PREROUTING -t nat -p tcp -d 23.220.73.166 --dport 80 -j DNAT --to 192.168.1.1:8080 回車
注意 192.168.1.1 是路由器網(wǎng)關地址,如果不一致應替換。

添加完轉(zhuǎn)發(fā)規(guī)則后,用瀏覽器訪問http://ctest.cdn.nintendo.net/ (注意不要開代理,有時候因為瀏覽器dns緩存,可能也不一定能夠立即看到這個結果,多刷新幾次、換瀏覽器測試,還不行的話檢查 dns固定解析 和 iptables設置是否正確)

如果瀏覽器看不到結果,可以使用curl訪問看看

現(xiàn)在,可以用Switch連接WiFi測試了!

持久化iptables規(guī)則:
編輯 /etc/rc.local,添加iptables命令
注意 chmod +x rc.local 添加執(zhí)行權限才能被系統(tǒng)運行


總結:
http://ctest.cdn.nintendo.net/對校園網(wǎng)ip進行了封禁,可以通過http中間人攻擊替換403響應為200正常響應。
另外,有openwrt交叉編譯基礎的同學,可以直接clone一下openwrt代碼,設置好目標硬件信息,編譯工具鏈,然后讓chatgpt寫個監(jiān)聽8080端口的簡單http程序,每個http請求返回固定的200 OK,接著用工具鏈編譯,用scp復制到路由器上運行,這樣就不用安裝和配置NGINX了,同時占用非常少的內(nèi)存。