SUPPORTING
SOCKS5でもDNSは別経路?socks5とsocks5hを試用中に見分ける手順
curlのsocks5とsocks5hでは名前解決を行う場所が異なります。日本SOCKSプロキシの試用中に、DNS経路、IPv4・IPv6、認証方式を切り分け、契約継続を判断する手順を解説します。
日本SOCKSプロキシを選ぶ際、出口IPだけでは確認が足りません。curlでは、socks5を指定すると名前解決をcurl側で行います。一方、socks5hまたは--socks5-hostnameを使うと、ホスト名はプロキシへ送られ、curl側ではローカル名前解決を行いません。curl公式解説
つまり、同じSOCKS5サービスでも指定方法によって「どこがドメイン名を解決するか」が変わります。試用中は接続先から見えるIPだけでなく、socks5とsocks5hを分けて検証することが重要です。
契約前に確認する項目
提供元には、次の点を具体的に確認します。
- ホスト名をプロキシ側で解決する接続に対応しているか
- IPv4とIPv6の利用条件に違いがあるか
- 利用可能な認証方式は何か
- 試用の終了日時と、解約・返金の条件は何か
SOCKS5の宛先にはIPv4アドレス、ドメイン名、IPv6アドレスという形式が定義されています。RFC 1928 ただし、規格に形式が存在することと、契約予定のサービスが各形式を実際に利用できることは分けて確認してください。
認証についても「SOCKS5対応」という表示だけでは判断できません。SOCKS5ではクライアントが提示した候補からサーバーが認証方式を1つ選びます。規格上の識別子には、認証なし、GSSAPI、ユーザー名・パスワードが含まれます。RFC 1928 サーバーの応答が利用可能な方式なしを示すX'FF'なら、クライアントは接続を閉じる必要があります。RFC 1928
試用中の切り分け手順
同じ端末、同じ回線、同じ接続先を使い、まずsocks5指定、次にsocks5h指定で実行します。前者ではcurl側、後者ではプロキシ側に名前解決を任せる構成になります。curl公式解説
各試行では、日時、指定方式、接続先ホスト名、IPv4・IPv6、認証方式、接続の成否を記録します。利用環境で確認できる場合は、ローカルDNSのログやパケット記録も照合し、socks5実行時とsocks5h実行時の差を確認します。接続失敗だけでDNS非対応と決めず、認証不一致やサーバー側の拒否と分けて調べてください。SOCKS5サーバーはリクエストを評価し、接続を確立するか拒否します。RFC 1928
判定記録は、次のように簡潔にまとめると比較しやすくなります。
| 指定 | 名前解決を担う側 | 接続結果 | ローカル側の観測 | 判断 |
|---|---|---|---|---|
| socks5 | curl側 | 成功・失敗を記録 | DNS記録の有無を確認 | ローカル解決構成として評価 |
| socks5h | プロキシ側 | 成功・失敗を記録 | socks5との差を確認 | リモート解決構成として評価 |
curlの対応表では、SOCKS5とSOCKS5-hostnameはいずれもIPv6対応とされています。curl公式解説 これは利用するプロキシサービスのIPv6提供を保証するものではないため、IPv4とIPv6は別々の試験項目にします。
デメリットと向いていない条件
socks5hを選べば常に最適とは限りません。プロキシ側で名前解決する構成では、名前解決をそのプロキシに委ねることになります。利用組織の要件上、ローカル側で名前解決を管理する必要があるなら、socks5のほうが構成に合う場合があります。
また、希望する認証方式をサービス側が選択できなければ接続は成立しません。SOCKS5の安全性は実装によって提供され、選択される認証方式やカプセル化方式に大きく依存します。RFC 1928 「SOCKS5対応」だけを安全性の根拠にせず、認証条件まで確認すべきです。
継続判断では、socks5hで目的の接続が成立するか、IPv4・IPv6の必要範囲を満たすか、認証方式が運用要件に合うかを確認します。いずれかが満たせなければ、設定変更、別サービスの比較、または不使用を選ぶのが妥当です。