OCI NLB経由でプライベートサブネットのComputeインスタンス (VM) に接続する方法

OCI Core Services

初めに

プライベート・サブネットに格納されるOCI Computeインスタンス(VM)に接続する方法は複数あります。踏み台サーバを用意せず、インターネット経由で直接接続する場合、パブリック・サブネット内のネットワーク・ロード・バランサ(NLB)を経由する方法が選択肢の一つとなります。
OCI Architecture Diagram

接続先のインスタンスをパブリック NLB のバックエンドとして追加し、必要なリスナーポート(例:3389、22)を開放すると、NLB を経由してプライベート・サブネット内のインスタンスへ接続することができます。

なお、一つ NLB に複数のバックエンドセットを追加できます。例えば、Windows VM 用に 1 つ、Linux VM 用に 1 つ、各バックエンドセットは独自のリスナー・ポートを使用します。それで共通のNLBを経由し、それぞれのポートでターゲットVMに接続できます。

メリット
✅ 踏み台サーバを立てる必要がないため、コストを節約できる。
✅ 設定方法は簡単で、管理者の一時作業に向く(数分間で設定OK)。
✅ レイヤー4通信であり、可用性が高くて、レイテンシが低い。
✅ OCI Bastionと比べて、セッションタイムアウト(最大3時間)の心配がない。
✅ バックエンドをオフラインに切り替えると、接続の一時停止ができる。
✅ NLB自体は"Always Free"でカバーできるので、無料で使用できる。

  • NLB自体は停止できませんが、バックエンドをオフラインにすることは可能です。使用しないときにオフラインに切り替えることで、踏み台サーバーを一時停止するのと同じような効果が得られます。
  • NLBを経由する方法以外にも、さまざまな手段があります。詳細については、次の記事をご参照ください。プライベートサブネット内の OCI Compute (VM) に接続する方法まとめ

1. 事前準備

1-1. 関連する OCI リソースの作成

タイプ項目コメント
VCNCIDR10.0.0.0/16
パブリック・サブネットCIDR10.0.0.0/24NLB
プライベート・サブネットCIDR10.0.1.0/24接続先サーバ
インターネットGWルート表に追加する
セキュリティ・リスト (パブリック・サブネット用)Ingressソース側のIP, TCP 3389,22接続元の IP アドレスを指定
Egress0.0.0.0/0, 全てのプロトコル
セキュリティ・リスト (プライベート・サブネット用)Ingress10.0.0.0/24, TCP AllNLBからのアクセスを許可
Ingressソース側のIP, TCP 3389,22"Preserve source IP"をチェックする時、バックエンド・サーバがソース側のIPを識別できるので、許可しないとアクセスできない。
Egress0.0.0.0/0, 全てのプロトコル
ルート表 (パブリック・サブネット用)ルールターゲット: インターネットGW
宛先: 0.0.0.0/0
Compute (VM)OSWindows サーバ 2022プライベート IP: 10.0.1.167
OSOracle Linux 9プライベート IP: 10.0.1.213

1-2. OpenSSH のインストール

この例では、OpenSSHを使ってLinux VMに接続します。まだインストールされていない場合、PowerShellを起動して、以下のコマンドでインストールしてください(管理者ユーザで実行)。

コマンド:Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

PS C:\windows\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'


Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent



PS C:\windows\system32>

2. NLBの作成

Networking → Load Balancers → Create Load Balancer
Create load balancer

タイプの選択
レイヤー4の"ネットワーク・ロード・バランサ"を選択し、進んでください。
Select LB type

詳細情報の追加
NLBの名前:適当な名前を入力
可視性タイプ:パブリック (デフォルト)
パブリックIPの割当て:エフェメラル IPv4 (デフォルト)
Choose visibility type

VCNとパブリック・サブネットを指定し、次へをクリックします。
Choose networking

リスナーの構成
リスナー名前:適当な名前を入力
トラフィックのタイプ:TCP
イングレス・トラフィック・ポート:デフォルトは、「任意のポートを使用」となっているが、この例では、Windows リモート・デスクトップ用のポート(3389)を指定する。
Configure listener

