SOCKSサーバーの立ち上げ
それでは,
$ ssh -fNC -D 1080 -oExitOnForwardFailure=yes ubuntu@10.93.9.120
「10.-oProxyCommand='ssh -W %h:%p ユーザー名@ホスト名'
」-J ユーザー名@ホスト名
」
他のオプションは次のとおりです。
- 「
-f
」:sshコマンドをバックグラウンドで動かす。「 -oExitOnForwardFailure=yes
」がついているので, 何かエラーが発生したらsshコマンドは終了します。 - 「
-N
」:単純にSSHのコネクションのみを作成します。SSH接続先で何かコマンドを実行することはありません。 - 「
-C
」:コネクションでやりとりするデータをすべて圧縮します。これは指定しなくても問題ありません。 - 「
-D 1080
」:SOCKSサーバーとしてポート1080で待ち受けます。
これでクライアントマシンから,
$ curl -sL --proxy socks5://localhost:1080/ http://10.93.9.120/ <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> (以下略)
期待通り組織内LAN
たとえば組織内LANからのみアクセス可能な領域のgitリポジトリをcloneしたい場合は,
$ git -c http.proxy=socks5://localhost:1080 clone https://foo.example.co.jp/git/repo.git
設定が問題なさそうなら,~/.ssh/
」
Host socks
HostName 10.93.9.120
User ubuntu
DynamicForward 1080
Compression yes
ExitOnForwardFailure yes
RequestTTY no
あとはssh -f socks
」
ウェブブラウザー側の設定
次にウェブブラウザーから,
function FindProxyForURL(url, host) {
if (isInNet(host, "10.93.9.0", "255.255.255.0")) {
return "SOCKS5 localhost:1080";
}
return "DIRECT";
}
これは
今回はドメイン名の指定がないため,isInNet()
は指定したhostが,
真になった場合はプロキシとしてSOCKS5 localhost:1080
」DIRECT
」
PACファイルの指定方法はウェブブラウザーごとで異なります。
まずFirefoxの場合は,
「自動プロキシ構成スクリプト」
あとは普通に
Chrome/
- ※3
- 以前はコマンドラインオプションで
「 --proxy-pac-url=ファイル名
」で指定も可能でしたが, 現在はそれらの機能は削除されています。
より一般的には特定の組織内LANには特定のドメイン名が付けられていることでしょう。そうすると次のような設定が考えられます。
function FindProxyForURL(url, host) {
if (dnsDomainIs(host, ".example.co.jp") && !isResolvable(host)) {
return "SOCKS5 localhost:1080";
}
return "DIRECT";
}
dnsDomainIs()
を使ってアクセスしようとしているサイトのホスト名がisResolvable()
でそのホスト名が名前解決できるかをチェックしています。isResolvable()
がFALSEの状態でSOCKSに経由すれば名前解決が行えるようになるはずだ,
- ※4
- ネットワーク設定の
「SOCKS v5 を使用するときは DNS もプロキシーを使用する」 にチェックを入れる必要があります。
「Proxy Auto Configuration
ちなみに今回紹介した方法を使うと,