[OCI] 踏み台サーバーからSSHでプライベート・サブネットのインスタンスへの接続と、NATゲートウェイを試してみる
目的
プライベートなサブネット内のコンピュートインスタンスはプライベートIPしか持たないため、このインスタンスに対してインターネット経由で作業をおこなう場合には、パブリックなIPを持つ踏み台サーバーを使う必要がある。とは聞いていたものの、これまで踏み台サーバーを使ってプライベート・サブネット内にあるインスタンスに接続したことがなかったので、実際にはどのように接続できるのかを今回試してみました。
また、プライベート・サブネット内のインスタンスの運用に際しては、安全にwebサーバーやデータベースをインストールしてセットアップする必要もあります。その際に利用可能なNATゲートウェイについても確認してみました。
お試し環境
- Oracle Cloud(OCI) の仮想ネットワーク(VCN)に踏み台サーバー(図中:bastion01)と、プライベート・サブネット内のコンピュートインスタンス(図中:private-web01)を作成。共にOSはOpenSSLが使えるLinux(Oracle Linux)で構成。
踏み台サーバーはプライベートIPとインターネットからアクセスできるパブリックIPを持ちます。
自分のNote PC(windows10)からはインターネット経由で踏み台サーバーへの接続が可能な状態。踏み台へのアクセスはSSHプロトコルを介しておこないます。TeratermやPutty などのターミナルツールでも可能ですがSSHコマンドを再学習する意味もあり、今回はシンプルにコマンド・プロンプトを使って試してみます。
踏み台からパブリックのIPを持たないインスタンスへの接続が確認できたら、次にNATゲートウェイからインターネットに接続できるかを試してみます。
準備
SSHの主な認証方式としては、パスワード認証方式と公開鍵認証方式がありますが、今回は公開鍵認証方式を使います。公開鍵と秘密鍵の2つの鍵(キーペア)が必要になるので、キーペアがない場合には、ssh-keygenコマンドで作成しておきます。公開鍵はコンピュートインスタンスを作成する際にも指定します。
windows10 のコマンド・プロンプトで作成したものを使用します。(パスフレームは何も指定せず)
C:\Users\SHASAI>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\SHASAI/.ssh/id_rsa): <- 秘密鍵を生成するディレクトリを指定
Created directory 'C:\Users\SHASAI/.ssh'.
Enter passphrase (empty for no passphrase): <- パスフレーズを入力
Enter same passphrase again:
Your identification has been saved in C:\Users\SHASAI/.ssh/id_rsa.
Your public key has been saved in C:\Users\SHASAI/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:tGCQTham6t06zOxgXBZqtjH8jspaggM8JmozPjy402s shasai@SHASAI-JP
The key's randomart image is:
+---[RSA 2048]----+
| +o |
| o+. |
| .= o . |
|o.. o. o . |
|+@ o S |
|@ X . |
|B@=o . |
|BBE=. |
|*B==. |
+----[SHA256]-----+
指定のディレクトリに、秘密鍵(id_rsa)と、公開鍵(id_rsa.pub)が作成されます。
踏み台サーバーの作成(bastion01)
踏み台サーバーをパブリック・サブネットに作成します。ここでは、[ネットワーキングの構成]と[SSHキー]の項目についてのみ記述します。
ネットワーキングの構成
[ネットワーク] 既存のVCNを選択
[サブネット] パブリック・サブネットを選択
[パブリックIPアドレス] ”パブリックIPV4アドレスの割当て”を選択
SSHキーの追加
公開キーファイルの選択 を選択し、作成した公開鍵(id_rsa.pub)を指定します。作成をクリックしインスタンスを作成します。
パブリックIPアドレスと、プライベートIPアドレスを持つ踏み台サーバーが作成されました。
プライベートwebサーバーの作成(private-web01)
同様に、webサーバー用のインスタンスを作成します。踏み台との違いは、プライベート・サブネットでインスタンスを作成し、パブリックなIPアドレスを持たないことです。
ネットワーキングの構成
[ネットワーク] 既存のVCNを選択
[サブネット] プライベート・サブネットを選択
[パブリックIPアドレス] ”パブリックIPV4アドレスを割り当てないでください”を選択
プライベート・サブネットにプライベートIPアドレスをだけを持つインスタンスが作成されました。
接続テスト
1. クライアントから踏み台サーバーへの接続
sshコマンド
公開鍵認証方式では、サーバーに公開鍵、クライアントに秘密鍵を置いてsshコマンドを使用します。サーバー側には、インスタンス作成時に公開鍵が渡されているので、クライアントからは秘密鍵を指定して踏み台サーバーに接続します。
ssh -i ~/.ssh/id_rsa user@hostname
-i オプション
公開鍵認証で使用する秘密鍵ファイルを指定します。ssh-keygenコマンドでキーペアを作成した際の秘密鍵( デフォルト ~/.ssh/id_rsa など)user@hostname
user:opc を指定します。
hostname:踏み台サーバーのホストネーム、またはパブリックIPアドレスを指定します。
コマンド・プロンプトで実行します。
接続を継続するか? とのメッセージが表示されるので、yes を入力します。
プロンプトが下記のとおり踏み台サーバー(bastion01)となり、踏み台サーバーへの接続が成功しました。
[opc@bastion01 ~]$
2. 踏み台サーバーからプライベートwebサーバーへの接続
続いて、踏み台サーバーからプライベート・サブネットのwebサーバーへの接続を試行します。1.と同様にsshコマンドを使い接続します。今度は踏み台サーバーがクライアントとなるので秘密鍵が必要です。
秘密鍵のコピー
キーペアのあるディレクトリから、秘密鍵を踏み台サーバーにscpコマンドなどでコピーします。
scp ./id_rsa [email protected]:~/.ssh
秘密鍵のパーミッション
続いて、プライベートwebサーバーへ接続を試みますが、秘密鍵のパーミッションに関して警告が表示されて接続に失敗します。
この対策としては、オーナーのみが読み書き可能なパーミッションに変更することで解決できます。
chmod 600 ~/.ssh/id_rsa
ssh -i ~/.ssh/id_rsa [email protected] ← プライベート・サブネットのwebサーバー
以下のプロンプトが表示され、踏み台サーバーからプライベート・サブネットのwebサーバーに接続できたことが確認できました。これにより、自分のPCのコマンド・プロンプトからOCIのプライベート・サブネットにあるwebサーバーを構成することができるようになりました。
[opc@private-web01 ~]$
3. プライベートwebサーバーからインターネットへの接続
踏み台を経由して、sshコマンドでプライベートIPしか持たないインスタンスに接続することが確認できましたが、依然 インターネットとは接続できません。このインスタンスに継続してwebサーバーやデータベースをインストールしセットアップしていくことを考えれば、当然インターネットにつながる方が数段便利です。
そのための解決策がNATゲートウェイです。
NAT ゲートウェイ
- NATゲートウェイはパブリックIPを持たないインスタンスにインターネットへのアクセスを提供するゲートウェイ
- インスタンスからインターネットへ向けての通信とその応答は受信するが、その逆のインターネットからプライベート・サブネット内のプライベートIPへの接続は許さない
- NATゲートウェイは仮想ネットワーク(VCN)に紐づいており、ルート表のターゲットにNATゲートウェイを設定しておく必要がある
インターネットへの接続
左上のナビゲーションメニューから[ネットワーキング]-[仮想クラウド・ネットワーク]を選択し、使用しているVCNをクリックします。左下のリソース項目からNATゲートウェイを選択します。
ここでは既に作成済みのNATゲートウェイが使用可能と表示されています。
また、[プライベート・サブネット]のルート表も確認すると、ターゲットにNATゲートウェイが設定されています。
この状態で、パブリックIPアドレスを持たないインスタンスからインターネットに繋がるかを確認してみます。
インターネットの接続確認でよく使用される ping 8.8.8.8 に5回 ping を送ってみます。
ちゃんと、インターネットに繋がっているようです。これで APサーバーやデータベースのインストール/セットアップもできそうです。ちなみに Nginx のインストールも正常にできました。
sudo yum install -y nginx
トラフィックの遮断
NATゲートウェイの設定で、[トラフィックのブロック]を選択し無効化すれば、インターネットとの接続を遮断することができます。
この状態で先ほどと同じように ping を発しても、インターネットからは応答なしとなります。
参考URL
Author And Source
この問題について([OCI] 踏み台サーバーからSSHでプライベート・サブネットのインスタンスへの接続と、NATゲートウェイを試してみる), 我々は、より多くの情報をここで見つけました https://qiita.com/cocotaro0202/items/7b115b108bb9f03b90a6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .