0
0

SSHポートフォワーディングを用いてのサーバ中継方法

Last updated at Posted at 2024-06-04

投稿背景

Webアプリの稼働環境(Cloud)から、データセンターのサーバ(DBやSOAP通信先)を
覗きに行きたいが、Webアプリ環境→データセンターの直接の通信が
禁じられている環境制約の案件に遭遇した

大真面目に中継サーバにRESTAPIを用意してそこから中継…というようなことを
議論していたので、投稿を決意。

SSHポートフォワーディングとは

端的に言うと、
中継用サーバを介し、接続元ホストが特定のポートに接続すると、
そのポートの目的地として設定されたリモートホスト(の特定ポート)に接続を中継する機能である。
中継用サーバから見える範囲であれば、接続元ホストからそのリモートホストに直接通信できなくても問題ない。

背景で述べたように、
Webアプリの環境から特定NW、サーバ間の通信が業務要件などにより出来ない場合がある。
そういった場合、中継サーバを立てて通信を中継する必要がある。
SSHポートフォワーディングはその中継を実現する方法の一つである。

サーバの用意

クラウドで適当なサーバを2つ用意します。

  • test 踏み台サーバ
  • test2 接続したいサーバ、今回のテスト用にApache-Webサーバをインストール済み

image.png

セキュリティ設定

接続したいサーバのポート80を踏み台サーバからのみ接続できるようにネットワーク設定。

image.png

接続確認

接続したいサーバ= 51.103.218.23:80にcurlコマンド実行。

C:\Users\ryode>curl 51.103.218.23:80
curl: (28) Failed to connect to 51.103.218.23 port 80 after 21032 ms: Couldn't connect to server

SSHポートフォワード

TeraTermを使い、まずSSHで踏み台サーバに接続する。

設定→SSH転送を選択し、ポートフォワードの設定を行う。
以下設定だと、ローカルホストのポート30に接続すれば、踏み台サーバから見える接続したいサーバのポート80に通信が中継される。

image.png

その後、ローカルホストのポート30に対してcurlコマンドを実行すると、反応が返ってくる。
(当然ローカルホストの30でWebサーバなど動かしていない。)

C:\Users\ryode>curl localhost:30

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
省略
</html>

SSHポートフォワード コマンド

sshコマンドを使うならこんな感じ。
(ローカルのポート9876にアクセスすると、51.103.218.23:80に接続が中継される。)

PS C:\Users\ryode> ssh -L 9876:51.103.218.23:80 azureuser@51.103.209.170 -i "C:\Users\ryode\.ssh\azure-test.pem"

結果
image.png

まとめ

直接接続できないサーバとの通信を目論む際は、
プロキシーだったりSSHポートフォワードなりを使いましょう。
(主要な解決策は上記だと思いますが、何か意見などあればコメント求む)

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