LAN内部でのみ見られるページを外部から見る

社内LANのページにアクセスするためにポート転送などについて調べたのでメモ

LAN内のページを外から見る必要があるときには、LAN内にあるサーバをproxyとして用いる。その際、ssh用の設定を書いておくと楽。

ex. 自宅PC(A.hoge.jp) → 踏み台サーバ(B.foo.jp) → LAN内サーバ(C.var.jp) → 目的サーバ(D.boo.jp) 

・ AのPCからサーバDにあるページを閲覧したい

・すべてのサーバは同じusername、秘密鍵でアクセスできるとする

.ssh/config

Host B.foo.jp

 HostName B.foo.jp

Host C.var.jp

 HostName C.var.jp

 ProxyCommand ssh B.foo.jp -W %h:%p

 DynamicForward 1080

Host *.jp

 User user-name

    IdentityFile ~/.ssh/id_rsa

 

この設定を書いた状態で以下のコマンド

% ssh -N -f C.var.jp 

 

これでサーバCをSOCKS proxyとして機能させることができる。あとはA側のproxy設定を行い、localhost:1080にアクセスすればポート転送によりサーバDのページを閲覧できる。

 

macでのproxy設定はシステム環境設定 - ネットワークから行える。ネットワーク環境が”自動”となっているのでこれをコピーして別名で環境を作っておくと切り替えるだけでproxyへの接続ができるので便利。アプリごとに設定を切り替える必要がなくてよい。

 

▼上の設定について解説

・config中のワイルドカード

 .ssh/configではワイルドカードを使った指定ができるので、ユーザ名や秘密鍵の設定など同じものを使いまわす際にはまとめて書いておける。注意点としては、ワイルドカードを用いた設定を一番したに書くこと。上から順にホスト名の判定をしてマッチした設定が使用されるため、上の方に書いてしまうとそれ以降の設定にアクセスされなくなる。

 

・ProxyCommand

 sshを行う際にここに書いたコマンドを実行してくれる

 

ssh B.foo.jp -W %h:%p

 このコマンドは以下の書き方でも同じ意味

  ssh B.foo.jp nc %h %p

つまり、-Wはncと同じことをしている。ncとはnetcatのことでOpenSSH 5.4あたりから内部コマンドとしてsshに取り込まれたため-Wのオプションで使える。また、%hにはHostName、%pにはPortがreplaceされる。

 ※ncを使う場合はtimeoutの設定もすべきらしい

 → nc -w 1 %h %p = 1secでtimeout

 

・DynamicForward 

 ここに設定したポートを接続先に転送し、接続先のサーバをSOCKS proxyとして用いる。

 

ssh -N -f 

 -N:接続先のサーバでシェルを使った操作をしないときつけとく

 -f :sshをバックグラウンドで動かしておきたいときつけとく

 

追記(2013/06/29)

▼git pullなどを↑で設定したポートを通じて行う

以下の設定を.ssh/configに書く

Host git.example.jp

    ProxyCommand nc -x localhost:1080 %h %p

 

git cloneやpullの際にアクセスする際にdynamic forwardの設定をしたポートを使うようにする。-xはproxyの設定用のオプション。

 

参考ページ

 DynamicForwardについて

 ・http://openlab.dino.co.jp/2009/05/28/235026555.html 

 ・http://old.typemiss.net/blog/kounoike/20061019-100

 多段sshの設定について

 ・http://d.hatena.ne.jp/dayflower/20080204/1202457379