SOCKSプロトコルを完全に理解する(SOCKS 5編)
以前の記事では、SOCKS 4について紹介しました。SOCKS 4は、TCP接続を代理転送するためのシンプルなプロトコルですが、現代的な用途で見るといくつかの制約があります。代表的なのは、次の2点です。
- 宛先をIPv4アドレスで指定する必要があり、ドメイン名をそのまま扱えない
- 認証やUDP転送を標準機能として持たない
この不足を補うために登場したのが、SOCKS 4aとSOCKS 5です。
SOCKS 4aは、SOCKS 4の設計をほぼ維持したまま、サーバー側の名前解決を可能にした拡張です。一方のSOCKS 5は、認証方式のネゴシエーション、IPv6、ドメイン名指定、UDP転送などを含む、より汎用的な設計になっています。
この記事では、まずSOCKS 4aが何を解決したのかを確認し、そのうえでSOCKS 5のTCP転送とUDP転送の仕組みを、パケットの中身を追いながら整理します。