サイトへのアクセスが特定のネットワーク内だけに限られていたり、 また、ローカルのマシンの設定などを見たいためにプライベートIPに 接続して見たりしたいときに そのネットワーク内の端末を踏み台にしてウェブページを見る方法のまとめ。
ポートフォワード
特定のネットワーク内からしか見れないウェブページを見るためには、 そのネットワーク内にある端末のポートを使って プロキシサーバーに使ってアクセスします。
そのためにまずはダイナミックポートフォワードを行う必要があります。
ターミナルから行う
$ ssh -N -f -D 10080 [email protected]
- -N: リモートでコマンドを実行しない。
- -f: コマンド実行前にバックグラウンドへ移行。
- -D
[<bind_address:>]<port>
: ダイナミックポートフォワード。<bind_address:>
を指定しない場合はlocalhostの<port>
番号がSOCKSプロキシになります。
ダイナミックポートフォワードの設定は~/.ssh/configに書いておくことも出来て、
1 2 3 4 |
|
と書いておいて、
$ ssh -N -f tunnel
とすれば上のコマンドと同じ結果になります。
他にexample.com
を普通にsshで使う様な場合には
1 2 3 4 5 |
|
のように、接続設定は通常の接続(example
)と同時に行って、
tunnel
部分だけDynamicForwardを足す、ということも出来ます。
(最初の方にIdentifyfile
等の設定を加えても勿論OK。)
-f
や-N
はconfig
では設定できない様なので、
面倒だったら
alias tunnel="ssh -f -N tunnel"
の様な物を.bashrcに書いておいてtunnel
コマンドで出来るようにするとか。
この方法だとバックグラウンドで実行されるので、
後々消すにはps -A|grep ssh|grep tunnel
などとしてPIDを調べてkill <pid>
したりしないといけません。
(kkコマンドを使うと簡単に絞り込めて消せるので便利。)
もし、それ程長く使用しないできちんと消したい場合には
-f
を外して
$ ssh -N -D tunnel
としておけばターミナル上では実行されたまま待の状態になるので、 Ctrl-cを押すと停止することが出来ます。
Cygwinなんかだとターミナルを落とせば全てのプロセスが落ちるので 自動的に切れますが。
これらの設定は直接アクセスできないような端末を多段sshを使って踏み台にすることも出来ます。
1 2 3 4 5 6 7 8 9 |
|
みたいなのを書いておけばssh example
とするとserver
を踏み台にして
example.com
に通常ssh接続出来るようになり、
ssh -N -f tunnel
とすればserver
を踏み台にしてexaple
に接続し
SOCKSプロキシを作ることが出来ます。
PuTTY
新しいセッションを 踏み台にしたいHost NameとPort 22で作り、 ConnectionData Auto-login username にユーザー名を入力します。
ポートフォワードの設定は ConnectionSSH Tunnels を開いて、
- Source port:
10080
- Destination: 空白のママ
- Dynamicをチェック
- Autoをチェックしたまま
の状態にしてAddボタンを押します。
これで接続すれば
$ ssh -D 10080 [email protected]
したのと同じ状態になります。 ターミナルを消せば接続が終わります。
プロキシ設定
Mac全体での設定
システム環境設定からネットワーク を選ぶか、メニューバーのリンゴマークから ネットワーク環境ネットワーク環境設定 を選んでネットワークの設定を表示させます。
出てきた画面で使用しているネットワークを選択した上で 右下の詳細をクリック。
出てきた画面で
プロキシタブを選んで、
構成するプロトコルを選択の一覧から
SOCKSプロキシを選択してチェックを入れ、
右上に出てくるSOCKSプロキシサーバーに
localhost
:10080
となるように入力します。
Windows全体での設定
コントロールパネルから ネットワークとインターネット インターネットオプション でインターネットのプロパティ が開かれるので、そこで 接続タブへ行き、下にあるLANの設定を開きます。
出てきた画面でLANにプロキシサーバーを使用する にチェックを入れ、 詳細設定を開きます。
この画面でMac同様Socksのアドレスの欄にlocalhost
、
その右のポートの欄に10080
を入力してOKして閉じます。
Google ChromeやIE,Safariその他メールソフトなどでの設定
Google Chromeの設定画面でネットワークのプロキシ設定の変更を選んでもこれらのOSの 設定画面が出てきます。
IEやSafariの設定もOSの設定のものになります。
またメールソフトなどの設定も基本的に全てOSの全体の設定に従います。
なので、設定後にポートフォワードをやめてしまうと 基本的にブラウザやメールソフトなど全て使えなくなってしまうので、 きちんと戻しておかないといけません。
特にChromeとかだとChromeの中から設定を開くので Chromeだけの設定っぽく見えてしまうこともありますが、 OS全体の設定なので注意です。 (Chromeではプロキシを使って、Safariでは使わず、みたいなことは出来ません。 一方、下に書くようにFirefoxは独自の設定を行うのでFirefoxだけ違う設定を使うことは出来ます。)
Firefoxでの設定
FirefoxではFirefoxだけの設定も行えます。
- Mac: ファイル環境設定
- Windows: ツールオプション
で設定画面を開いて詳細へ行き、ネットワークタブを開きます。
さらに接続設定を開きます。
出てきた接続設定(プロキシの設定)画面で、
手動でプロキシを設定するを選択し、
SOCKSホストの欄にlocalhost
、
右のポートに上で設定した10080
を入力します。
で、OK。
上の接続設定の画面で、 システムのプロキシ設定を使用する にチェックしておくと上で行ったMacやWindows全体の設定と同じものを 使うようになります。
自動プロキシ構成スクリプトを使って自動でプロキシを変更する
プロキシの設定をいちいち変更するのは面倒ですが、 決まったURLに対してだけプロキシを使うように設定しておくことも出来ます。
上のMac/Windows/Firefoxそれぞれの場合で プロキシを設定する画面で 自動プロキシ構成/ 自動構成スクリプトを使用する/ 自動プロキシ設定スクリプトURL を選択すると自動スクリプトのURLを記入出来る様になります。
ここで、この様なPACファイルを作っておいて その場所を指定してあげます。
1 2 3 4 5 6 7 |
|
このファイルでやってることは
開いたページのドメインが”remote.example.com”であるか
もしくは”192.168.001.”で始まる場合に
はlocalhost:10080
を使い、
もしこれが使用できない場合は通常の直接接続を行います。
それ以外のURLの場合には通常の直接接続を最初から行います。
もっと簡潔に
1 2 3 |
|
とすれば全てのページについて
localhost:10080
が使える場合にはそれを使って
使えない場合には直接接続を行う様にも出来ます。
(速度的な問題がなさそうなので今はこちらを使用中)
この辺のチェックの仕方については下記のページや FindProxyForUrl で検索すると色々出てきます。
このファイルを自動プロキシ設定スクリプトのURLの指定の所に書いてあげればOK。
ローカルにあるファイルであれば
file:///Users/user/proxy.pac
みたいに最初にfile://をPATH付けて書けばOK。
Windowsの場合には
file:///C:/Users/user/proxy.pac
の様に最初にC:も加えて、
WindowsですがPATHの区切りは/
になります。
勿論通常のhttpでアクセス出来るものでも良くて
https://raw.githubusercontent.com/rcmdnk/dotfiles/master/.proxy.pac
こんな感じでGitHubに置いておいて、これをそのままURLとして書き込めば ネットに置いてあるものを使うことも出来ます。
追記: 2014/10/06
Sophosの様なウィルス対策ソフトを入れると プロキシの設定があると はじいてページを表示できなくなることがあるので ウィルス対策ソフト側で設定を行う必要があることがあります。
追記ここまで