立てているTor relay nodeがOverloadしたので対策した
TL,DR; 名前解決でOverloadしているのでsystemd-resolvedではなくUnboundを入れた。
自前で立ててるサーバをTorのリレーノードにしていることは何度か紹介したが、先日Relay Searchでチェックしてみるとノード名の後ろにオレンジの丸と、"This relay is overloaded"の文字が。
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
結論として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の表示も消えた。一件落着である。