最近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 recordでA Typeを追加。
Nameはドメイン、ContentはVPSのIP。
Proxy statusの雲は必ずグレーのDNS onlyにする(オレンジだとtrojanが動かない

これでDNS設定完了。
証明書発行
ここまでで接続はできるが HTTP のまま。VPSで証明書を作って HTTPS にする必要がある。
ここでは Let’s Encrypt の証明書を使う。オープンで無料で、自分で署名できる。
使うツールは Certbot。この辺は完全に分からないので、Trojan搭建教程 - Scaleya と Certbot instructions - Let’s Encrypt を丸ごと真似した。
- Certbotのリポジトリ追加
sudo apt-get updatesudo apt-get install software-properties-commonsudo add-apt-repository universesudo add-apt-repository ppa:certbot/certbotsudo apt-get update- インストール
sudo apt-get install certbot- Certbotの実行タイプ?(どのサービスに証明書を当てるかを聞かれる。5択のうち見たことあるのはnginxだけだったので、教程通りnginxを選んだ。動いたからヨシ
sudo certbot certonly --nginx証明書だけ発行を選ぶ。
このコマンドの後、メール、利用規約、ニュース購読、どのドメインに証明書を当てるかを聞かれるので答える。
certbotが「素晴らしい、証明書はできた」と言う。
出力をよく見るとpemファイルが2つある:証明書とkey。
/etc/letsencrypt/live/domain/fullchain.pem/etc/letsencrypt/live/domain/privkey.pemkeyは秘密鍵なので他人に見せない。
この2つのパスは後で使うので控える。
- Certbot instructions - Let’s Encrypt の教程は、証明書の自動更新が正常かテストしろとも言う(証明書は期限がある):
sudo certbot renew --dry-run出力に問題がなければOK。
- Certbot instructions - Let’s Encrypt の教程は
真长最後に「証明書の効果を確認しよう」と言う。
SSL Labs にドメインを入れてテストして、all greenなら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つ:
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)"どちらでも良い。出力はこんな感じ:
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 で起動。
よく使うコマンド:
systemctl start trojansystemctl restart trojansystemctl stop trojansystemctl status trojansystemctl enable trojanやっとデプロイ完了。
使い方
プロジェクトの releases から、OSに合うパッケージを落として、config.json の remote_addr と password をサーバーに合わせて変更する。
.exe をダブルクリックすれば動く。
完結撒花。
(2日使ってみたが、trojan は v2ray に比べて速度が劇的に上がるわけではなかった(少なくとも自分の環境では
2019/12/25 更新
VPSをrebootしたら、v2rayもtrojanも炸裂した…
v2rayは設定ファイルを最小限にして生き返った。
trojanは2時間ほど適当にいじったが救えなかった。
macOS: [FATAL] fatal: config.json: cannot open file の ./trojan config.json も効かない。
./trojan config.jsonWelcome 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.jsonを777にしてtrojan実行:
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を止めて再実行:
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に変えてみたら、動いた… -
nginxとtrojanが衝突するので、nginxを使わないことにした(じゃあ前はどうやって共存してたの?分からない -
証明書を
cert.pemからfullchain.pemに戻しても、trojanは動いた -
config.jsonを755に戻しても動く -
(じゃあ最初の
cannot open fileとkey values mismatchは何だったの
そんな感じで、使えるようになった。
搬瓦工の
Snapshotsほんとメンタルにくる