リレーオペレーター

Tor は動的IPアドレスを持つリレーをうまく扱うことができます。 torrc の"Address"行を空欄にしていただければ、Tor が推測します。

Tor リレーをアップグレードする場合、または別のコンピューターに移動する場合は、必ず同じ ID キー (DataDirectory の keys/ed25519_master_id_secret_key および keys/secret_id_key に格納されている) を保持してください。

ブリッジオペレーターの場合は、pt_state/も必ず保持してください。ブリッジが同じブリッジラインで動作し続けるために必要なデータが含まれています。

分かりやすくするために、DataDirectory 全体をコピーするだけでも機能します。

問題が発生した場合にリレーを復元できるように、これらの ID キーとブリッジの pt_state のバックアップを保持することをお勧めします。

いいえ。 法執行機関があなたの出口リレーからのトラフィックに興味を持った場合、警官があなたのコンピューターを押収する可能性があります。 以上の理由から、自宅で出口リレーを実行したり、自宅のインターネット回線を使用することは避けるべきです。

代わりに、Tor をサポートする商業施設で出口リレーを実行することをご検討ください。 出口リレー用に別のIPアドレスを用意し、あなたのトラフィックをルーティングしないでください。 もちろん、出口リレーをホストするコンピューターに機密情報や個人情報を保存することは避けてください。

リレーの負荷が変化する理由

Tor は、ネットワーク全体の帯域幅を管理します。これはほとんどのリレーで適切に機能します。 しかし、Tor の目標は BitTorrent のようなプロトコルとは異なります。 Tor は、ヘッドルームを備えた高速接続を必要とする、低遅延のウェブページを求めています。 BitTorrentは、すべての帯域幅を使用する必要がある一括ダウンロードが必要です。

私たちは新しい帯域幅スキャナを開発しています。 測定されていないリレーや、測定値が低いリレーの診断機能も備えています。

なぜ Tor に帯域幅スキャナが必要なのですか?

ほとんどのプロバイダーは、ローカル接続の最大速度を表示します。 しかし、Tor には世界中にユーザーがいて、ユーザーはランダムに1つか2つのガードリレーに接続します。 そのため、各リレーがどれだけうまく全世界に接続できるかを知る必要があります。

そのため、すべてのリレーオペレーターが宣伝している帯域幅をローカル接続速度に設定したとしても、インターネットの異なる部分間で負荷を分散させるために帯域幅権限が必要になります。

通常のリレー負荷とは何ですか?

ほとんどのリレーは通常、容量の30%から80%の負荷がかかります。 これはクライアントにとって良いことです。過負荷のリレーは遅延が大きくなります。 (各リレーに10%の負荷がかかるように十分なリレーが必要です。そうすれば、Tor は一般的なインターネットとほぼ同じ速度になります)。

リレーの速度が遅いのは、プロセッサの速度が遅いか、接続が制限されているためです。 リレーが他のほとんどの Tor リレーと正しくピアリングしていないか、距離が遠く離れていることでネットワークが遅い場合もあります。

リレーを制限している原因の特定

リレーを遅くする原因は多数あります。ここでは、それらを突き止める方法をご紹介します。

システムの制限

  • リレーのRAM、CPU、およびソケット/ファイル記述子の使用状況をご確認ください。

Tor は起動時にこれらのログの一部を記録します。その他は、topまたは同様のツールを使用して表示できます。

プロバイダーの制限

  • リレーのプロバイダーから他のリレーへのインターネットピアリング (帯域幅、遅延) を確認します。 Comcast(米国のISP)経由の中継は、たまに時間がかかることがあります。 北米や西ヨーロッパ以外でのリレーは、通常さらに遅いです。

Tor ネットワークの制限

リレー帯域幅は、リレー自身の観測帯域幅、またはディレクトリー管理機関の測定帯域幅によって制限できます。 リレーを制限している測定値を調べる方法は以下の通りです。

  • コンセンサス状態 でリレーの各投票や中央値を確認します。 リレーが一部のディレクトリー管理機関で実行中とマークされていない場合:
    • IPv4 または IPv6 アドレスをお間違いではありませんか?
    • その IPv4 または IPv6 アドレスは、いくつかのネットワークから接続不可能ですか?
    • IPv4 アドレスに2つ以上のリレーがありますか?

それ以外の場合は、リレーの観測帯域幅と帯域幅レート(制限)を確認します。 メトリクスでリレーを検索します。 次に、帯域幅の見出しにマウスを合わせると、観測された帯域幅とリレー帯域幅レートが表示されます。

以下はその詳細と例の コンセンサスウェイトの低下出口リレーの上昇速度です。

修正方法

これらの数値の最小値は、リレーに割り当てられる帯域幅を制限します。

  • 帯域幅レートが原因の場合は、torrcのBandwidthRate/BurstまたはRelayBandwidthRate/Burstを増やしてください。
  • 観測された帯域幅であれば、リレーは自分自身が速くなっていることを確認するまで、それ以上の帯域幅を要求しません。 遅い原因を突き止める必要があります。
  • 測定された帯域幅の中央値であれば、大半の帯域幅機関からはリレーが低速に見えます。 計測が遅い理由を突き止める必要があります。

独自のリレー測定を行う

