最近看 Trojan 加密代理蠻流行的,與以前 Shadowsocks(SS) 之類加密代理都大不相同

SS 使用了自定義的隨機加密 Protocol 來隱藏自己上網的流量,無明顯特徵

但是其實 G.F.W 真要弄你還是會被偵測出來

而 Trojan 則逆向思考,完全使用 TLS/SSL Protocol 不進行偽裝

所以連線使用的過程,完完全全就像在瀏覽一個 https 網站一樣

目前 https 是全球網際網路使用最多的流量,要在大海裡面撈針無疑相當困難

更妙的是如果你沒有正確的 Trojan 密鑰,Trojan 可以直接偽裝返回一個正常的 Web 網站

外人看的話完完全全就是一個正常到不行的網站 😆

Trojan 原版設定起來比較復雜,不過因為得益開放原始碼的關係,有大神直接改寫成 Golang 版本「Trojan-Go

還加入許多增強功能,大大降低部屬的難度與後續維護、使用的困難

這篇來快速記錄一下部屬過程

開始以前,列一下我使用的環境

  • 一台 Linux 伺服器,跑 Ubuntu、Debian 都可(amd64)
  • 一個域名(付費 or 免費都可)
  • 伺服器 80 跟 443 連接埠需開放且不能被其他服務佔用

用 nginx 搭一個「誰在講幹話」網頁

如上所說,因為 Trojan-Go 可以讓外人連線時直接丟一個正常網頁給對方

如果你不知道要丟什麼網頁,這裡推薦可以用「誰在講幹話

下面直接來安裝,首先 SSH 登入到準備要安裝 Trojan-Go 的伺服器

# 更新一下系統、安裝所需軟體
sudo apt update && sudo apt full-upgrade -y
sudo apt install nano wget git nginx -y
# 把誰在講幹話拷貝下來
git clone https://github.com/tasi788/Whosis-Sayings.git

上面執行完,會把誰在講幹話的原始碼都拷貝到伺服器上,只要記住路徑即可

就可以不用管他了

接下來寫一下 nginx 設定檔

sudo nano /etc/nginx/sites-available/default

可以刪掉預設設定檔裡面的內容,尤其是佔用 80 連接埠的部分都要刪光光

接著拷貝以下內容,貼到設定檔裡面

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
server {
        listen 8595;
        server_name localhost;
        gzip on;

   location / {
    root /path/to/Whosis-Sayings;
    index index.html;
    }

}

記得修改第 7 行誰在講幹話的路徑,之後保存退出

最後重新啟動一下 nginx 服務即可

sudo systemctl restart ngnix

下載安裝 Trojan-Go 最新版

# 建立新資料夾,準備要放 trojan-go 進去
mkdir ~/trojan-go && cd ~/trojan-go
# 下載最新版 https://github.com/p4gefau1t/trojan-go/releases
wget https://github.com/p4gefau1t/trojan-go/releases/download/v0.5.1/trojan-go-linux-amd64.zip
unzip trojan-go-linux-amd64.zip

透過以上指令下載解壓縮 Trojan-Go 以後,我們準備要先請求 Let’s Encrypt 的憑證,這部分 Trojan-Go 都已經內建

確認你伺服器防火牆的 80、443 連接埠都已經打開並且沒有其他服務佔用

因為需要綁 80、443,所以需要 sudo 或者 root 權限執行

sudo ./trojan-go -autocert request

上面這條指令輸入後,會詢問你要綁的域名以及你的 email

依照提示輸入完畢後,就等 LE 簽發憑證下來,Trojan-Go 會把這些資料都保存起來

這些檔案也不要隨便分享給其他人

👆 如上圖,執行過程很簡單,根據提示輸入指定資料即可

要注意的是 LE 憑證有效期通常只有三個月,續期時可以使用以下指令

sudo ./trojan-go -autocert renew

繼續寫一個 Trojan-Go 伺服器的設定檔

nano server.json

拷貝以外內容然後貼上

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 8595,
    "password": [
        "MyAwe3omePassW0rd"
    ],
    "ssl": {
        "cert": "/path/to/server.crt",
        "key": "/path/to/server.key",
        "sni": "whosaying.example.com",
        "fallback_port": 8595
    }
}

以上第 8 行記得修改成你喜歡的密碼,第 13 行請修改掉為你的域名

第 5、6 行就是遇到沒有密碼的人就丟給他我們搭的 nginx 誰在講幹話 nginx 伺服器

同樣記得保存之後退出

接下來製作一個開機自動執行的 Service

sudo nano /etc/systemd/system/trojan-go.service

拷貝以下內容貼上

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[Unit]
Description=Trojan-Go - An unidentifiable mechanism that helps you bypass GFW
Documentation=https://github.com/p4gefau1t/trojan-go
After=network.target nss-lookup.target
Wants=network-online.target

[Service]
Type=simple
User=root
ExecStart=/path/to/trojan-go/trojan-go -config /path/to/trojan-go/server.json
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=23

[Install]
WantedBy=multi-user.target

以上第 10 行請修改為你的路徑即可,保存退出

最後輸入以下指令就可以啓動 Trojan-Go 服務

sudo systemctl enable trojan-go
sudo systemctl start trojan-go
# 檢查啓動狀態是否成功
sudo systemctl status trojan-go

如無問題,可以打開自己電腦上瀏覽器,輸入網址看看 https://whosaying.example.com

看到誰在講幹話的網頁就表示 Trojan-Go 已經正常運作啦!

另外如果你想要更加了解詳細設定,可以參考下面網址的官方說明書

https://p4gefau1t.github.io/trojan-go/basic/full-config/

Trojan-Go Client 連線

搭好服務以後,我們就可以用這個代理來上網

同樣得益於 Golang 的優勢,多平台編譯不是很難,Trojan-Go 同樣可以作為 Client 使用

請根據你自己的平台下載

https://github.com/p4gefau1t/trojan-go/releases

下載回來後,同樣解壓縮出來,在本地建一個 client.json 設定檔

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
    "run_type": "client",
    "local_addr": "0.0.0.0",
    "local_port": 9478,
    "remote_addr": "whosaying.example.com",
    "remote_port": 443,
    "password": [
        "MyAwe3omePassW0rd"
    ],
    "ssl": {
        "sni": "whosaying.example.com"
    }
}

第 3、4 行會在本機電腦上開一個 HTTP / SOCKS5 代理出來

第 5、6、8、11 行請根據你自己在伺服器設定時的資料填進去即可

第 5 行也可以直接填伺服器 IP

接著直接在你 macOS 電腦上啓動 Client 連線

trojan-go -config client.json

成功啓動以後,Trojan-Go 就會連上伺服器,並在本機指定連接埠打開代理

在電腦瀏覽器上,我們可以安裝 SwitchyOmega 來智慧指定代理

而在 iOS 上面支援 Trojan 的 App 也蠻多的,其中就包含之前介紹過的 Surge 網路神器

很簡單直接在 Surge 裡面新增一個 Trojan 代理,然後把伺服器資料都填進去即可

搞定,收工~ 🖖