用Shadowsocks來架設提供多人翻牆的環境

本篇利用Shadowsocks實現翻牆。Shadowsocks是一種使用Socks5代理方式的加密傳輸協定,透過代理的方式達到翻牆的效果。主要在介紹如何實現以最少成本、最簡單的方法提供多人翻牆,如何免去在本機電腦安裝Shadowsocks用戶端。


摘要

  • 準備工作
  • 說明這次環境架構的原理
  • 如何安裝必備軟體
  • 修改符合自己所需的設定檔
  • 啟動服務
  • 本機電腦HTTP代理設定

準備工作

  • 本篇架設的環境是在CentOS 7上
  • 一台雲端運算平台安裝Shadowsocks伺服器端,也是主要連外的機器。
  • 一台用來安裝Shadowsocks客戶端及代理伺服器。

架構原理說明

將Shadowsocks伺服器端架設在雲端運算平台上,另一台架設Shadowsocks客戶端及代理伺服器,本機可以直接透過HTTP代理的方式,先由本機電腦連到代理伺服器,再由代理伺服器連到Shadowsocks客戶端,再連到Shadowsocks伺服器端的雲端運算平台,最後由雲端運算平台訪問目的地,進而達到翻牆的效果。

一般的常見的做法是將伺服器端架設在雲端運算平台,本地會安裝Shadowsocks的客戶端,建構一個本地的Socks5代理,瀏覽網路時,需要先通過本地代理傳遞到用戶端軟體,然後才能傳送到伺服器端,反之亦然。

然而,用在公司內部或是需要多人翻牆的環境下,則需要每台電腦都安裝Shadowsocks的客戶端,顯得非常不方便。本篇的架構是在多台本機可透過HTTP代理連到Shadowsocks客戶端,再連到雲端運算平台的服務端。如下圖所示:

Shadowsocks架構圖

環境架設

在一個乾淨的CentOS環境上,可以按照步驟安裝下列套件,若環境中已已經安裝可以省略。

  1. 下載PIP

PIP套件是Python官方的線上安裝套件工具,由於接下來要安裝的Shadowsocks是使用Phtyon語言編寫,所以需要先安裝這個套件來下載Shadowsocks。

執行 wget https://bootstrap.pypa.io/get-pip.py

  1. 安裝PIP

安裝PIP

執行 get-pip.py

  1. 安裝Shadowsocks

這次功能主要是透過Shadowsocks的Sock5代理來翻牆,需個別安裝再內網及外網兩台機器上。

執行 pip install shadowsocks

  1. 安装Privoxy

Privoxy是一款不進行網頁快取且內建過濾功能的代理伺服器, 安裝在內網機器上。

執行 yum install privoxy


修改設定檔

總共有四個設定檔需要修改,分別是Shadowsocks伺服器、Shadowsocks加密設定檔、Shadowsocks客戶端和代理伺服器。主要是對應的Port需要注意,IP位址根據實際路徑填寫。以下提供範例及修改所需注意事項。

  1. 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

}

  1. 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

}

  1. 加密設定檔

路徑位於/usr/lib/python2.7/site-packages/shadowsocks/crypto/util.py, 將紅色的部分註解掉

for name in lib_names:
if os.name == “nt”:

paths.extend(find_library_nt(name))

#else:

#path = ctypes.util.find_library(name)

#if path:

#paths.append(path)

  1. 代理伺服器

修改代理伺服器設定檔, 路徑位於/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


啟動服務

  1. 啟動Shadowsocks伺服器 (/etc/shadowsocks.json是上面伺服器設定檔的路徑)

執行 ssserver -c /etc/shadowsocks.json -d start

  1. 啟動Shadowsocks客戶端 (/etc/shadowsocks.json是上面伺服器設定檔的路徑)

執行 nohup /usr/bin/python2 /usr/bin/sslocal -c /etc/shadowsocks_local.json &

  1. 啟動Privoxy服務

執行 systemctl start privoxy


本機電腦HTTP代理設定

其他想要翻牆的電腦,可以直接設定透過HTTP代理,再也不需要加裝任何軟體了。

Proxy設定


常見問題

如果無法連線的話,請檢查設定檔是否正確。

  1. 本機Proxy的IP跟Port是對應到Privoxy上實際的IP跟設定的Port是一樣的。
  2. Privoxy設定檔中的forward-socks4跟forward-socks5t是否是與Shadowsocks的客戶端設定檔中的local_port是一樣的。
  3. Shadowsocks的客戶端設定檔中的server_port是否和Shadowsocks的伺服器設定檔中的server_port是一樣的。
  4. Shadowsocks的客戶端設定檔中的server是否是和Shadowsocks伺服器的實際IP。
分享文章