DBの CDC関連のサービスを検討をしていると常に Local DBへのアクセスがネックになってしまい。。。
で、やむなく検証環境を期間限定で構築した際の、ちょいワル技術です。
<絶対に悪用しないでくださいね>
- ssh アクセス可能
Cloud Server
+-----+
| |
出先#A +-----+ Private #B
+-----+ | +-----+
| |-------+--------| |
+-----+ +-----+
- 外部へアクセス可能 - LocalDB 稼働
- 外部からはアクセス不能
- 外部へはアクセス可能
- この環境はにはアクセス可能
こんな状況は良くあります。
case 1) 例えば #B が会社で、#A が自宅
case 2) その逆で #Bが自宅で、#A が会社
こんな時、もし自由にアクセスできるクラウドサーバがあったなら Firewall を解除することなく、またセキュリティチェックに引っかかることもなく#A から #B の DBを直接操作する方法があったりします。
セキュリティ上は本当に良くないことなのですが、Local DB とpublic DB の CDC (Change Data Capture) などを実験するときには便利だったりします。
方法は #A と #B の双方からクラウドサーバに ssh トンネルを確立するだけです。
利用するクラウドサーバは、なんでもOKです
前提)
CloudServer Host名 = anycloud.com
CloudServer ユーザ名 = hack
CloudServer上の空きPort番号 = 3333
Praive#B のDB Port番号 = 3306 (mysql)
出先#A の空きPort番号 = 9999
-
まず Private #B にアクセスできるときに以下のコマンドを実施します
ssh -R 3333:localhost:3306 -N hack@anycloud.com [-i SshKeyFile]
-
出先にて以下のコマンド実施します
ssh -L 9999:u-software.tk:3333 -N hack@anycloud.com
-
例えばDB がMySQL なら、#A から以下のコマンドでアクセスできてしまいます
mysql -h 127.0.0.1 -P 9999 -u {DB-User} -p [DatabaseName]
#A---Cloud
と Cloud---#B
の二つのsshトンネルを構築して、 Cloud側の終端ポートを同じにすることで二つのトンネルが繋がってしまうことを利用しています。
とても便利な方法ではあるのですが、トンネル2本が繋がると完全なセキュリティホールなので、利用には細心にも細心の注意を払ってご利用ください。