どこにでも紹介されている内容かもしれないが、DNSの名前解決のところで少しはまったので、メモも兼ねて投稿。
#1. やりたいこと
##a. SOCKSを使っていない通常アクセスの場合(赤色線):
- 端末がDNSで名前解決する
- 端末から目的のサーバーに接続する
- Webサーバーから見たアクセス元IPは端末に紐づけられているGlobal IP
##b. SOCKSを使ったアクセスの場合(緑色線+青色線)
- 緑色線は、SSHで暗号化+カプセル化されたSOCKS通信
- DNSの名前解決もSOCKSサーバーであるLinuxが行うことが可能。
- SOCKSサーバーであるLinuxからWEBサーバーにアクセスする。
- Webサーバーから見たアクセス元IPはLinuxに紐づけられているGlobal IP
#2. SSHを使ったSOCKSの有効化
MacのTerminalからSSH実行
$ ssh -D 9080 xxx@xxx.xxx.xxx.xxx
これだけ。本来は、 -D [bind_address:]port
のようにbind_addressも指定できるが、デフォルトはlocalhostなので敢えて他には指定していない。
また、sshのオプションで -f -N
などを追記してBackgroundで実行するのも1つの方法だが、通信の切り忘れとかもあるので私は特にオプションを他に付けないのが好み。
これにより、以下のように自身の端末のlocalhost:9080にSOCKS用のポートがopenされた。
MacのTerminalでListenPortを確認。
$ netstat -an|grep 9080
tcp4 0 0 127.0.0.1.9080 *.* LISTEN
tcp6 0 0 ::1.9080 *.* LISTEN
#3. Firefoxの設定
- SOCKSでありHTTPプロキシではないので、HTTPプロキシ欄には何も入力しない。
- SOCKS4では名前解決はクライアント側で行う挙動だったが、SOCKS5であれば名前解決をSOCKSサーバー(Linux)側で行うオプションも選択可能。ここでは選択しています。