メモ:trojanをデプロイ(運ゲー)

公開日

原文言語: 中国語 。 AI翻訳: 英語 日本語


最近GFWは年末のKPIでも追ってるのか、ネットが不安定でTwitterも快適に見られないので、前に見たけど面倒そうで避けていた trojan を試すことにした。

2019/12/25 更新:難しすぎる。運良く一回だけ成功したが、rebootしたら死んだ
2019/12/26 更新:もう一度試して、なんとか使える程度にはなった。よく分からない

プロジェクト:trojan - Github
一般的な「強暗号 + 混淆」路線と違って、trojan はよくある HTTPS トラフィックに偽装する。
HTTPS に偽装するにはドメインと証明書が必要。
自分みたいな初心者にとって一番難しいのは前準備で、最後の trojan 設定自体は一番簡単だった。

今回参考にした教程は7-8本。その中で役に立ったもの:
Trojan Documentation
Trojan搭建教程 - Scaleya
自建梯子教程 —Trojan版本
Trojan:一个伪装成HTTPS的代理工具 - 荒岛
Certbot instructions - Let’s Encrypt

手順:

  • ドメイン申請
  • DNS設定
  • 証明書発行
  • trojanのインストールと設定

要件:
VPS一台。80/443ポートを開ける。


ドメイン申請

これは簡単。無料も有料もある。
Zhihuのこの回答は少し参考になる:现在去哪里买 .com 域名最便宜? - 范进的回答 - 知乎
ドメイン比較:domcomp

安いのか好きなのを選べば良い。

DNS設定

