因為公司的 VPN 是用 Jigsaw 的 outline 來架,client 端設定滿簡易的,想說在我的筆電(archlinux)上也來設定一下,無奈都跑不起來,除了試過官網,還試了 snap
的版本,甚至到 GitHub 專案上抓原始碼來 build。cordova web app build 是 build 起來了,但不曉得為什麼一連上網路就一直鬼打牆重新連接。electron 則是 build 完後看起來沒有錯誤訊息,但根本找不到它 build 出來的 app XDD
後來發現它的網址是 ss://
開頭,查了一下,發現背後用的其實就是鼎鼎大名的 shadowsocks,不用 outline 直接設定 proxy 連線總可以了吧,研究了一整個早上才終於連通了,遇到滿多坑的,下面是填坑筆記(埋
安裝 shadowsocks
pip install shadowsocks
由於網路上查到的資料大多使用 pip
來安裝,因此我也從 pip
安裝,但各語言的實作應該用起來差不多。安裝完會有兩個指令 sslocal
以及 ssserver
可以使用,看名字就知道一個是用戶端,一個是服務端。
設定 shadowsocks
vim /etc/shadowsocks/shadowsocks.json
主要的設定都放在這個 json 裡面,如果你不想放在 /etc/shadowsocks,也可以放在其他路徑。
{
"server": "your_server",
"server_port": "your_server_port",
"local_address": "127.0.0.1",
"local_port": 1080,
"password": "your_password",
"timeout": 300,
"method": "chacha20-ietf-poly1305",
"fast_open": false
}
公司給我的設定方式是 outline 的格式,像這樣:
ss://<一串大小寫英數字>=@<hostname>:<port>/?outline=1
這裡我卡住一陣子,不知道設定檔要怎麼設,後來把那串大小寫英數字拿去用 base64 decode 才得到 method
和 password
。
這裡的 method
是加密方式,要根據 server 端來設定,由於我是使用 chacha20-ietf-poly1305
,有一個隱藏的坑,待會會提到。
設定完成後就可以啟動了,停止的指令也一併附上:
# 啟動
sslocal -c /etc/shadowsocks/shadowsocks.json -d start
# 停止
sslocal -d stop
{{chacha20-ietf-poly1305
,可能會遇到 method chacha20-ietf-poly1305 not supported
的問題,我是安裝最新的 shadowsocks 解決的:
# 裝完後再試著啟動一次就沒問題了
pip install https://github.com/shadowsocks/shadowsocks/archive/master.zip
{{}}
為了方便,設定自動啟動。
systemctl enable shadowsocks.service
systemctl start shadowsocks.service
systemctl status shadowsocks.service
安裝 privoxy
由於 shadowsocks 跑在 socket5 上面,需要使用 privoxy 把流量導向 http/https。
pacman -S privoxy
設定 privoxy
vim /etc/privoxy/config
以下兩行取消註解:
listen-address 127.0.0.1:8118
forward-socks5t / 127.0.0.1:1080 .
listen-address 的 8118 是預設的 port
forward-socks5t 的 127.0.0.1:1080 則是要和上面 shadowsocks 設定的 local_address 一致,注意最後有一個點 .
啟動 Privoxy
這邊一樣設定自動啟動
systemctl enable privoxy
systemctl start privoxy
systemctl status privoxy
設定 http/https proxy
vim /etc/profile
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
驗證
# 測試使用的 ip 是否已經改為 shadowsocks server ip
curl ipinfo.io/ip
# 或者直接 curl google,如果回來一堆 HTML 就代表沒問題
curl www.google.com
# 或者看回傳的 header,如果是 http status 是 200 OK 代表沒問題
curl -I www.google.com
以上只有在 CLI 裡面有用,使用瀏覽器開網頁(https://myip.com.tw/)仍舊會顯示原始的 ip。
我用的是 GNOME,設定內有 proxy 可以調整,或者如果用 firefox 也可以在瀏覽器內調整 proxy 設定,如果找不到相關設定方式,或有許多 server 管理起來過於繁瑣,也可以考慮使用瀏覽器套件,目前比較多人使用的套件是 SwitchyOmega。
SwitchyOmega
Chrome 安裝擴充套件「SwitchyOmega」,並設定 proxy 為剛剛設定的 ip,之後再到 https://myip.com.tw/ 看看是否上網的 ip 已經改為 shadowsocks server 的 ip 了。