このガイドでは、ソースから WebTunnel ブリッジをコンパイルして、検閲下のユーザーが Tor ネットワークに接続できるようにする方法について説明します。

0. ドメインとウェブサーバーの設定

以下の手順に進む前に、まずドメインとウェブサーバーを設定する必要があります。 ウェブサーバーを設定する方法については、WebTunnel ガイドの前半を確認してください。

1. Golang のインストール

WebTunnel のサーバーのバイナリーをビルドするには、Golang のインストールが必要です。 Debian で Go は以下を実行するとインストールできます。

$ sudo apt install golang

2. クローンとコンパイル

WebTunnel の Git リポジトリをクローンします。

$ git clone https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/webtunnel

次に WebTunnel のサーバーのバイナリーをコンパイルします。

$ cd webtunnel/main/server
$ go build

最後に、バイナリーを別の場所にコピーします。

$ sudo cp server /usr/local/bin/webtunnel

3. Tor のインストール

On a Debian-like system, install Tor from the Tor Debian repository.

$ sudo apt install apt-transport-https lsb-release

次に以下のコマンドを実行して、Tor Debian のリポジトリを有効にします。

$ CODENAME=$(lsb_release -cs)

$ cat <<EOF > /etc/apt/sources.list.d/tor.list
   deb     [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org $CODENAME main
   deb-src [signed-by=/usr/share/keyrings/tor-archive-keyring.gpg] https://deb.torproject.org/torproject.org $CODENAME main
EOF

Tor Project のキーリングをインポートします。

$ wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --dearmor | sudo tee /usr/share/keyrings/tor-archive-keyring.gpg >/dev/null

最後に、パッケージリストを更新し、Tor をインストールします。

$ sudo apt update && sudo apt install tor deb.torproject.org-keyring -y

4. torrc の編集

Tor 構成ファイル (通常は /etc/tor/torrc ) を編集し、内容を以下のように置き換えます。

  • url=https://yourdomain/path に、ドメインとシークレットパスを含む WebTunnel の URL を設定します。
  • <address@email.com> with your contact email address;
  • Nickname WebTunnetTest に、ブリッジの Nickname を設定します。
BridgeRelay 1
ORPort 127.0.0.1:auto
AssumeReachable 1
ServerTransportPlugin webtunnel exec /usr/local/bin/webtunnel
ServerTransportListenAddr webtunnel 127.0.0.1:15000
ServerTransportOptions webtunnel url=https://yourdomain/path
ExtORPort auto
ContactInfo <address@email.com>
Nickname WebTunnelTest
SocksPort 0

5. Tor を再起動

Tor を有効にして開始します。

$ sudo systemctl enable --now tor.service

または、すでに起動している場合は再起動し、設定を有効にします。

$ sudo systemctl restart tor.service

6. AppArmor の tor の権限を編集して再読み込み

Tor が WebTunnel のバイナリーを実行できるようにするには、/etc/apparmor.d/system_tor にある system_tor のプロファイルを編集し、Tor が WebTunnel を実行できるようエントリーを追加します。

  # During startup, tor (as root) tries to open various things such as
  # directories via check_private_dir().  Let it.
  /usr/local/bin/webtunnel ix,

AppArmor のプロファイルを再読み込みします。

$ sudo apparmor_parser -r /etc/apparmor.d/system_tor

プロファイルを変更して再度読み込んだら、tor のプロセスが AppArmor により拒否されず /usr/local/bin/webtunnel を実行できるかどうかテストします。 システムログ (dmesg/var/log/syslog など) を確認して、エラーが再発しないことをご確認ください。

7. ログの確認

ブリッジが正常に稼働している場合、以下のような記述があるはずです (通常は /var/log/syslog にありますが、sudo journalctl -e -u tor@default を実行しても確認できます) 。

[notice] Your Tor server's identity key fingerprint is '<NICKNAME> <FINGERPRINT>'
[notice] Your Tor bridge's hashed identity key fingerprint is '<NICKNAME> <HASHED FINGERPRINT>'
[notice] Tor has successfully opened a circuit. Looks like client functionality is working.
[notice] Bootstrapped 100%: Done

WebTunnel のブリッジの使用状況はリレー検索で確認できます。 ブリッジの <HASHED FINGERPRINT> をフォームに入力して「検索」をクリックしてください。 ブリッジを設定した後、リレー検索で表示されるまでおよそ3時間かかります。

8. 備考

あなたの WebTunnel ブリッジは、デフォルトで自動的にブリッジウェブサイト (HTTPS ディストリビューターとも) で配布されます。 このデフォルトは、オペレーターが torrc ファイルの BridgeDistribution 設定を別のオプションに明示的に構成しない限り適用されます。 HTTPS 以外のオプションを設定した場合、ブリッジはユーザーに配布されません。 ブリッジの設定に問題がある場合は、ヘルプセクションをご覧ください。

ブリッジが動作している場合、ブリッジラインをコピーして Tor Browser に貼り付けてテストできます。 WebTunnel ブリッジラインをビルドするには、ブリッジの FINGERPRINT をコピーする必要がありますが、これは Tor リレー検索サイトで表示されるハッシュ化されたフィンガープリントとは異なるので、それらを混同しないようご注意ください。 ブリッジのフィンガープリントの代わりにハッシュ化されたフィンガープリントをコピーすると、接続できなくなります。 ブリッジのフィンガープリントは /var/lib/tor/fingerprint のファイルにあります。 フィンガープリントだけをコピーしてください。ブリッジの Nickname は含めないでください。

最後に、URL をあなたのドメインとシークレットパスに置き換えることができます。 これは torrc の ServerTransportOptions の下の行にあります。

その後、以下の内容を置き換えて WebTunnel ブリッジラインを作成します。10.0.0.2:443 は実際には使用されないランダムな IP アドレスです。Pluggable Transport の仕様で IP アドレスが必要なため、そうなっているだけです。

webtunnel 10.0.0.2:443 FINGERPRINT url=https://yourdomain/path