ここは CloudFlare を使った。無料版で十分。

  • 手順1:アカウント作成。作成後にドメイン追加を求められるので、買ったドメインを入れる
  • 手順2:CloudFlareを使うには、レジストラ側で nameservers を変更する必要がある
    CloudFlareが指定する値に変更する(人によって違うかも)

    (反映に少し時間がかかる。休憩。(自分は10分未満でokだった
  • 手順3:CloudFlareのパネルでDNSレコードを設定
    上のメニューで DNS を開き、Add recordA Type を追加。
    Name はドメイン、Content はVPSのIP。
    Proxy status の雲は必ずグレーの DNS only にする(オレンジだとtrojanが動かない

これでDNS設定完了。

証明書発行

ここまでで接続はできるが HTTP のまま。VPSで証明書を作って HTTPS にする必要がある。
ここでは Let’s Encrypt の証明書を使う。オープンで無料で、自分で署名できる。
使うツールは Certbot。この辺は完全に分からないので、Trojan搭建教程 - ScaleyaCertbot instructions - Let’s Encrypt を丸ごと真似した。

  • Certbotのリポジトリ追加
Terminal window
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
  • インストール
Terminal window
sudo apt-get install certbot
  • Certbotの実行タイプ?(どのサービスに証明書を当てるかを聞かれる。5択のうち見たことあるのはnginxだけだったので、教程通りnginxを選んだ。動いたからヨシ
Terminal window
sudo certbot certonly --nginx

証明書だけ発行を選ぶ。
このコマンドの後、メール、利用規約、ニュース購読、どのドメインに証明書を当てるかを聞かれるので答える。

  • certbot が「素晴らしい、証明書はできた」と言う。
    出力をよく見るとpemファイルが2つある:証明書とkey。
Terminal window
/etc/letsencrypt/live/domain/fullchain.pem
/etc/letsencrypt/live/domain/privkey.pem

keyは秘密鍵なので他人に見せない。
この2つのパスは後で使うので控える。

Terminal window
sudo certbot renew --dry-run

出力に問題がなければOK。

長いけど終わった。
次はtrojanを入れる。

2019/12/25 更新
VPSにいつの間にかnginxが入っていたので、ついでに証明書を当てた。
Certbot実行タイプは sudo certbot --nginx
指示に従って操作。
終わったらブラウザでアクセスして、確かに HTTPS になった。アドレスバーの鍵を見ると Let’s Encrypt の証明書でOK。

2019/12/26 更新
証明書だけ欲しいなら sudo certbot certonly --standalone でもいけそう

trojanのインストールと設定

公式インストールガイド に各OSのインストール方法がある。
快速インストールスクリプトが2つ:

Terminal window
sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"
sudo bash -c "$(wget -O- https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"

どちらでも良い。出力はこんな感じ:

Terminal window
Installing trojan 1.13.0 to /usr/local/bin/trojan...
Installing trojan server config to /usr/local/etc/trojan/config.json...
Installing trojan systemd service to /etc/systemd/system/trojan.service...
Reloading systemd daemon...
Deleting temp directory /tmp/tmp.eqeWyvKmjN...
Done!

config.json はここ:/usr/local/etc/trojan/config.json
nano /usr/local/etc/trojan/config.json で開く。大体こんな内容:

{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
"password1",
"password2"
],
"log_level": 1,
"ssl": {
"cert": "/path/to/certificate.crt",
"key": "/path/to/private.key",
"key_password": "",
"cipher": "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256",
"prefer_server_cipher": true,
"alpn": [
"http/1.1"
],
"reuse_session": true,
"session_ticket": false,
"session_timeout": 600,
"plain_http_response": "",
"curves": "",
"dhparam": ""
},
"tcp": {
"prefer_ipv4": false,
"no_delay": true,
"keep_alive": true,
"fast_open": false,
"fast_open_qlen": 20
},
"mysql": {
"enabled": false,
"server_addr": "127.0.0.1",
"server_port": 3306,
"database": "trojan",
"username": "trojan",
"password": ""
}
}

変更:

  • 5行目:127.0.0.1 をドメインに変える。例:"remote_addr": "996.icu",
  • 7行目:password を設定。自分は1つだけなので8行目を消して password2 を置き換えた
  • 13,14行目:証明書とkeyを先ほどのパスにする

変更したら trojan コマンドで設定ファイルのエラー確認。あれば修正。

systemctl start trojan で起動。

よく使うコマンド:

Terminal window
systemctl start trojan
systemctl restart trojan
systemctl stop trojan
systemctl status trojan
systemctl enable trojan

やっとデプロイ完了。

使い方

プロジェクトの releases から、OSに合うパッケージを落として、config.jsonremote_addrpassword をサーバーに合わせて変更する。
.exe をダブルクリックすれば動く。

完結撒花。


(2日使ってみたが、trojanv2ray に比べて速度が劇的に上がるわけではなかった(少なくとも自分の環境では


2019/12/25 更新

VPSをrebootしたら、v2rayもtrojanも炸裂した…

v2rayは設定ファイルを最小限にして生き返った。

trojanは2時間ほど適当にいじったが救えなかった。
macOS: [FATAL] fatal: config.json: cannot open file./trojan config.json も効かない。

Terminal window
./trojan config.json
Welcome to trojan 1.13.0
[2019-12-25 00:06:21] [FATAL] fatal: config.json: cannot open file
[2019-12-25 00:06:21] [FATAL] exiting. . .

権限は755だが、何が問題だろう?

(trojna一周体验卡
(搬瓦工の Snapshots って、reboot一回で2つのサービスが死ぬの何?謎

半日後の更新
さらに数時間いじったが、別VPSでも失敗した。Certbot のところで詰まった。
上で成功した一回は純粋に運が良かっただけっぽい。
放置して、またいつかtrojanを研究する。


2019/12/26 更新

もう一度試した。

  • config.json777 にして trojan 実行:
Terminal window
Welcome to trojan 1.13.0
[2019-12-26 09:38:29] [FATAL] fatal: bind: Address already in use
[2019-12-26 09:38:29] [FATAL] exiting. . .
  • nginx を止めて再実行:
Terminal window
Welcome to trojan 1.13.0
[2019-12-26 09:40:02] [FATAL] fatal: use_private_key_file: key values mismatch
[2019-12-26 09:40:02] [FATAL] exiting. . .
  • ネットで調べてもよく分からないので、config.json の証明書を fullchain.pem から cert.pem に変えてみたら、動いた…

  • nginxtrojan が衝突するので、nginx を使わないことにした(じゃあ前はどうやって共存してたの?分からない

  • 証明書を cert.pem から fullchain.pem に戻しても、trojan は動いた

  • config.json755 に戻しても動く

  • (じゃあ最初の cannot open filekey values mismatch は何だったの

そんな感じで、使えるようになった。

搬瓦工の Snapshots ほんとメンタルにくる