站点图标 Linux-技术共享

翻牆‧在 dd-wrt 裝置上安裝 shadowsocks 伺服器端(牆外)

ss_1_4

# 關於 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就可以.

 

# 本文目標

  1. 準備 dd-wrt 裝置
  2. 安裝 Entware repo
  3. 安裝 shadowsocks server 端
  4. 設定 shadowsocks server 端
  5. 啟動 shadowsocks server, 設定自動啟動
  6. 設定 port forward
  7. 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 設備.

原本要丟去回收的舊路由變得有用, 實在太好, 這次順便把無用, 細容量的記憶卡都用完

退出移动版