0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ポートフォワーディングの多段転送のやり方

Posted at

はじめに

いきなりですが、例えば、次のようなネットワーク構成の環境があるとしましょう。

001.png

そして、このネットワークには次の制約があります。

  1. 自端末からAPサーバー(Linux2)には踏み台(Linux1)を踏まないと接続できない。
  2. 踏み台サーバー(LInux1)からDBサーバー(DB)には接続できない。

IT業界に従事されているエンジニア、コンサルタントの皆さまであれば、一度は目にしたことがあるのではないでしょうか。
こうなると、DBに用がある場合、まずは踏み台サーバーを経由してAPサーバーにログインし、APサーバーの上でDBに接続、作業する必要があります。

そうなると、大体の場合、LinuxやUnixだとGUI環境がなく、CLIで作業することになります。
別にいいのですが、大量のデータをSELECTしたいときなど、とても見にくくなるので、できれば、自端末からGUIアプリケーションを使って効率的に作業したいですよね。

そんな時は、Teratermにもできるポートフォ、ネットワークに一時的な導線を作ってあげれば、自端末からDBサーバーに対する作業ができます。
また、ネットワークの上でもちゃんと踏み台、APサーバーを経由しているので、問題もありません。
※とは言いつつも、気軽にデータが触れることが問題だ!と云う場合もありますので、組織のポリシーに従いましょう。

今回は、そんなときの作業効率化を図るための記事です。
ただ、この後、具体的なやり方を語っていきますが、面倒なことをしなくても、このような構成を前提に、A5:SQL Mk-2など、トンネル機能があるSQLツールもありますので、それぞれのツールの機能で事足りる場合はそれらを使うのがいいでしょう。

手順概略

まずは、ざっくりとした手順を紹介します。

  1. 踏み台サーバーからAPサーバーへのトンネルを作る。
  2. 1で設定したトンネル経由でAPサーバーに接続する。
  3. APサーバーからDBサーバーへのトンネルを作る。
  4. 3で作ったトンネル経由でDBサーバーに接続する。

このように、複数の端末、サーバーでネットワークを転送することをポートフォワーディング(ポート転送)と云い、今回は複数のサーバーをまたいで転送していくので、「ポート多段フォワード」と云います。

手順詳細

ここからは、詳細な手順を解説していきます。

踏み台サーバーからAPサーバーへのトンネルを作る

まずは、踏み台サーバーからAPサーバーを結ぶトンネルを作ります。
ポートフォワーディングを使って仮想的にネットワークを結ぶことを「トンネルを作る」とも云います。
1段でトンネルを作るやり方は、当記事以外にもたくさんの参考記事があり、難しくありません。

トンネルを作るイメージです。
002.png

図上、トンネルを丸い筒でイメージしています。
トンネルを作ることで、1つのコマンドで、端末からAPサーバーに接続できるようになります。

Teratermで踏み台サーバーにログインします。
003.png

設定 > SSH転送(O)より、ポートフォワーディングを設定します。
このとき、ローカルのポートは未使用のポートであれば何番でも構いません。
リモート側ホストのポートはSSHの22番を指定します。
004.png

これで、踏み台、APサーバー間のトンネルができました。

1で作ったトンネル経由でAPサーバーに接続する

作ったトンネルでAPサーバーに接続します。
ここの理屈はよくわかっていないのですが、踏み台サーバーからAPサーバーに普通に接続するのではなく、トンネル経由で接続します。
005.png

ここでは、ログインするだけで、ポート転送の設定はしません。
006.png

APサーバーからDBサーバーへのトンネルを作る

これだけだと、まだAPサーバーまでしかトンネルが開通していないので、APサーバーからDBサーバーも開通させます。
007.png

ここでは、sshこコマンドのオプションを使ってトンネルを作ります。
また、これも理屈はよくわかっていないのですが、自分から自分にポート転送を設定し、それを使ってトンネルを作ります。

踏み台サーバーにログインします。
008.png

自分から自分へのポートフォワーディングを設定します。
009.png

最後に、転送のオプションをいれたコマンドでトンネルを作ります。
コマンド:ssh root@Linux2 -L 10004:192.168.1.2:1521
010.png

DBに接続

ここまでで、DBサーバーまでに通るトンネルは全て開通しました。
このトンネルを使ってDBサーバーに接続します。
接続には、自分から自分に設定したポートフォワーディングのポートを指定します。

こちらはOracleに接続するイメージです。
011.png

接続できました!
012.png

これで、好きなツールを使って、効率よく作業ができますね。
DB以外にも、多段フォワードを使ってできることは多いので、ネットワーク的な壁にぶつかった場合は、こちらの方法を試してみてください。

おまけ

これは完全に自分のメモなんですが、これまでの一連の作業をダブルクリックするだけで実行できるTeratermマクロを残しておきます。

踏み台サーバからAPサーバーへのポートフォワーディング
;;=====================================================================
;; 接続先などのホスト情報をまとめる
HOSTADDR = 'localhost'
USERNAME = 'Linux1User'
PASSWORD = 'password'
;;=====================================================================

;; コマンドオプション組立て
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD

;; ウィンドウの色を変えたり設定を読み込ませる
strconcat COMMAND ' /F='
strconcat COMMAND 'C:\Users\Taro\TERATERM.ini

;; ポート転送を設定する
TRANSFER_SVR1 = 10003:Linux2:22
sprintf2 TRANSFER_SVR '%S' TRANSFER_SVR1

strconcat COMMAND ' /ssh-L'
strconcat COMMAND TRANSFER_SVR

;; 接続
connect COMMAND

end
APサーバにログイン
;;=====================================================================
;; 接続先などのホスト情報をまとめる
HOSTADDR = 'localhost'
USERNAME = 'Linux2User'
PASSWORD = 'password'
;;=====================================================================

;; コマンドオプション組立て
COMMAND = HOSTADDR
strconcat COMMAND ':10003 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD

;; ウィンドウの色を変えたり設定を読み込ませる
strconcat COMMAND ' /F='
strconcat COMMAND 'C:\Users\Taro\TERATERM.ini

;; 接続
connect COMMAND

end
自分から自分の転送設定からSSH
;;=====================================================================
;; 接続先などのホスト情報をまとめる
HOSTADDR = 'localhost'
USERNAME = 'Linux1User'
PASSWORD = 'password'
;;=====================================================================

;; コマンドオプション組立て
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD

;; ウィンドウの色を変えたり設定を読み込ませる
strconcat COMMAND ' /F='
strconcat COMMAND 'C:\Users\Taro\TERATERM.ini

;; ポート転送を設定する
TRANSFER_SVR1 = 10004:127.0.0.1:10004
sprintf2 TRANSFER_SVR '%S' TRANSFER_SVR1

strconcat COMMAND ' /ssh-L'
strconcat COMMAND TRANSFER_SVR

;; 接続
connect COMMAND

;; コマンド入力のプロンプトが出たらコマンド投入
wait '$'
ssh root@Linux2 -L 10004:192.168.1.2:1521
;; このコマンドだとLinux2にログインする際のパスワード入力は必要

end

おわりに

筆者が試したときはこの手順を踏まないといけなかったのですが、理屈のわからない手順もありましたので、もっとシンプルに解決できるやり方があるかもしれません。
ご存じの方はぜひぜひコメントください。

参考文献

当記事を執筆するにあたり、お世話になった文献です。

https://yoneyore.hatenablog.com/entry/2016/10/09/211617
https://qiita.com/yuuki4891/items/bfe5c1d201524c6d1827

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?