悪霊にさいなまれる世界 -The Demon-Haunted World

30代独身機械系技術者が雑記/セキュリティ/資産運用なんかを書きます/PGP・GPG Key:BC884A1C8202081B19A7A9B8AB8B419682B02FF8

立てているTor relay nodeがOverloadしたので対策した

TL,DR; 名前解決でOverloadしているのでsystemd-resolvedではなくUnboundを入れた。

自前で立ててるサーバをTorのリレーノードにしていることは何度か紹介したが、先日Relay Searchでチェックしてみるとノード名の後ろにオレンジの丸と、"This relay is overloaded"の文字が。

f:id:scienceasacandleinthedark:20220219191921p:plain

適当に選んだOverloadしているリレーのスクショ

articleを読め、と言うので読んでみる。基本的にTCPポートが足りなくなっているか、DNSタイムアウトしているかのいずれからしい。どちらが問題か切り分けるのがセオリーである。

My relay or bridge is overloaded what does this mean? | Tor Project | Supporto

まずはlsofコマンドで、Torがポートをどれほど使っているか確認してみる。オプションの意味は適当に検索されたい。

sudo lsof -a -iTCP -n -c tor -P

f:id:scienceasacandleinthedark:20220219192802p:plain

Torの接続数

結論としてTorの接続数は高々5000程度で、少なくはないが溢れるほどではない(net.ipv4.ip_local_port_rangeのデフォルト値が32768 65000なので、接続数は3万程度は問題ないはずである)

となるとDNSの名前解決が問題になってそうである。確かに普通にapt updateをして見てもレポジトリの名前解決に失敗することが頻発する。

Torリレー用のサーバはUbuntuなので、デフォルトでは名前解決にsystemd-resolvedが使われている。前述のTor公式ではtimeoutの設定を変えてみるように記載されているが、試しにtimeout:3(デフォルトは5)などにしても変わりは無かった。

と言うわけでsystemd-resolvedからUnboundに変更してみる。これは以前の記事を参考にされたい。今回はIPv6云々は関係ないのでインストールして設定するだけで十分である…が、インストール後にsystemd-resolvedを停止してUnboundを再起動する必要がある。

RaspberryPiにUnboundを入れたけど、IPv4/v6デュアルスタックだとv6のDNSサーバに出来なかった件 - 悪霊にさいなまれる世界 -The Demon-Haunted World

sudo systemctl stop systemd-resolved
sudo systemctl restart unbound.service

nslookup等で正常に動作することを確認する。これでしばらく様子を見たところ、ノードの名前の後ろの丸が緑になり、Overloadの表示も消えた。一件落着である。