# 關於 shadowsocks 的一點基礎和背景. 請看
https://zh.wikipedia.org/zh-hk/Shadowsocks
http://huanhoo.net/2017/02/27/GFW/
*** 本 shadowsocks 裝置安裝在大陸境外, 硬件可以安裝在數據中心, 辦公室或家居中. 當然也可以用國外雲端虛疑主機 VPS 去實現, 因為 dd-wrt 有 x86版本. 使用 dd-wrt 是因為成本便宜, 體積小, 管理方便. 最重要是, 我有十幾台舊路由器...... ***
# 先瞭解下用來示範的網絡的結構
因為不想打攪到上方路由器, 把 dd-wrt (shadowsocks) 裝置設定成 LAN 的一台主機, 所以 dd-wrt 裝置原有的功能如 iptables, SPI 防火牆, WAN, DHCP, uPnP, WiFi......等沒用的服務全部關掉. port forwarding 由上方路由器做設定. dd-wrt 裝置的 WAN port 不用接上, 設定 dd 的 IP 固定在 192.168.1.6 接上 LAN port 到 switch就可以.
# 本文目標
- 準備 dd-wrt 裝置
- 安裝 Entware repo
- 安裝 shadowsocks server 端
- 設定 shadowsocks server 端
- 啟動 shadowsocks server, 設定自動啟動
- 設定 port forward
- shadowsocks client (local) 端的設定, 手機設定, 開始使用
1. dd-wrt 主機的準備(無需要的可跳過)
我們想在dd-wrt機器內安裝 shadowsocks server, 方法有很多, 這次我用最簡單的方法, 是透過「軟件市場」去裝「軟件包」.「軟件市場」就像手機市場一樣, 內裏有很多專為你機器而設的軟件包.
而 dd-wrt 預設是沒有軟件市場的. 我們首先要安裝好這個「市場」, 以前 dd-wrt 的軟件市場(repo) 是 Optware. 但因為已很老舊取消了. 現在可以用的市場是 Entware.
問題又出來了. 要安裝額外軟件, 我們的 dd 主機(Router)要有一個足夠的, 可保存資料的空間(Entware + Shadowsocks 共使用了15MB 空間). 在 dd-wrt 裏, 那空間叫 jffs
情況一:
如果原來的 jffs 空間足夠, 我們可在其上建立 /opt 資料夾, 然後連結系統的 /opt 和 /jffs/opt 就可使用來裝 Entware
方法如下
用 putty 軟件 ssh/telnet 到 dd-wrt 主機(Router IP: 192.168.1.6), 登入
然後
# mkdir /jffs/opt # mount -o bind /jffs/opt /opt |
這樣就可以開始安裝 Entware 和 shadowsocks
情況二:
但我用作示範的 dd 主機(Router)沒有可用空間, 幸好機器有USB port. 所以可以把 /opt 掛載到 USB flash 上.
首先, 我用 VM 上的 CentOS7, 將 USB flash 格式化成 ext3 檔案系統, Drive 隨便改個名稱 Entware/Optware. (我試過ext2, ext4, NTFS, FAT. 都出現權限或寫入問題)
然後在 dd-wrt 裏打開Core USB Support, 勾選 USB Storage Support 和 Automatic Drive Mount.
關機, 插入USB Flash, 重開機. 發覺 dd-wrt 已自動將 /opt 掛載到 USB Flash. 可以開始用了!
(近來發現部份 dd-wrt 版本不會自動掛載, 大家可以在 "Mount this Partition to /opt" 中輸入 UUID 即可. UUID 在下方資訊中有顯示)
2. 安裝 Entware repo
參考
https://www.dd-wrt.com/wiki/index.php/Installing_Entware
跟據 DD-WRT wiki的指示, 下載適合的「自動安裝腳本」
我的 dd 主機是 MIPS based devices (Atheros, not dual core), 其它 CPU 或雙核心的請下載另一個.
所以
# cd /opt (click enter) #轉到目錄 # wget http://bin.entware.net/mipssf-k3.4/installer/generic.sh (click enter) #下載 # sh generic.sh (click enter) #安裝 |
等待安裝完成
但我又遇到了另一個問題, 我這邊的 wget 一直沒反應, 唯有用電腦先下載好 generic.sh 腳本, 放進 USB Flash 裏再去執行
***後來發現是 DD裝置的 LAN沒有設定好將Gateway和DNS 指向上方路由 192.168.1.1)***
# cd /opt (click enter) # sh generic.sh (click enter) |
好了, 終於裝好 Entware repo. 沒出現任何 error
安裝完後, 先執行一次市場本身的 update 檢查
# opkg update # opkg upgrade |
3. 安裝 shadowsocks 伺服器端
可參考
https://zzz.buzz/zh/gfw/2016/02/16/deploy-shadowsocks-on-routers/
先來看看有什麼 shadowsocks 套件
# opkg list shadowsocks* |
列出了幾個 shadowsocks-libev-ss-local, shadowsocks-libev-ss-server, shadowsocks-libev-ss-redir 等. 目前發展到 3.1.3版本了. 連 shadowsocksR 都有呢.
這次我們只安裝 shadowsocks-libev-ss-server, 所以
# opkg install shadowsocks-libev-ss-server |
很快, 安裝完成
4. 設定好 shadowsocks 的連線參數
設定文件在 /opt/etc 資料夾內, 文件叫 shadowsocks.json
# cd /opt/etc # vi shadowsocks.json |
*** vi 是 linux 指令介面的文字編輯器, 即類似 Windows 的記事本. 不會操作的請上網搜尋下.
基本上是按 Insert 開始編輯, 按 Esc 退出編輯, 輸入 :w! 即儲存, 輸入 :q! 即離開 ***
原文件
{ "server": "伺服器地址", "server_port": 伺服器連接埠, "local_address": "0.0.0.0", "local_port": 本地連接埠, "password": "密碼", "method": "加密方式", "mode": "所用協議" } |
修改成以下, 算是最基本又可運行的設定了
{ "server": "0.0.0.0", "server_port": 12345 "local_port": 1080, "password": "&GSiwUD51", "timeout": "60", "method": "aes-256-cfb", } |
Server IP 我設成 0.0.0.0, 即接受所有連接.
Server port 隨便選, 定義上是由 0 至 65535 都可以. 但 0 到1023 是 Well Known Ports, 它們緊密綁定(binding)於一些服務, 為免衝突我盡量避免使用. 有人說設成 443 最能騙過 GFW. 你們自己測一下那個好吧.
Password 不要設太簡單是常識吧
Method 使用 AEAD 加密方式最好, 網上建議用 aes-256-cfb. 不同加密方式對速度有影響.
如果想要更多設定, 請參考 shadowsocks-libev 官方 GitHub 說明文件
https://github.com/shadowsocks/shadowsocks-libev
*** 由於dd機器只作為LAN其中一台主機, 所以這次不用設定本機的 iptable ***
5. 啟動 ss-server
方法一: 直接在前台啟動 ss-server, 會佔用現在連接中的session, 可以一直觀看運行情況和運行資訊, 可以看到執行時發生的問題
輸入以下指令
# ss-server -c /opt/etc/shadowsocks.json |
方法二: 透過服務在後台啟動 ss-server (試用方法一沒發現問題的話, 就可安心用方法二)
先設定服務文件, 文件位於 /opt/etc/init.d , 名叫 S22shadowsocks
# vi /opt/etc/init.d/S22shadowsocks |
裏面的預設啟動是 PROCS=ss-local. 將它改成 PROCS=ss-server. 儲存
然後可試試啟動服務
# /opt/etc/init.d/S22shadowsocks start |
想停止服務的話, 輸入以下
# /opt/etc/init.d/S22shadowsocks stop |
將此指令儲存到 dd 管理頁面的 Administration> Commands> save startup
每次開機會自動啟動
不安心? 檢查一下 ss-server 有無啟動吧
# netstat -l |
看到有監聽之前設定的 port, 可以了
安裝和設定基本完成, 習慣上 dd 裝置先來個 reboot
# reboot |
6. 設定 port forward 和 防火牆
在路由器的 port forwarding 上, 將上邊所用的 server port 由 WAN 對應到 dd 機器的 IP 位置. 套用就可以.
7. 電腦, 手機安裝 shadowsocks client 軟件 (local 端)
最後一步, 手機/電腦安裝 shadowsocks client (local) 軟件, 用 mobile network 試試連接. 我的一次就成功了.
只要輸入四個參數
Server IP: 即遠端 ss-server 那邊的 WAN IP
Remote port: 要和你 ss-server 的設定相同
Password: 要和你 ss-server 的設定相同
Encrypt Method: 要和你 ss-server 的設定相同
試試連接, 連接成功!
測一下速度. 在這款 Atheros MIPS CPU上跑, 最高上下載速度大約 30-35Mbps 之間. 幾台電話一起使用足夠有餘了
End
後記:
即使只有單一port, 我實測四台裝置同時連線都可以的, 而且同時流暢看到 youtube 1080p 串流. 我的機器運作了一整年都不用維護
Shadowsocks 還有很多不同的配置和設定, 例如白名單, 流量轉發, 更強的欺暪能力
又可以安裝在很多不同的機器上, 例如比較多人用的 VPS (虛疑專屬主機), Openwrt…..等等
有興趣認識更多的朋友可以上網找找資料
後記二:
我用的dd裝置是水星 MW4530R, 即 TP-Link WDR4300 的大陸內銷版.
舊款的 WR1043ND 也是好東西
其實大家不用花很多錢去買 Asus 或 Netgear 的貴價路由去裝 ss-server, 隨便買個一百幾十元支援dd-wrt和USB的路由, 或者用二手貨, 多裝幾個用來分流更多使用者, 效果可能更好, MIPS和ARM 的好處是省電省空間. 我估計一個2米高 600mmx800mm 的伺服器櫃應該可以裝上600台 MIPS/ARM CPU 設備.
原本要丟去回收的舊路由變得有用, 實在太好, 這次順便把無用, 細容量的記憶卡都用完