前言
作業系統為 Ubuntu。
客戶端代理軟體為 Python 版本 Shadow 和諧 socks 自帶的 sslocal。
SS 安裝和配置過程不再贅述。預設本地埠
1080
,這裡改成了1081
。
sslocal 是 socks5 代理,需要一個軟體進行 socks5 和 HTTP 的轉換。
下面介紹 polipo 和 privoxy 兩種。
polipo 貌似只能全域性代理,privoxy 全域性/自動兩種代理方式都可以實現。
全域性代理下,訪問
localhost
時也會走代理,可能導致無法正常訪問本地服務。
polipo 實現全域性代理
安裝 polipo:
apt-get update
apt-get install polipo
複製程式碼
polipo 的配置檔案 /etc/polipo/config
初始內容只有 logSyslog
和 logFile
兩項。
新增以下內容:
# SS 的代理地址
socksParentProxy = "127.0.0.1:1081"
# 型別
socksProxyType = socks5
# 轉換為 HTTP 之後的埠
proxyPort = 8123
# 下面的就不清楚了
chunkHighMark = 50331648
objectHighMark = 16384
serverMaxSlots = 64
serverSlots = 16
serverSlots1 = 32
proxyAddress = "0.0.0.0"
複製程式碼
8123
就是 HTTP 代理的埠了。
接下來把代理地址新增到環境變數。在 /etc/profile
新增以下內容:
export http_proxy="http://127.0.0.1:8123"
export https_proxy="http://127.0.0.1:8123"
複製程式碼
重新載入:
source /etc/profile
複製程式碼
啟動 polipo:
service polipo start
複製程式碼
測試一下:
curl www.google.com
複製程式碼
privoxy 實現全域性和自動代理
privoxy 可以配置 .action 格式的代理規則檔案。通過控制規則檔案實現全域性和自動代理。
action 檔案可以手動編輯,也可以從 gfwlist 生成。
下面將先介紹 privoxy 的安裝配置,再介紹 action 檔案的生成。
安裝配置
安裝 privoxy:
apt-get update
apt-get install privoxy
複製程式碼
進入目錄 /etc/privoxy
,可以看到目錄結構大致為:
config
配置檔案,這個檔案很長。。*.action
代理規則檔案*.filter
過濾規則檔案trust
不造幹嘛用templates/
同上
開始修改配置檔案。
privoxy 有 filter (過濾)的功能,可以用來實現廣告攔截。不過這裡只希望實現自動代理,在配置檔案中把 filter 部分註釋掉:
# 大約在435行
# filterfile default.filter
# filterfile user.filter # User customizations
複製程式碼
我們將使用自定義的 action 檔案,所以把預設的 action 檔案註釋掉,並新增自定義檔案:
# 386行左右
# 預設的 action 檔案
# actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
# actionsfile default.action # Main actions file
# actionsfile user.action # User customizations
# 自定義 action 檔案
actionsfile my.action
複製程式碼
可以指定轉換後的 HTTP 代理地址,這裡直接使用預設埠 8118
:
# 785行左右
listen-address 127.0.0.1:8118
listen-address [::1]:8118
複製程式碼
如果代理規則直接寫在配置檔案 config
中,那麼代理規則和本地 SS 代理地址是寫在一起的:
# / 代表匹配全部 URL,即全域性代理
forward-socks5 / 127.0.0.1:1081 .
複製程式碼
或
# 根據規則自動代理
forward-socks5 .google.com 127.0.0.1:1081 .
複製程式碼
注意!每行最後還有一個點。
實現全域性代理就是第一種寫法了。
但是如果要自動代理,第二種直接寫在配置檔案裡的做法其實不太合適,更合適的做法是寫成 action 檔案,配置檔案中只管引用。
把上面的註釋掉。
新建 action 檔案 my.action
,內容如下:
# 這一行表示本 action 檔案中所有條目都使用代理
{+forward-override{forward-socks5 127.0.0.1:1081 .}}
# 新增一條規則
.google.com
複製程式碼
把 privoxy 轉換後的地址 http://127.0.0.1:8118
新增到環境變數,可以參照 polipo 部分。
啟動 privoxy,這時應該可以正常訪問 Google 了:
service privoxy start
curl www.google.com
複製程式碼
下面看一下怎麼用 gfwlist 生成 action 檔案。
生成 action 檔案
配置檔案
config
或 action 檔案修改後不需要重啟 privoxy。
使用的工具是 gfwlist2privoxy。這個工具很簡單,文件就幾行,寫得也很清楚。
安裝:
pip install gfwlist2privoxy
複製程式碼
gfwlist2privoxy 不支援 python3.x,安裝時注意使用的是 pip2
還是 pip3
。
引數說明:
-i
/--input
輸入,本地 gfwlist 檔案或檔案 URL。這裡使用上面的 gfwlist-f
/--file
輸出,即生成的 action 檔案的目錄。這裡輸出到/etc/privoxy/gfwlist.action
-p
/--proxy
SS 代理地址,生成後可以修改。這裡是127.0.0.1:1081
-t
/--type
代理型別,生成後也可以修改。這裡是socks5
--user-rule
使用者自定義規則檔案,這個檔案中的規則會被追加到 gfwlist 生成的規則後面
示例:
gfwlist2privoxy -i https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt -f /etc/privoxy/gfwlist.action -p 127.0.0.1:1081 -t socks5
複製程式碼
得到檔案 /etc/privoxy/gfwlist.action
:
# gfwlist.action generated by gfwlist2privoxy, 2018-08-02 07:36:00 +0000
# https://github.com/snachx/gfwlist2privoxy
{+forward-override{forward-socks5 127.0.0.1:1081 .}}
# 規則列表
...
複製程式碼
最後,把 /etc/privoxy/config
中的 actionsfile my.action
改為 actionsfile gfwlist.action
就完成了。
其他
-
還有一種自動代理的方法使用了 cow,還沒試過。
-
環境變數的配置 很多教程都只新增了
http_proxy
一項,但是實際使用中發現也需要設定https_proxy
。另外,關於地址的寫法,只寫
127.0.0.1:8123
時,遇到過有軟體不能識別的情況,改為寫完整的地址http://127.0.0.1:8123/
就不會有問題了。
參考連結
Raspberry PI+SS+Polipo 實現科學上網
Privoxy 教程
使用 Privoxy 實現通用選擇性代理功能