Posts Tagged ‘ポートフォワード’

サーバー設定:SSHを利用したトンネリングについて

火曜日, 5月 15th, 2012

前回の投稿では、「SSHポートフォワーディング」としてたけど、トンネリングという方が適切かな、、、とも思うので変更。

※前回の投稿
うっちゃんねる» Blog Archive » サーバー設定:SSHポートフォワーディングを行う
http://truering.info/?p=576

今回は、リモート拠点にプライベートIPを持つサーバーがあり、そこにアクセスしたい場合の話。(しかもリモート拠点にはグローバルIPを持つサーバーが無いという状況)
なので、リモート拠点にあるサーバーから、こちらのグローバルサーバーへ接続してもらい、そのセッション/トンネリングを経由して接続しに行く、という形になる。

コマンド形式は以下の通り。
serverB2> ssh -N -f -A -t -g userA@serverA -R portA:serverB1:portB

xxxxxA(userAとかserverA、portA)がローカル拠点、xxxxxB(serverB1とかportB)がリモート拠点の各種情報となる。

具体的な値を例にすると、
192.168.0.10> ssh -N -f -A -t -g root@10.0.0.1 -R 8023:192.168.0.1:23
となる。
※ローカル拠点側のグローバルIPを10.0.0.1とする。

リモート拠点側の192.168.0.10上で上記コマンドを実行すると、10.0.0.1と192.168.0.10間でセッション/トンネリングが張られ、10.0.0.1上の8023で待ち受け(LISTEN)ている状態となる。
そこでローカル拠点のPCから、telnet 10.0.0.1 8023とすると、リモート拠点にある192.168.0.1にtelnet接続ができる。

なお、デフォルトの状態では、上記コマンドを投入しただけでは、10.0.0.1上で、localhost(127.0.0.1)の8023でのみ待ち受け状態となる。
なので、sshd_configに以下の項目を設定する必要があるようだ。(コメントかされてて、noになっていた)

—– /etc/ssh/sshd_config
GatewayPorts yes
—–

サーバー設定:SSHポートフォワーディングを行う

月曜日, 4月 9th, 2012

諸事情で、「とあるサーバーAを経由してサーバーBにアクセスしたい」という要望がでたので、SSHポートフォワードをうまく使えばいけるんじゃないかなぁ~と思って調べてみた。(そう言えば、自PCからポートフォワーディングをしたことはあったけど、自分で(サーバー側の)SSHポートフォワードの設定をやったことはなかったな)

[結論]
以下のコマンドを実行するだけでSSHポートフォワードが行え、上記要望を満たすことができる。

sshserver> ssh -g toserver -L localport:remoteserver:remoteport

[詳細]
例えば192.168.0.1上から以下のコマンド

192.168.0.1> ssh -g 10.0.0.1 -L 8022:10.0.0.1:22    ・・・ No.1
192.168.0.1> ssh -g 192.168.0.1 -L 8022:10.0.0.1:22  ・・・ No.2
192.168.0.1> ssh -g 192.168.0.2 -L 8022:10.0.0.1:22  ・・・ No.3

を実行した場合。
※10.0.0.1は外部のグローバルIPと仮定。

No.1 : 192.168.0.1から10.0.0.1へSSHのセッションが張られる
No.2 : 192.168.0.1から自分自身(192.168.0.1)へSSHのセッションが張られる。
No.3 : 192.168.0.1から192.168.0.2へSSHのセッションが張られる。

その後、クライアントPC(192.168.0.10)のSSH対応ターミナルソフトから192.168.0.1:8022へ接続すると、
No.1 : 192.168.0.10 -> 192.168.0.1:8022 -> 10.0.0.1:22
No.2 : 192.168.0.10 -> 192.168.0.1:8022 -> 192.168.0.1:22 -> 10.0.0.1:22
No.3 : 192.168.0.10 -> 192.168.0.1:8022 -> 192.168.0.2:22 -> 10.0.0.1:22
という経路で、10.0.0.1へログインすることができる。

10.0.0.1は、
No.1:192.168.0.1
No.2:192.168.0.1
No.3:192.168.0.2
からアクセスされているとみなしている。

[その他]
・192.168.0.1や192.168.0.2にポートフォワード用のユーザーを作成しなくてもよい。
->10.0.0.1にアカウントがあればよい。

・No.1の場合、192.168.0.1から10.0.0.1へのセッションが張りっぱなしになる。
->セキュリティ的に良くない。(異なるサーバー間で張りっぱなしは気持ち悪いので、No.3も該当するか)

・No.2とNo.3の場合は、クライアントPCから192.168.0.1:8022への接続タイミングで、10.0.0.1とセッションが張られる。

[考察]
ということで、ユーザーAからうちのグローバルサーバーを経由してユーザーBのグローバルサーバーへアクセスしてもらうには、No.2が理想か。
あと自宅(DHCP)からIDCへのアクセスもこれでいけるな。