リレーが遅いと判断した場合、または帯域幅局が遅いと判断した場合は、自分で帯域幅をテストできます。

  • Tor を使用してテストを実行し、Tor がネットワーク上でどの程度高速になるかを確認します。

    このためには、リレーをエントリーとして使用するように Tor クライアントを設定する必要があります。 リレーにGuardフラグしかない場合は、torrcEntryNodesにリレーフィンガープリントを設定してください。 リレーにGuardフラグがないか、GuardフラグとExitフラグがある場合、リレーを入口ノードとして設定することはできません(参照: https://gitlab.torproject.org/tpo/core/tor/-/issues/22204)が、ブリッジでなくてもブリッジとして設定することはできます。 リレーをブリッジとして設定するには、torrc に以下の内容を追加してください。

    Bridge <ip>:<port>
    UseBridge 1
    

    次にsocksプロキシとしてSocksPortを使用して、大きなファイルをダウンロードします。 これには、例えば curlをご利用いただけます。

    curl https://target/path --proxy socks5h://<user>:<password>@127.0.0.1:<socks-port>
    

    異なるuser/passwordを使用すると、異なる回線が保証されます。また$RANDOMをご利用いただけます。

    そうすれば、あなたのリレーがどれだけのトラフィックを維持できるか、ある程度の見当がつきます。

    あるいは、sbws と同じように、relay_bw を実行して、2ホップの回線を使ってリレーをテストすることもできます。

  • Tor とchutneyを使ってテストを行い、Tor があなたのCPUでどれくらいの速度が出るかを調べます。 帯域幅の増加が止まるまで、データ量を増やし続けます。

確かに、一部の攻撃に対しては匿名性が向上します。

最も単純な例は、少数の Tor リレーを所有する攻撃者です。 ユーザーからの接続は表示されますが、その接続がユーザーのコンピューターから発信されたものか、他のユーザーから中継されたものかは分かりません。

これが役に立たないと思われる場合もあります。攻撃者がすべての送受信トラフィックを監視できる場合、どの接続が中継され、どの接続が開始されたかを容易に知ることができます。 (この場合でも、相手が見ていない限り、相手はあなたの目的地を知りませんが、あなたが普通のクライアントである場合と変わりません。)

Tor リレーの実行にはいくつかの欠点もあります。 第一に、リレーは数百しかありませんが、リレーを実行しているという事実は匿名性を高く評価していることを攻撃者に示す可能性があります。 第二に、リレーを実行しているという知識を利用した、十分に理解されていない、または十分にテストされていない、より難解な攻撃があります。例えば攻撃者は、実際にネットワークを監視できなくても、Tor リレーを介してトラフィックをリレーし、トラフィックのタイミングの変化に気付くことで、トラフィックが送信されているかどうかを 「監視」 できる可能性があります。

メリットがリスクを上回るかどうかは、未解決の研究課題です。 その多くは、あなたが最も心配している攻撃に依存しています。 ほとんどのユーザーにとって、これは賢い選択だと思われます。

出口接続を許可すると、リレーから接続した一部のサービスが接続を戻して、ユーザーに関する詳細情報を収集します。例えば、IRC サーバーの中には、どのユーザが接続したかを記録するために identd ポートに接続するものがあります。(Tor はこの情報を知らないので実際には機能しませんが、彼らはとにかく試します。)また、あなたから出て行くユーザーは、中継しているホストについてもっと知りたい IRC サーバーやウェブサイトなどの他のユーザーの注意を引くかもしれません。

もう1つの理由は、インターネット上のオープンプロキシをスキャンするグループが、Tor リレーがsocksポートを世界に公開することがあることを知ったことです。socksport はローカルネットワークにのみバインドすることを推奨します。

いずれにしても、セキュリティを最新の状態に保つ必要があります。詳細については、Tor リレーのセキュリティの記事をご覧ください。

特に Debian または Ubuntu をご利用の場合は、Tor Project のリポジトリをお使いください。これにより、簡単にアップデートを受け取ることができます。 さらにこのパッケージを使用すると、他にも便利な点があります。

  • ulimit -nは高い値に設定されるので、Tor は必要なすべての接続を開いたままにしておくことができます。
  • パッケージは別のユーザーを作成して使用するため、独自のユーザーとして Tor を実行する必要はありません。
  • パッケージにはinitスクリプトが含まれているため、起動時に Tor が実行されます。
  • Tor は低い番号のポートにバインドし、その後特権を落とすことができます。

私たちはそれなりに安定したインターネット接続が可能で、少なくとも片道 10 Mbit/秒 (Mbps) の帯域幅がある方を求めています。もしそうであれば、Tor リレーの実行をご検討ください。

少なくとも 10 Mbit/秒の利用可能な帯域幅がない場合でも、Tor ブリッジと obfs4 サポートを実行することで、Tor ネットワークを支援することができます。その場合、少なくとも 1 MBit/秒の帯域幅が必要です。

簡単に言うと、以下のように機能します。

  • 「ed25519_master_id_secret_key」という名前のプライマリ ed25519 ID 秘密鍵ファイルがあります。 これは最も重要なので、バックアップを安全な場所に保管してください。ファイルは機密性が高く、保護する必要があります。 Tor はあなたがそれを手動で生成し、求められた際にパスワードを入力すれば、それを暗号化することができます。
  • Tor で使用するために、「ed25519_signing_secret_key」という名前の中期署名鍵が生成されます。 また、「ed25519_signing_cert」という名前の証明書が生成されます。これは、プライマリID秘密鍵によって署名され、中期署名鍵が一定期間有効であることを確認します。 デフォルトの有効期限は30日ですが、torrcで 「SigningKeyLifetime N days|weeks|months 」を設定することでカスタマイズできます。
  • 「ed25519_master_id_public_key」という名前のプライマリ公開鍵もあります。これは、ネットワークで示されるリレーの実際のIDです。 これは機密情報ではなく、「ed5519_master_id_secret_key」から簡単に計算できます。

Tor は、中期署名鍵と証明書が有効である間だけアクセスすればよいので、プライマリID秘密鍵は DataDirectory/keys の外、ストレージメディアや別のコンピューターに保管することができます。 中期の署名鍵と証明書は、有効期限が切れる前に手動で更新する必要があります。そうしないと、リレー上のTorプロセスは有効期限が切れると終了します。

この機能はオプションであり、必要でない限り使用する必要はありません。 中期的な署名鍵の更新を定期的に手動で行わずに、リレーを長期間無人で実行する場合は、プライマリIDの秘密鍵を DataDirectory/keys に残しておき、再インストールする必要がある場合に備えてバックアップを作成することをお勧めします。 この機能をご利用の際は、このトピックに関する詳細ガイド をご覧ください。

リレーが比較的新しいのであれば、時間をかけてみてください。 Tor は、Bandwidth Authorities からのレポートに基づいて、帯域幅機関に使用するリレーを決定します。これらの機関はリレーの容量を測定し、時間の経過とともに、最適な負荷に達するまで、より多くのトラフィックをそこに転送します。 新しいリレーのライフサイクルにつきましては、このブログ記事をご覧ください。 しばらくの間リレーを実行していてまだ問題がある場合は、Tor リレーリストでご質問ください。

次のチュートリアルに沿って、Windows でリレーを実行できます。

24時間365日実行できる場合にのみ、Windows リレーを実行してください。 もしそれを保証するのが困難な場合、Snowflake が Tor ネットワークにあなたのリソースを提供するより良い方法です。

  • 出口リレーは最も必要とされるリレーの種類ですが、法的リスクが最も高くなります(決して自宅から出口リレーを実行しないでください)。
  • 最小限の労力でリレーを実行したい場合は、高速なガードリレーも非常に有効です。
  • 続いてブリッジも重要です。

各リレーが他のすべてのリレーと通信できるように、すべての発信接続を許可する必要があります。

多くの司法管轄区において、Tor リレーオペレーターはインターネットサービスプロバイダーがネットワークを通過する第三者のコンテンツに対して責任を問われることを防ぐのと同じ電気通信事業法によって法的に保護されています。 一部のトラフィックをフィルタリングする出口リレーは、これらの保護を失う可能性があります。

Tor は干渉のない自由なネットワークアクセスを促進します。 出口リレーは、通過するインターネットへのトラフィックを決してフィルタリングしないでください。 トラフィックをフィルタリングしている出口リレーは、検出されると BadExit フラグを立てられます。

ガードになったことでクライアントが他のポジションで使うことは少なくなりましたが、既存のガードをローテーションさせてガードとして使っているクライアントはまだ多くありません。 詳細につきましては、こちらのブログ記事またはガードの変更: Tor におけるエントリーガード選択の理解と改善のための枠組みをご覧ください。

AccountingMax および BandwidthRate で割り当てられたパラメーターは、Tor プロセスのクライアント機能とリレー機能の両方に適用されます。 したがって、Tor が休止状態になるとすぐに閲覧できなくなる可能性があります。これは、ログの以下のエントリーによって示されます。

Bandwidth soft limit reached; commencing hibernation.
No new connections will be accepted

解決策は、2つの Tor プロセスを実行することです。1つはリレー、もう1つはクライアントで、それぞれ独自の設定を行います。 これを行う1つの方法(動作中のリレー設定から開始する場合)は、以下の通りです。

  • リレー Tor torrcファイルでSocksPortを0に設定するだけです。
  • torrc.sample から新しいクライアントtorrcファイルを作成し、リレーとは異なるログファイルを使用するようにします。 torrc.client と torrc.relay という命名規則もあります。
  • Tor クライアントとリレーの起動スクリプトを変更して、-f/path/to/correct/torrcを含むよう修正します。
  • Linux/BSD/Mac OS Xでは、起動スクリプトをTor.clientTor.relayに変更すると、設定の分離が容易になる場合があります。

ありがとうございます。もしネットワークにより多くの寄付をするために複数のリレーを実行したいのであれば、私たちはそれで満足です。 ただし、Tor ネットワークの目標は分散性と多様性なので、同一ネットワーク上で数十台以上を運用することはご遠慮ください。

複数のリレーを運用する場合は、各リレーのtorrcに 「MyFamily」構成オプションを設定し、管理下にあるすべてのリレーを(カンマ区切りで)リストアップしてください。

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

ここで各フィンガープリントは、40文字のIDフィンガープリント(スペースなし)です。

そうすれば、Torクライアントは1つの回線で2つ以上のリレーを使用しないようにすることができます。 コンピューターまたはそのネットワークを管理している場合は、仮にすべてが同じ所在地にない場合でも、MyFamily を設定する必要があります。

Note: If you're running Tor 0.4.9.1-alpha or later, you should also configure a Family key: see these instructions for more inforamation.

出口が誤って設定されていたり、悪意がある場合、BadExit フラグが割り当てられます。これにより、Tor はそのリレーを経由しないようになります。事実上、このフラグを持つリレーは出口ではなくなります。 このフラグが表示された場合は、あなたの出口を経由してトラフィックをルーティングする際に問題または不審なアクティビティを発見し、あなたに連絡できなかった可能性があります。問題を解決するため、チームまでご連絡ください。

Tor リレーが必要以上にメモリを使用している場合は、以下の方法でメモリ使用量を減らすことができます。

  • Linuxをお使いの場合、glibcのmalloc実装でメモリの断片化バグに遭遇しているのかもしれません。 つまり、Tor がメモリをシステムに解放するとき、メモリの断片は再利用しにくいように断片化されます。 Tor tarballにはOpenBSDのmalloc実装が含まれており、フラグメンテーションのバグはそれほど多くありません(ただし、その代償としてCPU負荷が高くなります)。 代わりにこの malloc 実装を使うよう Tor に指示できます。./configure --enable-openbsd-malloc
  • 高速リレーを実行している場合、つまり多くのTLS接続を開いている場合は、OpenSSLの内部バッファ(ソケットあたり38KB以上)に大量のメモリが失われている可能性があります。 未使用のバッファメモリをより積極的に解放するようにOpenSSLにパッチを当てました。 OpenSSL 1.0.0以降に更新すると、Tor のビルドプロセスが自動的にこの機能を認識して使用します。
  • それでもメモリ負荷を処理できない場合は、リレーが宣伝する帯域幅の量を減らすことをご検討ください。 宣伝する帯域幅が少ないということは、引き付けるユーザーを減らせることを意味するので、リレーはそれほど大きくならないはずです。 マニュアルページのMaxAdvertisedBandwidthオプションをご覧ください。

とはいえ、高速な Tor リレーは多くの RAM を使用します。高速な出口リレーが 500~1000 MB のメモリを使用することは珍しくありません。

In Tor, when multiple relays have the same operator(s), they should declare that they are members of a "family".

In Tor's current design, to set up relays as members of a family, every relay needs to list every other member of the family in its configuration, and publish that list to clients as well. These lists can be unpleasant to maintain, and expensive to download.

The Happy Families design is a new feature in Tor 0.4.9.1-alpha that will (eventually) provide a simpler way to configure relay families, and will also save a lot of traffic when clients are fetching network directory information.

(Unfortunately, moving to happy families will create additional work while the transition is going on. We think that it will be worth it in the long run.)

You should read this if you are a relay operator who needs to configure a family on the Tor network.

The basic idea

In the Happy Families design, every relay family is identified by a secret family signing key shared by all family members. The family members use this key to sign certificates proving that they belong to the family.

So what you'll need to do is:

  1. Generate a single key for your family.
  2. Copy that key to every relay.
  3. Configure your relays to use that key.

In more detail

Generating the family key

First, you will need to wait until all of your relays are running 0.4.9.1-alpha or later.

Then, to generate a family key, run:

tor --keygen-family MyKey

This will create a file called MyKey.secret_family_key; it will also write something like this result to standard output:

# Generated MyKey.secret_family_key
FamilyId wweKJrJxUDs1EdtFFHCDtvVgTKftOC/crUl1mYJv830

Save that FamilyID line; you're going to need it! (Don't use the one from this example—that isn't your family ID.)

Configuring your relay

Copy the MyKey.secret_family_key file (or whatever you called it) into the KeyDir of every one of your relay. (By default, this is the keys subdirectory of your DataDir.) The file name needs to end with .secret_family_key.

Then, add the FamilyId line to your torrc.

If your relay is running, you'll have to tell it to reload its configuration (typically with a SIGHUP.)

Did it work?

If you did this right, you should see a family-cert entry in your relay's descriptor, looking something like this:

family-cert
-----BEGIN FAMILY CERT-----
AQwAB2K5AXJrxBpgTXDIvHKFShmCCD2yLnDaBf2lWaInBhR2R56HAQAgBAAjv69J
jy+7BSRh1GnGF7Zxm+AMXvJYWkUCWY+5KU8Bymkz5N4D/QNs4K6bOjLokAwD4raT
J34t8b7uxHXuFS2F2VN5Ygr3//vGsB00jideQ5Cj9aX+BLSZ2FjC6GK2XAo=
-----END FAMILY CERT-----

Once enough of the directory authorities are running 0.4.9.1-alpha or later, they'll include a corresponding entry in your relays' microdescriptors, which will look something like:

family-ids ed25519:wweKJrJxUDs1EdtFFHCDtvVgTKftOC/crUl1mYJv830

NOTE: You still need to configure MyFamily!

Unfortunately, you will still need to configure the MyFamily option as you did before: until clients all support Happy Families, they will need to look at the legacy family lists.

We're going to try to keep this transitional period as short as is reasonable.

We'll announce once it is no longer necessary to include MyFamily.

Additional info: How to transition family keys

If one of your relays is compromised, or if you accidentally leak a family key, you'll need to change the key. (If you don't, an adversary's relay could falsely claim to be a member of your family.)

To do this, we recommend a step-wise process.

  1. Generate a new family key as above. Give it a different filename from the old key.
  2. Copy the new family key to every one of your relays, without replacing the old family key.
  3. Add the new FamilyID line to all of your relays' configurations, without removing the old one. At this point, your relays will all be members of two families.
  4. Wait for a few days, to give the new family information time to propagate.
  5. Remove the old FamilyID lines from your relays' configurations. Optionally, remove the old family keys as well.

Additional info: Expected savings from this transition

We plan to remove MyFamily and legacy TAP onion keys at the same time. When we do, we estimate that the resulting network's microdescriptors will be something around 10% of their current size.

(This might not be a permanent savings, unfortunately: when we transition to postquantum cryptography, we might have to make microdescriptors bigger again. But at least this change will free the room to do so.)

torrc ファイルのアカウンティングオプションを使用すると、リレーが一定期間に使用する最大バイト数を指定いただけます。

    AccountingStart day week month [day] HH:MM

アカウンティングをリセットするタイミングを指定します。例えば、1週間のバイト数の合計 (毎週水曜日の午前10時にリセットされる)を設定するには、以下のようにします。

    AccountingStart week 3 10:00
    AccountingMax 500 GBytes

これは、アカウンティング期間中にリレーが送信するデータの最大量と、アカウンティング期間中にリレーが受信するデータの最大量を指定します。 アカウンティング期間が(AccountingStartから)リセットされると、AccountingMax のカウンタは0にリセットされます。

例: 毎日各方向に50 GBのトラフィックを許可し、アカウンティングを毎日正午にリセットするとします。

    AccountingStart day 12:00
    AccountingMax 50 GBytes

リレーは各アカウンティング期間の開始時に正確に起動するわけではないことにご注意ください。 最後の期間にどれだけ早く割り当てを消費したか記録し、新しい間隔でランダムなポイントを選択して起動します。 こうすることで、月の初めには何百ものリレーが動作しているのに、月末には一つも動作していないという事態を避けています。

接続速度に比べて提供する帯域幅が少ない場合は、毎日のアカウンティングを使用することをお勧めします。これにより、最初の日に月間の割り当て全体を使用してしまうことを防げます。 毎月の金額を30で割るだけです。また、より多くの時間にわたって有用性を広げるために、レート制限を検討することもできます。各方向にX GBを提供する場合は、RelayBandwidthRate を20*X KBytesに設定できます。 例えば、片道50 GBを提供する場合は、RelayBandwidthRate を1000 KBytesに設定します。このようにすると、リレーは少なくとも1日の半分は常に有効です。

    AccountingStart day 0:00
    AccountingMax 50 GBytes
    RelayBandwidthRate 1000 KBytes
    RelayBandwidthBurst 5000 KBytes # allow higher bursts but maintain average

デフォルトのオープンポートを次に示しますが、torrcで設定するかソースコードを変更することで、リレーオペレーターが任意のポートをオープンできることにご注意ください。 ソースコードリリースrelease-0.4.6のsrc/or/policies.c(85行目1901行目)に従ったデフォルト:

reject 0.0.0.0/8
reject 169.254.0.0/16
reject 127.0.0.0/8
reject 192.168.0.0/16
reject 10.0.0.0/8
reject 172.16.0.0/12

reject *:25
reject *:119
reject *:135-139
reject *:445
reject *:563
reject *:1214
reject *:4661-4666
reject *:6346-6429
reject *:6699
reject *:6881-6999
accept *:*

ほとんどの場合、Tor リレーに1バイト入ることは1バイト出ることを意味し、その逆も同様です。ただし、いくつかの例外があります。

DirPort を開くと、Tor クライアントはディレクトリーのコピーを要求します。 リクエスト(HTTP GET)は非常に小さく、レスポンスは非常に大きくなることがあります。 おそらく、これが「書き込み」バイト数と「読み出し」バイト数の差の大部分を占めているのでしょう。

もう一つの小さな例外は、あなたが出口ノードとして操作し、出口接続(例えば、インスタントメッセージングやSSH接続)から数バイトを読み取り、Tor ネットワークを通して転送するためにそれを512バイトのセル全体にまとめるときに現れます。

NAT/ルータデバイスでポートフォワードする方法につきましては、 portforward.com をご覧ください。

リレーが内部ネット上で動作している場合は、ポート転送を設定する必要があります。 TCP 接続の転送はシステムに依存しますが、 firewalled-clients FAQ のエントリーに転送方法の例があります。

また、iptablesをご利用の場合、GNU/Linuxでこれを行う方法の例を以下に示します。

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 9001 -j ACCEPT

別の外部インターフェース(インターネットに接続されているもの)を使用している場合は、「eth0」を変更する必要があるかもしれません。 おそらく(ループバックを除いて)1つしかないので、理解するのはそれほど難しくないはずです。

リレー検索では、過負荷の場合リレーのニックネームの横にオレンジ色の点を表示します。 これは、次のロードメトリクスの1つ以上がトリガーされたことを意味します。

リレーが過負荷状態になった場合は、リレーが回復してから72時間表示されます。

リレーが過負荷になっていることに気づいたら、以下の手順をご確認ください。

  1. https://status.torproject.org/ の「Tor network」カテゴリーに既知の問題がないかどうかを確認します。

  2. ネットワーク、メモリ、CPUの負荷について、システム用にsysctlをチューニングすることをご検討ください。

  3. 何が起こっているかを理解するために、MetricsPortを有効にすることをご検討ください。

ネットワーク、メモリ、CPUの負荷に対するsysctlのチューニング

TCPポートの枯渇

TCPポートが不足している場合は、ローカルポート範囲を拡張することをご検討ください。 これを行うには

# sysctl -w net.ipv4.ip_local_port_range="15000 64000"

または

# echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range

説明されているようにsysctlを調整することは永続的ではなく、再起動時に失われることにご注意ください。 設定を永続的にするには、/etc/sysctl.confまたは/etc/sysctl.d/のファイルに設定を追加する必要があります。

MetricsPort

Tor リレーと Tor ネットワークの健全性を理解するためには、リレーメトリクスを提供し、アクセスすることが不可欠です。 リレーのオーバーロード情報は、0.4.6+からリレー記述子に追加されましたが、基礎となるリレーメトリックへのインターフェイスであるメトリックポートが利用可能になったのは、Tor>=0.4.7.1-alphaまでではありませんでした。

MetricsPortの有効化

Tor はMetricsPortというtorrcの設定オプションを使って、メトリクスポートにアクセスすることができます。

Tor MetricsPort を公開することは、Tor ネットワークユーザーにとって危険であることを理解することが重要です。そのためこのポートは既定で有効になっておらず、アクセスポリシーによってアクセスを管理する必要があります。 このポートを開くときには特に注意を払ってください。また、デバッグが完了したら閉じてください。

あなたがサーバー上で Tor リレーを実行する唯一のユーザーであると仮定します。 metrics ポートを有効にするには、torrc ファイルに以下の内容を追加します。

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

そして、以下のようにしてメトリクスを簡単に取得できます。

# curl http://127.0.0.1:9035/metrics

デフォルトではPrometheusフォーマットです。

注意:そのサーバー上のすべてのユーザーが、上記の例のリレーメトリクスにアクセスできるようになります。 一般的には、MetricsPortPolicyを使って非常に厳格なアクセスポリシーを設定し、OSのファイアウォール機能を使った多層防御をご検討ください。

MetricsPortMetricsPortPolicyの詳しい説明につきましては、Tor のmanページをご覧ください。

MetricsPortの出力

以下はMetricsPortを有効にすると、どのような出力が得られるかの例です(このインターフェースを安定させる必要があるため、混雑制御関連のメトリックは省略しています)。

# HELP tor_relay_connections Total number of opened connections
# TYPE tor_relay_connections gauge
tor_relay_connections{type="OR listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Exit",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Exit",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Exit",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Exit",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent natd listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent natd listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="DNS listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="DNS listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="DNS listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="DNS listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics",direction="received",state="opened",family="ipv6"} 0
# HELP tor_relay_connections_total Total number of created/rejected connections
# TYPE tor_relay_connections_total counter
tor_relay_connections_total{type="OR listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="rejected",family="ipv6"} 0
# HELP tor_relay_flag Relay flags from consensus
# TYPE tor_relay_flag gauge
tor_relay_flag{type="Fast"} 0
tor_relay_flag{type="Exit"} 0
tor_relay_flag{type="Authority"} 0
tor_relay_flag{type="Stable"} 0
tor_relay_flag{type="HSDir"} 0
tor_relay_flag{type="Running"} 0
tor_relay_flag{type="V2Dir"} 0
tor_relay_flag{type="Sybil"} 0
tor_relay_flag{type="Guard"} 0
# HELP tor_relay_circuits_total Total number of circuits
# TYPE tor_relay_circuits_total gauge
tor_relay_circuits_total{state="opened"} 0
# HELP tor_relay_streams_total Total number of streams
# TYPE tor_relay_streams_total counter
tor_relay_streams_total{type="BEGIN"} 0
tor_relay_streams_total{type="BEGIN_DIR"} 0
tor_relay_streams_total{type="RESOLVE"} 0
# HELP tor_relay_traffic_bytes Traffic related counters
# TYPE tor_relay_traffic_bytes counter
tor_relay_traffic_bytes{direction="read"} 0
tor_relay_traffic_bytes{direction="written"} 0
# HELP tor_relay_dos_total Denial of Service defenses related counters
# TYPE tor_relay_dos_total counter
tor_relay_dos_total{type="circuit_rejected"} 0
tor_relay_dos_total{type="circuit_killed_max_cell"} 0
tor_relay_dos_total{type="circuit_killed_max_cell_outq"} 0
tor_relay_dos_total{type="marked_address"} 0
tor_relay_dos_total{type="marked_address_maxq"} 0
tor_relay_dos_total{type="conn_rejected"} 0
tor_relay_dos_total{type="concurrent_conn_rejected"} 0
tor_relay_dos_total{type="single_hop_refused"} 0
tor_relay_dos_total{type="introduce2_rejected"} 0
# HELP tor_relay_load_onionskins_total Total number of onionskins handled
# TYPE tor_relay_load_onionskins_total counter
tor_relay_load_onionskins_total{type="tap",action="processed"} 0
tor_relay_load_onionskins_total{type="tap",action="dropped"} 0
tor_relay_load_onionskins_total{type="fast",action="processed"} 0
tor_relay_load_onionskins_total{type="fast",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor_v3",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor_v3",action="dropped"} 0
# HELP tor_relay_exit_dns_query_total Total number of DNS queries done by this relay
# TYPE tor_relay_exit_dns_query_total counter
tor_relay_exit_dns_query_total 0
# HELP tor_relay_exit_dns_error_total Total number of DNS errors encountered by this relay
# TYPE tor_relay_exit_dns_error_total counter
tor_relay_exit_dns_error_total{reason="success"} 0
tor_relay_exit_dns_error_total{reason="format"} 0
tor_relay_exit_dns_error_total{reason="serverfailed"} 0
tor_relay_exit_dns_error_total{reason="notexist"} 0
tor_relay_exit_dns_error_total{reason="notimpl"} 0
tor_relay_exit_dns_error_total{reason="refused"} 0
tor_relay_exit_dns_error_total{reason="truncated"} 0
tor_relay_exit_dns_error_total{reason="unknown"} 0
tor_relay_exit_dns_error_total{reason="tor_timeout"} 0
tor_relay_exit_dns_error_total{reason="shutdown"} 0
tor_relay_exit_dns_error_total{reason="cancel"} 0
tor_relay_exit_dns_error_total{reason="nodata"} 0
# HELP tor_relay_load_oom_bytes_total Total number of bytes the OOM has freed by subsystem
# TYPE tor_relay_load_oom_bytes_total counter
tor_relay_load_oom_bytes_total{subsys="cell"} 0
tor_relay_load_oom_bytes_total{subsys="dns"} 0
tor_relay_load_oom_bytes_total{subsys="geoip"} 0
tor_relay_load_oom_bytes_total{subsys="hsdir"} 0
# HELP tor_relay_load_socket_total Total number of sockets
# TYPE tor_relay_load_socket_total gauge
tor_relay_load_socket_total{state="opened"} 0
tor_relay_load_socket_total 0
# HELP tor_relay_load_tcp_exhaustion_total Total number of times we ran out of TCP ports
# TYPE tor_relay_load_tcp_exhaustion_total counter
tor_relay_load_tcp_exhaustion_total 0
# HELP tor_relay_load_global_rate_limit_reached_total Total number of global connection bucket limit reached
# TYPE tor_relay_load_global_rate_limit_reached_total counter
tor_relay_load_global_rate_limit_reached_total{side="read"} 0
tor_relay_load_global_rate_limit_reached_total{side="write"} 0

これらの行の実際の意味を探りましょう。

tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0

リレーが「dropped」と表示され始める場合、通常はCPU/RAMの問題です。

Tor は残念ながら、「オニオンスキン」を処理するときを_除いて_シングルスレッドです。 「オニオンスキン」は、すべての回線で有名な「オニオンレイヤ」で実行する必要がある暗号化作業です。

Tor がレイヤを処理するときには、スレッドプールを使用してすべての作業をそのプールに委託します。 このプールでは、メモリまたはCPUの負荷が原因で作業が中断し始め、過負荷状態が発生する可能性があります。

サーバーがフル稼働している場合、この現象が発生する可能性が高いです。

tor_relay_exit_dns_error_total{...}

「*_dns_error_total」レルム内のカウンタ(正常なクエリーのカウンタを除く)は、DNSに関連する潜在的な問題を示しています。 しかし0.4.7のリリースサイクルの間に、DNSエラーはあまりにもノイズが多く、過負荷レポートの目的にはあまりにも誤検知が多すぎることに気付きました。 そのため、0.4.6.9 と 0.4.7.4-alpha からはこの目的にはもう使用していません。しかしDNSメトリックスは、リレーオペレーターがリレーで何が起こっているかを把握できるようにまだ保持しています。

DNSタイムアウトの問題とエラーは出口ノードにのみ適用されます。

tor_relay_load_oom_bytes_total{...}

メモリ不足の呼び出しは、RAMに問題があることを示しています。 リレーに追加のRAMが必要か、またはメモリリークが発生しています。 もしTorプロセスでメモリリークが発生していることに気づかれましたら、お手数ですがTor gitLabか、tor-relays mailing listにメールを送って問題をご報告ください。

Tor には独自のOOMハンドラがあり、Tor が使用可能と考える合計メモリの75%に達したときに呼び出されます。 したがって、Tor が合計2GBを使用できると考え、1.5GBのメモリ使用量でメモリを解放し始めるとします。 これは過負荷状態と考えられます。

使用可能なメモリの量を推定するために、tor の起動時にMaxMemInQueuesを使用します。設定されていない場合は、システムで使用可能なRAMの合計を参照し、次のアルゴリズムを適用します。

    if RAM >= 8GB {
      memory = RAM * 40%
    } else {
      memory = RAM * 75%
    }
    /* Capped. */
    memory = min(memory, 8GB) -> [8GB on 64bit and 2GB on 32bit)
    /* Minimum value. */
    memory = max(250MB, memory)

過負荷状態を避けるために、64ビットで2GB以上のRAMでリレーを実行することをお勧めします。 4GBをお勧めしますが、もちろん可能であればRAMを追加しても問題ありません。 注意:多くの RAM を搭載した強力なサーバーを実行している場合、未使用の RAM がまだ十分にある場合でも、デフォルトのキューサイズ上限が 8GB であるため過負荷状態になる可能性があります。その場合は、適切な MaxMemInQueues エントリーを torrc 構成に追加してください。

Tor がOSのOOMハンドラ自身から呼び出される可能性があることに気づくかもしれません。 Tor は起動時にシステム上の全メモリを使用するため、システム全体でRAMを使用して他の多くのアプリケーションを実行している場合、メモリを消費しすぎてしまいます。 この場合、OSは Tor がメモリ不足に気づかないうちにOOMする可能性があります。

tor_relay_load_socket_total

開いているソケットの数が使用可能なソケットの合計数に近いか同じ場合は、リレーがソケットを使い果たしていることを示しています。 解決策はtorプロセスのulimit-nを増やすことです。

tor_relay_load_tcp_exhaustion_total

これらの行は、リレーがTCPポートを使い果たしていることを示しています。

上記のようにsysctlを調整してみてください。

tor_relay_load_global_rate_limit_reached_total

このカウンタが短期間に顕著な値だけ増加した場合、リレーは混雑しています。 大規模な Onion Service や、ネットワーク上で進行中の DDoS のガードとして使用されている可能性があります。

リレーがまだ過負荷で理由が不明な場合は、network-report@torproject.org までご連絡ください。 ネットワークレポートOpenPGP鍵 をご利用いただくことでメールを暗号化できます。

それこそが、私たちが出口ポリシーを実施した理由です。

各 Tor リレーは、そのリレーからどのようなアウトバウンド接続を許可するか拒否するかを指定する出口ポリシーを持っています。 出口ポリシーはディレクトリー経由で Tor クライアントに伝えられるので、クライアントは意図した目的の宛先への接続を拒否するような出口リレーを選ぶことを自動的に避けることができます。 これにより、各リレーは、不正使用の可能性と自身の状況に基づいて、接続を許可するサービス、ホスト、およびネットワークを決定できます。 デフォルトの出口ポリシーをご利用の場合は、発生する可能性のある問題についてのサポートエントリー、および Mike Perry の悪用を最小限に抑えて出口ノードを実行するためのヒントをお読みください。

デフォルトの出口ポリシーでは、多くの一般的なサービス(ウェブブラウジングなど)へのアクセスが許可されますが、悪用の可能性(メールなど)や、Tor ネットワークが負荷を処理できない(デフォルトのファイル共有ポートなど)ために制限されるものがあります。 torrc ファイルを編集することで、出口ポリシーを変更できます。 悪用される可能性を完全にとは言わないまでも、ほとんど避けたい場合、「reject *:* 」に設定してください。 この設定は、リレーが Tor ネットワーク内のトラフィックの中継に使用され、外部のウェブサイトやその他のサービスへの接続には使用されないことを意味します。

出口接続を許可する場合は、名前解決が機能している(つまり、コンピューターがインターネットアドレスを正しく解決できる)ことをご確認ください。 コンピューターが接続できないリソース(例えば、制限の厳しいファイアウォールまたはコンテンツフィルタの背後にいる場合)がある場合は、出口ポリシーで明示的に拒否してください。そうでないと、Tor ユーザーにも影響が及びます。

Tor は IPv6 を部分的にサポートしています。そのため、IPv6 接続が可能な場合は、すべてのリレーオペレーターが torrc 設定ファイルで IPv6 機能を有効にすることをお勧めします。 当面の間、Tor はリレーに IPv4 アドレスを必要とするため、IPv6 アドレスのみを持つホストでは Tor リレーを実行できません。

Tor リレーのセットアップを簡単かつ便利にすることを目指しています。

  • リレーが時々オフラインになっても大丈夫です。 ディレクトリーはこれに素早く気づき、リレーの掲載を停止します。 ただし切断時にリレーを使用している接続に問題が発生するため、あまり頻繁に切断することがないようご注意ください。
  • 各 Tor リレーには、そのリレーから許可または拒否される発信接続の種類を指定する出口ポリシーがあります。 自分のリレーからの出口接続を許可することに抵抗がある場合は、他の Tor リレーへの接続のみを許可するように設定することができます。
  • リレーは最近の帯域幅容量を受動的に推定して通知するので、高帯域幅リレーは低帯域幅リレーよりも多くのユーザを引き付けます。したがって、低帯域幅のリレーを使用することも有用です。

BridgeDB は、HTTPS、Moat、メール、Telegram、Settings、Reserved の6つのメカニズム を実装してブリッジを配布します。 ブリッジオペレーターは、 リレー検索 でブリッジが使用しているメカニズムをご確認いただけます。 フォームにブリッジの<HASHED FINGERPRINT>を入力し、「検索」をクリックします。

オペレーターは、ブリッジが使用する配布方法を選択することもできます。 方法を変更するには、torrcファイルのBridgeDistribution設定を https、moat、email、telegram、settings、lox、none、any のいずれかに変更します。 各ディストリビューターの説明につきましては、rdsys ディストリビューター向けドキュメントをご覧ください。

詳細につきましては、ブリッジインストール後 のガイドをご覧ください。

Tor はコンピューターにホスト名を尋ね、そのホスト名を解決することで IP アドレスを推測します。多くの場合、/etc/hosts ファイルに古い IP アドレスを指す古いエントリーがあります。

それでも解決しない場合は、"Address" 設定オプションを使用して選択したい IP アドレスを指定する必要があります。コンピューターが NAT の背後にあり内部 IP アドレスしかない場合は、動的 IP アドレスに関する以下のサポートエントリーをご覧ください。

また、多数のアドレスがある場合は、"OutboundBindAddress"を設定して外部接続が、あなたが世界に提示するIPから来るようにすることもできます。

  • Ubuntuのリポジトリ内のパッケージは使用しないでください。確実には更新されません。それらを使用すると、重要な安定性とセキュリティの修正を見逃すことになります。
  • 以下のコマンドを実行して、Ubuntuのバージョンを確認します。
     ‪$ lsb_release -c
    
  • rootで、/etc/apt/sources.list に以下の行を追加します。「version」は、前の手順で見つけたバージョンに置き換えてください。
     deb https://deb.torproject.org/torproject.org version main
     deb-src https://deb.torproject.org/torproject.org version main
    
  • 以下のコマンドを実行して、パッケージの署名に使用するgpg鍵を追加します。
     ‪$ curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
    
  • 以下のコマンドを実行して tor をインストールし、その署名を確認します。
     ‪$ sudo apt-get update
     ‪$ sudo apt-get install tor deb.torproject.org-keyring
    

torrcファイルに追加できるオプションは2つあります。

BandwidthRateは、許容される最大長期帯域幅(バイト/秒)です。 例えば、10 MB/秒(高速接続)の場合は 「BandwidthRate 10 MBytes」 、500 KB/秒(適切なケーブル接続)の場合は 「BandwidthRate 500 KBytes」 をお選びいただけます。 最小のBandwidthRate設定は75 KB/秒です。

BandwidthBurstは、BandwidthRateを超える短い期間のトラフィック中に要求を満たすために使用されるバイトプールですが、長い期間の平均はBandwidthRateに維持されます。 レートが低く、バーストが高い場合は、長期的な平均値が適用されますが、最近平均値に達していない場合はピーク時により多くのトラフィックが許可されます。 例えば、 「BandwidthBurst 500 KBytes」 を選択し、それを BandwidthRate にも使用する場合、毎秒500キロバイトを超える使用はありません。ただし、より高い BandwidthBurst(5 MBytesなど)を選択すると、プールが空になるまでより多くのバイトが許可されます。

ケーブルモデムなどの非対称接続(アップロードがダウンロードより小さい)をご利用の場合は、BandwidthRateを小さい帯域幅(通常はアップロード帯域幅)より小さい値に設定する必要があります。 そうしないと、最大帯域幅の使用中に多くのパケットがドロップされる可能性があります。どの値が接続を快適にするかを試す必要がある場合があります。 次に、BandwidthBurstをBandwidthRateと同じに設定します。

Linux ベースの Tor ノードには、もう1つのオプションがあります。それは、自分のマシン上の他のトラフィックよりも Tor トラフィックを優先させることで、自分の個人トラフィックが Tor 負荷の影響を受けないようにすることです。 これを実行するスクリプトは上の Tor ソースディストリビューションの contrib ディレクトリーにあります。

さらに休止状態オプションがあり、期間ごとに一定量の帯域幅のみを提供するように Tor に指示できます (例えば 100 GB/月など) 。これらについては、休止状態エントリーでご説明します。

BandwidthRateとBandwidthBurstはビットではなく、バイト単位であることに注意してください。