OCIのNAT Gatewayとは?プライベートサブネットから安全にアウトバウンド通信する仕組みと設定方法

Oracle

Oracle Cloud Infrastructure(OCI)では、プライベートサブネットに配置したComputeインスタンスなどからインターネットへアウトバウンド通信を行いたい場合、NAT Gatewayを利用できます。NAT Gatewayを使うと、各インスタンスへパブリックIPアドレスを割り当てなくても、インターネットへの接続を開始し、その応答を受信できます。

一方で、インターネット側からNAT Gatewayを経由してプライベートインスタンスへ新規接続を開始することはできません。このため、OSアップデート、外部APIへのアクセス、パッケージのダウンロードなど、外向きの通信だけが必要なサーバーとの相性が良い仕組みです。[参照:Oracle公式 NAT Gateway]

OCIのNAT Gatewayでプライベートサブネットからインターネットへ接続できる

OCIのNAT Gatewayは、VCN内にあるパブリックIPを持たないリソースへインターネットへのアウトバウンド接続手段を提供するマネージドサービスです。

Oracle公式ドキュメントでも、プライベートサブネット内のComputeインスタンスはNAT Gatewayを利用することでインターネットへの接続を開始でき、その応答を受け取れると説明されています。

つまり、プライベートサブネットのサーバーから外部WebサイトやAPIへアクセスしたい場合、NAT Gatewayは代表的な選択肢です。

NAT Gatewayを使ってもインターネット側から直接接続されない

NAT Gatewayの重要な特徴は、通信を開始できる方向が基本的にプライベート側からインターネット側へ限定されることです。

例えばプライベートサブネットのComputeからhttps://example.comへHTTPS通信を開始すると、NAT Gatewayが送信元アドレスを変換してインターネットへ送ります。その通信に対するレスポンスはComputeへ戻されます。

しかしインターネット上の第三者が、NAT GatewayのパブリックIPへ接続して、そのままプライベートComputeへ新規セッションを開始することはできません。Oracle公式も、NAT Gatewayではインターネットから開始されたインバウンド接続を許可しないと説明しています。[参照:Oracle NAT Gatewayの動作]

プライベートインスタンスにはパブリックIPが不要

通常、インターネットへ直接接続するComputeにはパブリックIPを割り当てる方法があります。しかしセキュリティ上、バックエンドサーバーやデータベースなどへパブリックIPを持たせたくないケースは多くあります。

NAT Gatewayを利用すれば、Computeインスタンス側はRFC1918のプライベートIPv4アドレスだけを持った状態でインターネットへアクセスできます。

NAT Gateway自身がアウトバウンド通信時の送信元としてパブリックIPを使用し、応答を元のプライベートインスタンスへ戻します。OCIでは新しいNAT Gatewayへ新規パブリックIPを割り当てるほか、既存の予約済みパブリックIPを指定することもできます。

NAT Gatewayを作成しただけでは通信できない

OCIでNAT Gatewayを作成しても、それだけでプライベートサブネットからインターネットへ通信できるわけではありません。対象サブネットのルート表へ、インターネット向け通信をNAT Gatewayへ送るルートルールを追加する必要があります。

Oracle公式の標準的な設定では、次のようなルートルールを設定します。

設定項目 設定例
Target Type NAT Gateway
Destination CIDR Block 0.0.0.0/0
Target 作成したNAT Gateway

0.0.0.0/0はIPv4の全宛先を意味するため、ほかにより具体的なルートがないインターネット向け通信がNAT Gatewayへ送られます。[参照:Oracle NAT Gatewayのルーティング設定]

実際の通信経路を具体例で見る

例えばVCN内に10.0.1.0/24というプライベートサブネットがあり、Computeインスタンスへ10.0.1.10というプライベートIPだけを割り当てているとします。

そのサブネットのルート表へ0.0.0.0/0 → NAT Gatewayを設定すると、Computeがインターネットへ接続するときの通信経路は、おおむね「Compute → NAT Gateway → Internet」となります。

