LoginSignup
10
9

More than 3 years have passed since last update.

SSHを使ってSOCKS経由でWebにアクセスする方法

Last updated at Posted at 2020-03-17

どこにでも紹介されている内容かもしれないが、DNSの名前解決のところで少しはまったので、メモも兼ねて投稿。

1. やりたいこと

a. SOCKSを使っていない通常アクセスの場合(赤色線):

  • 端末がDNSで名前解決する
  • 端末から目的のサーバーに接続する
  • Webサーバーから見たアクセス元IPは端末に紐づけられているGlobal IP

b. SOCKSを使ったアクセスの場合(緑色線+青色線)

  • 緑色線は、SSHで暗号化+カプセル化されたSOCKS通信
  • DNSの名前解決もSOCKSサーバーであるLinuxが行うことが可能。
  • SOCKSサーバーであるLinuxからWEBサーバーにアクセスする。
  • Webサーバーから見たアクセス元IPはLinuxに紐づけられているGlobal IP

image.png

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)側で行うオプションも選択可能。ここでは選択しています。

image.png

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9