SOCKS5 接続失敗コードを読み解く
SOCKS エラーをすべてプロキシ停止と判断する前に、ネゴシエーション、認証、宛先接続のどこで失敗したかを見分けます。
SOCKS5 サーバーは TCP 接続を受け付けても、宛先へのアクセス要求を拒否することがあります。どのエンドポイントで失敗したか判断する前に、正しい段階の応答を読んでください。
最初は方式選択です。ユーザー名とパスワードによる認証が選択された場合、それ自体の結果があります。その後に初めて CONNECT などの SOCKS コマンドへの応答が返されます。ある段階のバイト値を別の段階の表で解釈することはできません。
要求への応答は異なる失敗を示す
| 応答値 | SOCKS5 要求への応答での意味 |
|---|---|
| 0x01 | 一般的なサーバー障害。 |
| 0x02 | ルールセットで接続が許可されていない。 |
| 0x03 | ネットワークに到達できない。 |
| 0x04 | ホストに到達できない。 |
| 0x05 | 接続拒否。 |
| 0x06 | TTL 期限切れ。 |
| 0x07 | コマンド非対応。 |
| 0x08 | アドレス種別非対応。 |
例えば、要求レベルの拒否は SOCKS サービスに到達した後で報告されます。OS がそのサービスへの最初の TCP 接続を拒否する場合とは異なります。
アドレス種別のエラーは IPv4、IPv6、ホスト名の表現に関係することがあります。エンドポイント全体が SOCKS5 非対応だと自動的に判断できるわけではありません。同様に、UDP コマンド非対応という結果だけで、別の TCP CONNECT 要求について断定はできません。
コードを役立てるための状況情報を集める
エラー報告を書くときは、結果とともにプロキシアドレス、コマンド、宛先ホストとポート、アドレスファミリー、DNS モードを残してください。エンドポイントを管理しているなら、サーバー側のポリシーログも役立ちます。ルールセットによる拒否では、接続タイムアウトを延ばすのではなく、適用される権限を確認します。
応答はサーバーからの報告であり、宛先ネットワークの完全な独立診断ではありません。クライアントの文言も異なります。短い翻訳済みエラーメッセージだけに頼らず、取得できる場合は段階と元の応答を記録してください。