インターネットから返ってきた応答はNAT Gatewayが元のセッションを識別し、10.0.1.10へ返します。そのためCompute自身がインターネット公開用のパブリックIPを持つ必要はありません。

OSアップデートやパッケージ取得でよく使われる

NAT Gatewayの典型的な用途は、外部から直接アクセスされたくないサーバーがインターネットから必要なデータだけ取得するケースです。

例えばOracle LinuxやUbuntuのComputeでdnf updateapt updateを行う場合、外部リポジトリへアクセスする必要があります。NAT GatewayがあればプライベートComputeからこうした通信を開始できます。

ほかにもGitHubからソースコードを取得する、外部SaaSのAPIへアクセスする、証明書失効情報を取得するなど、アウトバウンドだけ必要な処理に適しています。

Internet Gatewayとの違い

Internet GatewayもOCIからインターネットへ接続するための機能ですが、NAT Gatewayとは目的が異なります。

項目 NAT Gateway Internet Gateway
主な対象 プライベートリソース パブリックリソース
インスタンスのパブリックIP 不要 一般に必要
アウトバウンド開始 可能 可能
インターネットからの新規接続 不可 ルート・セキュリティ設定次第で可能

Webサーバーを一般公開したい場合はInternet Gatewayが適しています。一方、バックエンドサーバーがアップデートなどのためだけに外へ通信したい場合はNAT Gatewayが適しています。

Service Gatewayとの違いも重要

NAT Gatewayと混同されやすい機能にService Gatewayがあります。Service Gatewayは、Object StorageなどOracle Services Network上の対応OCIサービスへ、一般のインターネットを経由せずにアクセスするための仕組みです。

一方、NAT GatewayはGitHub、外部Webサイト、第三者APIなど一般のインターネット上にあるサービスへのアウトバウンド通信に利用できます。

そのため実際のVCNでは「OCIサービス向けはService Gateway」「一般インターネット向けはNAT Gateway」とルートを分ける構成も一般的です。

NSGやSecurity ListでもEgressを許可する必要がある

ルート表へNAT Gatewayを設定しても、Network Security Group(NSG)やSecurity Listによってアウトバウンド通信が拒否されていれば接続できません。

例えばHTTPSによる外部APIへの通信なら、TCP 443を宛先として許可するEgressルールが必要です。DNS解決が必要な場合には、そのための通信も正常に行える構成になっている必要があります。

接続できない場合は「NAT Gatewayが存在するか」だけでなく、ルート表、NSG、Security List、DNS設定を順番に確認すると原因を切り分けやすくなります。

NAT GatewayはTCP・UDP・ICMP pingをサポートする

Oracle公式ドキュメントによると、OCI NAT GatewayはTCP、UDP、ICMP pingの通信をサポートしています。

そのためHTTP・HTTPSだけでなく、さまざまなアウトバウンド通信に利用できます。ただしアプリケーション側のプロトコルや宛先側のファイアウォール設定などによっては、別途調整が必要です。

またOracle公式では、単一の宛先アドレス・ポートへの同時接続数について上限も案内されています。非常に大量の通信を行うシステムでは、最新のサービス制限を確認して設計することが重要です。[参照:Oracle NAT Gateway仕様]

複数のプライベートサブネットで同じNAT Gatewayを利用できる

同じVCN内であれば、複数のプライベートサブネットから一つのNAT Gatewayを利用できます。Oracle公式も、一般的にはVCNにつき一つのNAT Gatewayで十分としており、各サブネットのルート表によって利用するかどうかを制御できます。

例えばApplicationサブネットとBatchサブネットの双方でインターネットへのアウトバウンド通信が必要なら、それぞれのルート表で同じNAT Gatewayをターゲットにできます。

ただし特定サブネットごとに異なる送信元パブリックIPを使い分けたいなどの要件がある場合は、複数NAT Gatewayの利用を検討することがあります。

NAT Gatewayから出るパブリックIPを固定することもできる

外部サービス側で送信元IPアドレスの許可リストを設定する場合、NAT Gatewayの出口IPを固定したいことがあります。

