はじめに
先日はじめてローカルポートフォワードなるものの存在を知りました。ほかにもssh configやviなど世の中にはまだまだ分からないことがたくさんです。
今回はポートフォワードについてまとめようかと思います。
ポートフォワーディング
そもそもポートフォワーディングって何?というところではあるんですが、ググったうえでの辞書的な説明だとこうです。
ポートフォワーディング(port forwarding)とは、IPネットワーク上のある機器が、自らのIPアドレスのTCPやUDPの特定のポート番号への通信を、別のアドレスの特定のポートへ自動的に転送すること。また、ネットワーク機器などの持つそのような機能。
説明を読むとまあ何となくわかった風になれるやつですね。ssh接続のポートフォワーディングにおいて、接続するIPを限定することでセキュリティ対策となるようです。まさかそれ二種類があるなんて思いもしませんでした。
ローカルポートフォワード
おそらく一番身近な存在なのかと思います。
ローカルの自分で指定したポートにアクセスすると接続したい対象の指定したポートにアクセスできる仕組みです。
ssh -L {ローカルのPort}:{host名}:{接続したい対象のPort} {接続先ユーザー名}@{接続先のhost}
たとえば
ssh -L 8008:localhost:80 target_user@sample_target.jp
のようになります。
リモートポートフォワード
ローカルポートフォワーディングを調べる中で初めて知ったし、使ったこともないです。詳しい人、こいつを使う状況とか教えてください。
内容としてはローカルの逆で、リモートからローカルの指定したポートのにアクセスできるようにする仕組みです。
ssh -R {ローカルのPort}:{host名}:{接続したい対象のPort} {接続先ユーザー名}@{接続先のhost}
コマンドでの差はオプションがLとRですかね
ダイナミックポートフォワード
ssh接続したい対象が特定のネットワークからのアクセスのみ許可してるときによく登場します。
踏み台サーバーにssh接続して、踏み台のあるネットワーク内であればどこでも接続できます見たいなやり方ですね。
ssh -D {ローカルのPort} {接続先(踏み台)のユーザー名}@{接続先(踏み台)のhost}
正直最初は同ネットワーク内に構築されているという前提を知らず、「踏み台にしかアクセスしてないのに、なんで他のPortにアクセスできるんだ?」とずっと悩んでました。
おわりに
キーの指定したかったらオプションで-iだよとか、hostのところはIPでもいいよ、とか様々細かいやり方あるんだなと思いました。備忘録。