Living Young and Wild and Free
用Shadowsocks來架設提供多人翻牆的環境
本篇利用Shadowsocks實現翻牆。Shadowsocks是一種使用Socks5代理方式的加密傳輸協定,透過代理的方式達到翻牆的效果。主要在介紹如何實現以最少成本、最簡單的方法提供多人翻牆,如何免去在本機電腦安裝Shadowsocks用戶端。
摘要
- 準備工作
- 說明這次環境架構的原理
- 如何安裝必備軟體
- 修改符合自己所需的設定檔
- 啟動服務
- 本機電腦HTTP代理設定
準備工作
- 本篇架設的環境是在CentOS 7上
- 一台雲端運算平台安裝Shadowsocks伺服器端,也是主要連外的機器。
- 一台用來安裝Shadowsocks客戶端及代理伺服器。
架構原理說明
將Shadowsocks伺服器端架設在雲端運算平台上,另一台架設Shadowsocks客戶端及代理伺服器,本機可以直接透過HTTP代理的方式,先由本機電腦連到代理伺服器,再由代理伺服器連到Shadowsocks客戶端,再連到Shadowsocks伺服器端的雲端運算平台,最後由雲端運算平台訪問目的地,進而達到翻牆的效果。
一般的常見的做法是將伺服器端架設在雲端運算平台,本地會安裝Shadowsocks的客戶端,建構一個本地的Socks5代理,瀏覽網路時,需要先通過本地代理傳遞到用戶端軟體,然後才能傳送到伺服器端,反之亦然。
然而,用在公司內部或是需要多人翻牆的環境下,則需要每台電腦都安裝Shadowsocks的客戶端,顯得非常不方便。本篇的架構是在多台本機可透過HTTP代理連到Shadowsocks客戶端,再連到雲端運算平台的服務端。如下圖所示:
環境架設
在一個乾淨的CentOS環境上,可以按照步驟安裝下列套件,若環境中已已經安裝可以省略。
- 下載PIP
PIP套件是Python官方的線上安裝套件工具,由於接下來要安裝的Shadowsocks是使用Phtyon語言編寫,所以需要先安裝這個套件來下載Shadowsocks。
執行
wget https://bootstrap.pypa.io/get-pip.py
- 安裝PIP
安裝PIP
執行
get-pip.py
- 安裝Shadowsocks
這次功能主要是透過Shadowsocks的Sock5代理來翻牆,需個別安裝再內網及外網兩台機器上。
執行
pip install shadowsocks
- 安装Privoxy
Privoxy是一款不進行網頁快取且內建過濾功能的代理伺服器, 安裝在內網機器上。
執行
yum install privoxy
修改設定檔
總共有四個設定檔需要修改,分別是Shadowsocks伺服器、Shadowsocks加密設定檔、Shadowsocks客戶端和代理伺服器。主要是對應的Port需要注意,IP位址根據實際路徑填寫。以下提供範例及修改所需注意事項。
- Shadowsocks伺服器設定檔(若不存在可以直接在任意路徑建立檔案)
{
“server”:”0.0.0.0″,
“server_port”:8388, // 提供給客戶端連接的Port
“local_address”:”5.6.7.8″,
“local_port”:1081,
“password”:”123456″,
“timeout”:300,
“method”:”aes-256-cfb”,
“fast_open”:false
}
- Shadowsocks客戶端(若不存在可以直接在任意路徑建立檔案)
{
“server”:”1.2.3.4″, // 需對應實際伺服器IP
“server_port”:8388, // 需對應伺服器設定的Port
“local_address”:”5.6.7.8″,
“local_port”:1080, // 需對應代理伺服器要連接的Port
“password”:”123456″, // 需對應伺服器設定的密碼
“timeout”:300,
“method”:”aes-256-cfb”, // 需對應伺服器設定的加密方式
“fast_open”:false
“workers”:1
}
- 加密設定檔
路徑位於/usr/lib/python2.7/site-packages/shadowsocks/crypto/util.py, 將紅色的部分註解掉
for name in lib_names:
if os.name == “nt”:
if os.name == “nt”:
paths.extend(find_library_nt(name))
#else:
#path = ctypes.util.find_library(name)
#if path:
#paths.append(path)
- 代理伺服器
修改代理伺服器設定檔, 路徑位於/etc/privoxy/config。
confdir /etc/privoxy
logdir /var/log/privoxy
filterfile default.filter
logfile logfile
listen-address 0.0.0.0:8118 (需對應要給本機電腦連結的Port)
toggle 1
enable-remote-toggle 0
enable-remote-http-toggle 0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
enable-proxy-authentication-forwarding 0
forward-socks4 / 5.6.7.8:1080 . (需對應Shadowsocks客戶端實際的IP跟Port)
forward-socks5t / 5.6.7.8:1080 . (需對應Shadowsocks客戶端的實際IP跟Port)
forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward *.*.*.*/ .
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 300
tolerate-pipelining 1
socket-timeout 300
logdir /var/log/privoxy
filterfile default.filter
logfile logfile
listen-address 0.0.0.0:8118 (需對應要給本機電腦連結的Port)
toggle 1
enable-remote-toggle 0
enable-remote-http-toggle 0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
enable-proxy-authentication-forwarding 0
forward-socks4 / 5.6.7.8:1080 . (需對應Shadowsocks客戶端實際的IP跟Port)
forward-socks5t / 5.6.7.8:1080 . (需對應Shadowsocks客戶端的實際IP跟Port)
forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward *.*.*.*/ .
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 300
tolerate-pipelining 1
socket-timeout 300
啟動服務
- 啟動Shadowsocks伺服器 (/etc/shadowsocks.json是上面伺服器設定檔的路徑)
執行
ssserver -c /etc/shadowsocks.json -d start
- 啟動Shadowsocks客戶端 (/etc/shadowsocks.json是上面伺服器設定檔的路徑)
執行
nohup /usr/bin/python2 /usr/bin/sslocal -c /etc/shadowsocks_local.json &
- 啟動Privoxy服務
執行
systemctl start privoxy
本機電腦HTTP代理設定
其他想要翻牆的電腦,可以直接設定透過HTTP代理,再也不需要加裝任何軟體了。

常見問題
如果無法連線的話,請檢查設定檔是否正確。
- 本機Proxy的IP跟Port是對應到Privoxy上實際的IP跟設定的Port是一樣的。
- Privoxy設定檔中的forward-socks4跟forward-socks5t是否是與Shadowsocks的客戶端設定檔中的local_port是一樣的。
- Shadowsocks的客戶端設定檔中的server_port是否和Shadowsocks的伺服器設定檔中的server_port是一樣的。
- Shadowsocks的客戶端設定檔中的server是否是和Shadowsocks伺服器的實際IP。

