LoginSignup
10
7

More than 3 years have passed since last update.

[OCI] 踏み台サーバーからSSHでプライベート・サブネットのインスタンスへの接続と、NATゲートウェイを試してみる

Last updated at Posted at 2020-11-26

目的

プライベートなサブネット内のコンピュートインスタンスはプライベートIPしか持たないため、このインスタンスに対してインターネット経由で作業をおこなう場合には、パブリックなIPを持つ踏み台サーバーを使う必要がある。とは聞いていたものの、これまで踏み台サーバーを使ってプライベート・サブネット内にあるインスタンスに接続したことがなかったので、実際にはどのように接続できるのかを今回試してみました。

また、プライベート・サブネット内のインスタンスの運用に際しては、安全にwebサーバーやデータベースをインストールしてセットアップする必要もあります。その際に利用可能なNATゲートウェイについても確認してみました。

お試し環境

image-20201126103202461.png

  • 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キー]の項目についてのみ記述します。

image-20201124132321110.png

ネットワーキングの構成
[ネットワーク] 既存のVCNを選択
[サブネット] パブリック・サブネットを選択
[パブリックIPアドレス] ”パブリックIPV4アドレスの割当て”を選択

image-20201124133651841.png

SSHキーの追加
公開キーファイルの選択 を選択し、作成した公開鍵(id_rsa.pub)を指定します。作成をクリックしインスタンスを作成します。

image-20201126094947334.png

パブリックIPアドレスと、プライベートIPアドレスを持つ踏み台サーバーが作成されました。

プライベートwebサーバーの作成(private-web01)

同様に、webサーバー用のインスタンスを作成します。踏み台との違いは、プライベート・サブネットでインスタンスを作成し、パブリックなIPアドレスを持たないことです。
image-20201124133741922.png

ネットワーキングの構成
[ネットワーク] 既存のVCNを選択
[サブネット] プライベート・サブネットを選択
[パブリックIPアドレス] ”パブリックIPV4アドレスを割り当てないでください”を選択

image-20201124134005256.png
プライベート・サブネットにプライベートIPアドレスをだけを持つインスタンスが作成されました。

接続テスト

1. クライアントから踏み台サーバーへの接続

sshコマンド

公開鍵認証方式では、サーバーに公開鍵、クライアントに秘密鍵を置いてsshコマンドを使用します。サーバー側には、インスタンス作成時に公開鍵が渡されているので、クライアントからは秘密鍵を指定して踏み台サーバーに接続します。

ssh -i ~/.ssh/id_rsa user@hostname
  • -i オプション
    公開鍵認証で使用する秘密鍵ファイルを指定します。ssh-keygenコマンドでキーペアを作成した際の秘密鍵( デフォルト ~/.ssh/id_rsa など)

  • user@hostname
    user:opc を指定します。
    hostname:踏み台サーバーのホストネーム、またはパブリックIPアドレスを指定します。

コマンド・プロンプトで実行します。
image-20201126095403274.png
接続を継続するか? とのメッセージが表示されるので、yes を入力します。

プロンプトが下記のとおり踏み台サーバー(bastion01)となり、踏み台サーバーへの接続が成功しました。

[opc@bastion01 ~]$ 

2. 踏み台サーバーからプライベートwebサーバーへの接続

続いて、踏み台サーバーからプライベート・サブネットのwebサーバーへの接続を試行します。1.と同様にsshコマンドを使い接続します。今度は踏み台サーバーがクライアントとなるので秘密鍵が必要です。

秘密鍵のコピー

キーペアのあるディレクトリから、秘密鍵を踏み台サーバーにscpコマンドなどでコピーします。

scp ./id_rsa opc@168.138.xxx.xxx:~/.ssh

踏み台サーバーに秘密鍵(id_rsa)がコピーされました。
image-20201124151356126.png

秘密鍵のパーミッション

続いて、プライベートwebサーバーへ接続を試みますが、秘密鍵のパーミッションに関して警告が表示されて接続に失敗します。
image-20201124151945643.png
この対策としては、オーナーのみが読み書き可能なパーミッションに変更することで解決できます。

chmod 600 ~/.ssh/id_rsa
ssh -i ~/.ssh/id_rsa opc@192.168.100.3 ← プライベート・サブネットのwebサーバー

再度、接続を試みると今度は成功しました。
image-20201124153234133.png

以下のプロンプトが表示され、踏み台サーバーからプライベート・サブネットのwebサーバーに接続できたことが確認できました。これにより、自分のPCのコマンド・プロンプトからOCIのプライベート・サブネットにあるwebサーバーを構成することができるようになりました。

[opc@private-web01 ~]$ 

3. プライベートwebサーバーからインターネットへの接続

踏み台を経由して、sshコマンドでプライベートIPしか持たないインスタンスに接続することが確認できましたが、依然 インターネットとは接続できません。このインスタンスに継続してwebサーバーやデータベースをインストールしセットアップしていくことを考えれば、当然インターネットにつながる方が数段便利です。

そのための解決策がNATゲートウェイです。

NAT ゲートウェイ

  • NATゲートウェイはパブリックIPを持たないインスタンスにインターネットへのアクセスを提供するゲートウェイ
  • インスタンスからインターネットへ向けての通信とその応答は受信するが、その逆のインターネットからプライベート・サブネット内のプライベートIPへの接続は許さない
  • NATゲートウェイは仮想ネットワーク(VCN)に紐づいており、ルート表のターゲットにNATゲートウェイを設定しておく必要がある image-20201126104201888.png

インターネットへの接続

左上のナビゲーションメニューから[ネットワーキング]-[仮想クラウド・ネットワーク]を選択し、使用しているVCNをクリックします。左下のリソース項目からNATゲートウェイを選択します。

ここでは既に作成済みのNATゲートウェイが使用可能と表示されています。
image-20201124163122669.png

また、[プライベート・サブネット]のルート表も確認すると、ターゲットにNATゲートウェイが設定されています。
image-20201124163355245.png

この状態で、パブリックIPアドレスを持たないインスタンスからインターネットに繋がるかを確認してみます。
インターネットの接続確認でよく使用される ping 8.8.8.8 に5回 ping を送ってみます。
image-20201124163605913.png
ちゃんと、インターネットに繋がっているようです。これで APサーバーやデータベースのインストール/セットアップもできそうです。ちなみに Nginx のインストールも正常にできました。

sudo yum install -y nginx

トラフィックの遮断

NATゲートウェイの設定で、[トラフィックのブロック]を選択し無効化すれば、インターネットとの接続を遮断することができます。
image-20201124163811118.png

トラフィックのブロックが有効になりました。
image-20201124163920995.png

この状態で先ほどと同じように ping を発しても、インターネットからは応答なしとなります。
image-20201124164032839.png

参考URL

インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識

Oracle Cloud:プライベートサブネットからインターネットへアクセスさせてみてみた

10
7
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
10
7