OCIではNAT Gateway作成時にNetworkingサービスが新しいパブリックIPを割り当てることも、既存のReserved Public IPを指定することもできます。

例えば外部の決済API側で「203.0.113.xからの通信だけ許可」と設定する運用なら、予約済みパブリックIPをNAT Gatewayへ割り当てておくと管理しやすくなります。

別VCNからそのNAT Gatewayを共用できるとは限らない

OCIのNAT Gatewayには利用範囲に制約があります。Oracle公式によると、NAT Gatewayは基本的にそのGatewayが属するVCN内のリソースによって利用されます。

VCN Peeringで接続された別VCNのリソースから、そのNAT Gatewayをそのまま共用することはできません。またFastConnectやSite-to-Site VPNで接続されたオンプレミス環境から、そのVCNのNAT Gatewayをインターネット出口として利用することもできません。

複数VCNやオンプレミスを含む集中型インターネット出口を設計する場合は、OCIのトランジットルーティングやファイアウォールなど別のネットワーク構成を検討する必要があります。[参照:Oracle NAT Gatewayの制約]

NAT GatewayはマネージドサービスなのでNATインスタンス管理が不要

NAT Gatewayが登場する以前は、ComputeインスタンスをNAT用サーバーとして構築するNAT Instance方式も使われていました。

NAT InstanceではOSアップデート、冗長化、障害監視、性能管理などを利用者側で行う必要があります。一方、OCIのNAT GatewayはNetworkingサービスによる高可用なマネージドNAT機能です。

Oracle公式でもNAT Gatewayを信頼性と高可用性を備えたVCN向けNATソリューションとして案内しているため、特別な理由がなければマネージドNAT Gatewayの利用がシンプルです。

NAT Gatewayを使った構成例

例えばWebアプリケーションを構築し、ロードバランサーだけ外部公開し、アプリケーションサーバーをプライベートサブネットへ配置するとします。

アプリケーションサーバーにはパブリックIPを付与せず、外部から直接アクセスできない状態にします。一方、サーバー自身は外部APIの呼び出しやOSアップデートが必要なので、ルート表で0.0.0.0/0をNAT Gatewayへ向けます。

この構成ならインターネットからアプリケーションサーバーへ直接接続させずに、サーバーから必要な外部通信だけ開始できるため、公開範囲を抑えたネットワーク設計ができます。

トラブル時に確認したいポイント

NAT Gatewayを構成してもインターネットへ接続できない場合は、次の項目を順番に確認すると分かりやすくなります。

確認項目 チェック内容
NAT Gateway 作成済みで利用可能な状態か
ルート表 0.0.0.0/0 → NAT Gatewayがあるか
サブネット 対象ルート表が正しく関連付けられているか
NSG 必要なEgress通信を許可しているか
Security List Egressルールで遮断していないか
DNS ホスト名を正常に名前解決できるか
宛先 外部サービス側で接続元を拒否していないか

Oracle公式チュートリアルでも、NAT Gateway作成後にプライベートサブネットのルート表へ0.0.0.0/0をNAT Gatewayへ向けるルールを追加して、インターネット接続を実現しています。[参照:Oracle公式 NAT Gatewayチュートリアル]

まとめ|OCIのNAT Gatewayならプライベートサブネットからアウトバウンド通信できる

OCIではNAT Gatewayを利用することで、プライベートサブネットにあるパブリックIPなしのComputeインスタンスから、一般のインターネットへアウトバウンド通信を開始できます。通信に対する応答は受信できますが、インターネット側から新規接続を開始することはできません。

設定時にはNAT Gatewayを作成するだけでなく、対象サブネットのルート表へ通常0.0.0.0/0 → NAT Gatewayというルールを追加し、NSGやSecurity Listでも必要なEgress通信を許可します。

外部WebサイトやAPIへの通信にはNAT Gateway、Object Storageなど対応OCIサービスへのOracleネットワーク内通信にはService Gateway、外部から公開するサーバーにはInternet Gatewayというように役割を分けて設計すると、OCIのプライベートサブネットを安全かつ実用的に運用しやすくなります。

コメント

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