SSH ダイナミックポートフォワード+Socks プロキシで内部ページを閲覧する

  • 8
    Like
  • 0
    Comment
More than 1 year has passed since last update.

プライベートな環境で「SSH でダイナミックポートフォワード+SOCKS プロキシ」を使っていて、何かの節にSSH のトンネルが切れてしまい、SOCKS に引きずられてインターネットにアクセスできない悲しい事態になったので雑に自動化してみた。

#!/bin/sh
INTERVAL_SEC=5
echo '[SSH Proxy] Turn on socket proxy...'
networksetup -setsocksfirewallproxystate Wi-Fi on

ssh -D 1080 -N user@example.com &
SSH_TUNNEL_PID=$!
echo "[SSH Proxy] Built SSH tunnel [ PID $SSH_TUNNEL_PID ]"

function health_check() {
  while true
  do
    sleep $INTERVAL_SEC
    ps -p $SSH_TUNNEL_PID >/dev/null 2>&1
    if [ $? -eq 1 ]; then
      echo '[SSH Proxy] SSH tunnel is broken!'
      networksetup -setsocksfirewallproxystate Wi-Fi off
      echo '[SSH Proxy] Turn off socket proxy.'
      exit 0
    fi
  done
}
health_check &
exit 0

使うときは事前に、SOCKS プロキシの設定が必要です。SOCKS Proxy Server として localhost:1080 を指定が必要です。

Screen Shot 2015-12-01 at 09.00.46.png

補足説明

ダイナミックポートフォワード

ターミナルでトンネルを貼る場合は、

ssh -D 1080 -f -N user@example.com

とすればOK. リモートでコマンドを実行する必要が無いので -N を指定して、 -f でバックグラウンド実行させることが多い(と思う)。

ダイナミックポートフォワード自体の設定は下記の様に指定することも可能です。

~/.ssh/config
Host tunnel
  HostName example.com
  User user
  DynamicForward 1080

Mac のネットワーク設定

コマンドラインからいろいろ弄れるみたいです。 networksetup コマンドをみると設定のサンプルが見られます。

めっちゃ出てくるので、

networksetup | grep socks -A3

とかやると、いい感じにSOCKS プロキシの設定方法がわかります。