我最近一段時間在搭建用於構建 Docker 映象的開發測試環境,這個環境是一臺執行於 Windows 筆記本上的虛擬機器,其作業系統為 Ubuntu 18.04 。構建場景中經常要去 Github 獲取程式碼,由於大家都明白的原因,我經常會構建失敗。故而打算部署一款隧道軟體,來加速虛擬機器的網路。clash 已經在我的 Mac 環境中執行了很久,一直很穩定,故而選擇在 Ubuntu 環境中部署它。
clash - A rule-based tunnel in Go.
安裝部署
clash 是一款用 Go 語言開發的軟體,所以我可以直接下載預編譯的版本進行部署。
下載地址:https://github.com/Dreamacro/clash/releases/download/v1.8.0/clash-linux-amd64-v1.8.0.gz
軟體的作者提供了多種架構下預編譯的二進位制檔案,大家一定要注意區分。我當前下載的版本,適合在 x86_64
架構的 Linux 作業系統中執行。
下載完成後,需要解壓,並賦予執行許可權。
wget https://github.com/Dreamacro/clash/releases/download/v1.8.0/clash-linux-amd64-v1.8.0.gz
gzip -d clash-linux-amd64-v1.8.0.gz
chmod +x clash-linux-amd64-v1.8.0
mv clash-linux-amd64-v1.8.0 /usr/local/bin/clash
Go 語言開發的程式,其打包出的二進位制檔案不需要其他依賴,可以直接執行。
clash -v
得到如下返回時,意味著 clash 已經可用了。
Clash v1.8.0 linux amd64 with go1.17.3 Mon Nov 8 13:26:00 UTC 2021
配置檔案
clash 執行需要依賴於一份 YAML 配置檔案,預設讀取 $HOME/.config/clash/config.yaml
。當沒有這份檔案的時候,clash 會使用預設配置生成一份,所以我們可以直接執行一下 clash ,來獲取模版。
root@ubuntuserver:~# clash
INFO[0000] Can't find config, create a initial config file
INFO[0000] Can't find MMDB, start download
INFO[0000] Mixed(http+socks) proxy listening at: 127.0.0.1:7890
Control + C 退出後,就可以獲取預設配置檔案了。
root@ubuntuserver:~# ls $HOME/.config/clash/config.yaml
/root/.config/clash/config.yaml
接下來修改這份配置檔案,追加我的代理的配置。
代理大家各不相同,我使用的是 Just My socks
提供的 ss
和 v2y
。
最終配置如下:
mixed-port: 7890
proxies:
- name: "ss1"
type: ss
server: server1_of_ss
port: 443
cipher: aes-256-gcm
password: "password"
- name: "ss2"
type: ss
server: server2_of_ss
port: 443
cipher: aes-256-gcm
password: "password"
- name: "v2y"
type: vmess
server: server3_of_ss
port: 443
uuid: uuid
alterId: 0
cipher: auto
proxy-groups:
- name: "auto"
type: url-test
proxies:
- ss1
- ss2
- v2y
url: 'http://www.gstatic.com/generate_204'
interval: 300
rules:
- DOMAIN-SUFFIX,google.com,auto
- DOMAIN-KEYWORD,google,auto
- DOMAIN,google.com,auto
- DOMAIN-SUFFIX,github.com,auto
- DOMAIN-KEYWORD,github,auto
- DOMAIN,github.com,auto
- IP-CIDR,127.0.0.0/8,DIRECT
- GEOIP,CN,DIRECT
- DST-PORT,80,DIRECT
- SRC-PORT,7777,DIRECT
- MATCH,auto
執行服務
我希望每次啟動 Ubuntu 虛擬機器, clash 都可以自動啟動,所以我決定將它託管給 systemd
來管理。
生成 systemd
配置檔案:
cat > /etc/systemd/system/clash.service << EOF
[Unit]
Description=Clash - A rule-based tunnel in Go
Documentation=https://github.com/Dreamacro/clash/wiki
[Service]
OOMScoreAdjust=-1000
ExecStart=/usr/local/bin/clash -f /root/.config/clash/config.yaml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
配置開機自啟,並啟動 clash 服務:
systemctl enable clash
systemctl start clash
為 Linux 配置代理
clash 執行起來之後,會在 http://127.0.0.1:7890 這個地址監聽 HTTP_PROXY 服務,接下來需要為 Linux 配置代理,使所有的 http 請求,都經由這個代理服務進出。設定很簡單,Linux 有專門的環境變數 http_proxy
https_proxy
進行相關配置,為了使每次開啟終端都可以使環境變數生效,特意做了如下配置:
echo -e "export http_proxy=http://127.0.0.1:7890\nexport https_proxy=http://127.0.0.1:7890" >> ~/.bashrc
重新開啟一個終端,即可使配置生效。
至此,clash 在 Linux 上的配置都已經完成了。
驗證效果
我所使用的 Ubuntu Server 18.04 是不帶圖形化介面的作業系統。所以我用了一個命令列瀏覽器 w3m
來驗證我的 clash 是否工作正常。
w3m www.google.com
得到如下返回,說明我的目標已經達成。