バックエンドの選択
バックエンド名:適当な名前を入力する。
"Preserve source IP (ソースIPの保持)":デフォルトはチェックしているので、そのままでOK。
この場合、バックエンド・サーバがクライアント側のIPを識別できるので、許可しないとアクセスできない。セキュリティ・リスト(or NSG)の Ingress ルールには、ソースIPを追加してください。
Choose backends

「バックエンドの追加」をクリックし、接続先のインスタンスを選択します。
Add compute instance backends

ヘルス・チェック・ポリシーの部分で、TCPプロトコルを指定し、次へをクリックします。
Specify health check policy

確認および作成
情報を確認した後、作成ボタンをクリックし、作成を開始します。
Review and create

作成後
ロード・バランサの状態は、"ACTIVE"になったら、ヘルス・チェックは「OK」であることを確認します。

次のステップで、NLBのパブリックIPを使いますので、メモしておいてください。Check LB status

3. Windows VMに接続する

ローカル クライアントから「リモート デスクトップ接続」を起動します。NLBのパブリックIPを入力して、接続をクリックします。
Enter LB's public IP

「このコンピュータへの接続について今後確認しない」にチェックを入れ、「はい」をクリックして続行します。
Click yes to continue

接続先サーバのユーザー名とパスワードを入力します。
Enter username and password

接続先のサーバにログインできました。
Remote desktop connection

4. Linux VMに接続する

4-1. NLBを新規作成する場合

上記のSTEP 2を従って、作成していただければと思います。作成後、STEP 4-3を実施してください。

注意点は以下の2か所だけです:

  • リスナーの構成画面:ポート3389 (RDP)をポート22 (SSH)に変更する。
  • バックエンドの選択画面:接続先サーバをLinuxに指定する。

4-2. 既存NLBを使用する場合

a) バックエンド・セットの追加作成

Networking → Load Balancers → Load Balancer Details → Backend Sets → Create Backend Set
Create backend set

ヘルス・チェック・ポリシーの部分に、TCPプロトコルを指定します。
Enter backend set information and create

b) バックエンドの追加

作成されたバックエンド・セットをクリックし、詳細画面に入ります。
Click created backend set

「バックエンドの追加」をクリックします。
Add backend

接続先サーバを選択し、追加ボタンをクリックします(ポートを 22に指定)。
Choose backend server

追加後、次のように確認できます。
Check backend status

c) リスナーの追加

Networking → Load Balancers → Load Balancer Details → Listeners -> Create Listener
Create listener

リスナーの名前:適当な名前を入力
プロトコル:TCP
ポート:22を指定
バックエンド・セット:追加したBackendSet02を指定
Enter listener information

追加後、次のように確認できます。
Check created listener

4-3. SSHでLinux VMにログイン

PowerShell画面を起動して、次のコマンドでログインします。

コマンドssh -i <private_key> <NLB_Public_IP> -l <username>
例:ssh -i $home\.ssh\id_rsa XXX.XXX.168.36 -l opc

PS C:\Users\opc> ssh -i $home\.ssh\id_rsa XXX.XXX.168.36 -l opc
The authenticity of host 'XXX.XXX.168.36 (XXX.XXX.168.36)' can't be established.
ECDSA key fingerprint is SHA256:<fingerprint>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'XXX.XXX.168.36' (ECDSA) to the list of known hosts.
Last login: Sun Dec  4 11:01:33 2022 from 10.0.0.237
[opc@linux9 ~]$


サマリー
ここまでで、1つのNLBを経由してWindowsとLinuxの2つのインスタンスへの接続を確認できました。設定方法は簡便であり、管理者による一時的な作業に適しています。セキュリティの観点からは、セキュリティ・リスト(またはNSG)で送信元IPアドレスを限定し、NLBのリスナーポートも必要最小限に絞ることを推奨します。

以上

タイトルとURLをコピーしました