SOCKS 接続は、プロキシが宛先を解決する前にローカルで失敗することがあります。ソケットアドレスを構築する際に、コードがターゲットを解決していないか確認してください。

Java SOCKS ソケットでは、未解決の宛先アドレスを使ってターゲットのホスト名を保持します。

Proxy proxy = new Proxy(Proxy.Type.SOCKS,
    new InetSocketAddress("203.0.113.10", 1080));
Socket socket = new Socket(proxy);
socket.connect(InetSocketAddress.createUnresolved(
    "destination.example", 443), 5000);

エンドポイントとホスト名はプレースホルダーです。許可された公開宛先のテストには、ご利用の SOCKS5 サービスまたはSOCKS5 プロキシリストの候補を使用してください。重要な違いは、プロキシに到達するためにプロキシを解決することと、SOCKS 交換のために宛先名を保持することの間にあります。

接続後も、HTTPS クライアントには宛先ホスト名の TLS セッションが依然として必要です。TLS ラッパーはプロキシのホスト名をピアの識別情報として使うべきではありません。

上位レベルのコードも確認してください。ライブラリがコネクタを呼ぶ前に独自の名前解決を行う場合があります。このソケットアドレスでホスト名を保持しても、アプリケーションの他の場所で行われた解決を取り消すことはできません。

関連記事