FUJITSU Cloud Service K5
IaaS 設計・構築ガイド(デザインパターン・実装サンプル集)

2階層インターネットアクセス(NAT)パターン


要求事項

階層をもたせたネットワーク構成で、外部ネットワークに接続されていない 内部ネットワーク(※1) からインターネットにアクセスするパターンです。

K5の構成では、外部ネットワークに接続されていない 内部ネットワークからインターネットに到達することができませんが、
外部ネットワークに接続された内部ネットワーク(※2)にNATサーバを構築することにより、インターネットへのアクセスが可能になります。

なお、東日本リージョン2相当のリージョンの場合は、NATサーバを構築せずに仮想ルータでNATする構成も構成可能です。
仮想ルータでNATする構成については、2階層ネットワーク構成 の「ルータ 2つの場合②」をご覧ください。

※1 イメージ図では「内部ネットワーク(private)」
※2 イメージ図では「内部ネットワーク(public)」

対応するK5デザインパターン概要

このパターンでは、NATサーバを構築することで、外部ネットワークに接続されていない内部ネットワークからインターネットへのアクセスを可能にする例を記載します。
ネットワーク構成は、2階層ネットワーク構成 の「ルータ 2つの場合①」の構成と同一です。

■K5のネットワーク
K5のネットワークでは、K5であらかじめ用意された「外部ネットワーク」(インターネットに接続されたネットワーク) と、
自分で作成する「内部ネットワーク」があります。
ネットワーク 内容
外部ネットワーク K5であらかじめ用意された、インターネットに接続されたネットワーク。
内部ネットワーク 自分で作成するネットワーク。
ネットワーク構成やセキュリティの設定で、インターネットに接続可能にも接続不可能にもできる。
セグメントが複数階層に分かれている場合、「内部ネットワーク(private)」は、ネットワーク構成上でインターネットから接続できません。
なお、本資料はネットワーク構成について記載しており、セキュリティ設定については記載しておりません。
セキュリティ設定については、実装サンプルでリンクしている セキュリティグループ/ファイアーウォール併用 パターン等をご覧ください。



構造 (イメージ図)

※public層のみグローバルIPアドレス割り当て可能

※public層のみ、インターネットからの通信を受信可能

※public層/private層とも、インターネットに通信可能
private層からの通信はPublic層のNATサーバを経由する(通信制御はFWおよびSGで実施)

※外部とpublic層、public層とprivate層間それぞれの通信制御を各ネットワーク固有のFWにて設定可能
(設定ミスをおこしにくい)

実装サンプル

シングルAZ構成で、ネットワークを構築する手順を示します。

 (1) 仮想ルータの作成/外部ネットワークのアタッチ

  • 仮想ルータを2つ(外部-public、public-private)を作成します。
  • K5ポータルにログインしIaaSポータルを選択します。
  • 「ネットワーク」⇒「仮想ルータ」画面で、「+」ボタンをクリックします。
  • 「仮想ルータ作成」画面で、以下の項目を入力し、「作成」ボタンをクリックします。
項目
必須
設定値内容
AZ必須"jp-east-1b"システムを設置するアベイラビリティゾーン
AZ1:"jp-east-1a"
AZ2:"jp-east-1b"
仮想ルーター名(外部-public)必須"demo_router_public"適宜設定してください。
仮想ルーター名(public-private)必須"demo_router_private"適宜設定してください。
  • 「仮想ルータ一覧」画面で、作成した仮想ルータ(外部-public)の「アクション」⇒「ゲートウェイ設定」を選択します。
    「ゲートウェイ設定画面」で仮想ルータを接続する「外部仮想ネットワーク」(インターネット側のネットワーク)を選択し、
    「設定」ボタンをクリックします。

 (2) 内部ネットワーク/サブネットの作成

  • ネットワーク画面にてpublic層/private層それぞれのネットワークを作成します。
    • 「ネットワーク」⇒「仮想ネットワーク」画面で、「+」ボタンをクリックします。
    • 「仮想ネットワーク作成」画面で、以下の項目を入力し、「作成」ボタンをクリックします。
タブ項目
必須
設定値
内容
内部ネットワーク
(public層)
内部ネットワーク
(private層)
仮想
ネット
ワーク
AZ必須"jp-east-1b""jp-east-1b"システムを設置するアベイラビリティゾーン
AZ1:"jp-east-1a"
AZ2:"jp-east-1b"
仮想
ネットワーク名
必須"demo_intnet3""demo_intnet4"適宜設定してください。
管理状態必須"UP""UP"適宜設定してください。
サブ
ネット
サブネット作成必須"あり""あり"
サブネット名必須"demo_subnet3""demo_subnet4"適宜設定してください。
仮想ネットワーク
アドレス
必須"192.168.13.0/24""192.168.14.0/24"CIDR形式で入力してください。
ゲートウェイ推奨"あり""あり"
ゲートウェイIP推奨"192.168.13.1""192.168.14.1"必須ではありませんが、設定してください。
※この後に設定する仮想ルータの
  IPアドレスとなります。
サブ
ネット
詳細
DHCP推奨"有効""有効"必須ではありませんが、設定してください。

※この項目は、
 インターネット接続パターンのDHCPに関する説明
 をご覧ください。
IPアドレス
割当プール
任意必要に応じて設定してください。
DNSサーバ推奨"133.162.201.10",
"133.162.201.9"
"133.162.201.10",
"133.162.201.9"
必須ではありませんが、設定してください。
ポータル上では、後から追加できません。
DNSサーバは1行につき1項目設定できます。
※DNSサーバのIPアドレスはリージョン/AZごとに異なります。
  詳細は、機能説明書を参照してください。
追加の
ルート設定
任意Destination:"192.168.14.0/24"
Nexthop:"192.168.13.100"
ゲートウェイIPに設定されるデフォルトのルート以外で接続する宛先を設定します。
以下を設定します。
- CIDR形式の宛先(Destination)
- その宛先へ接続するルータ(Nexthop)

 (3) 外部-public間の仮想ルータにインタフェース追加

  • 「仮想ルーター」画面にて外部-public間の仮想ルータの詳細を開き、インタフェース追加を行います。
項目
必須
設定値内容
サブネット必須"demo_subnet3"内部ネットワーク(public層)を選択してください。
IPアドレス必須"192.168.13.1"内部ネットワーク(public層)作成の際に設定したゲートウェイIPアドレスを設定してください。

 (4) public-private間の仮想ルータにインタフェース追加

  • public-private間の仮想ルータの詳細を開き、インタフェース追加を行います。
項目
必須
設定値内容
内部ネットワーク
(public層)
内部ネットワーク
(private層)
サブネット必須"demo_subnet3""demo_subnet4"内部ネットワーク作成の際に設定したサブネットを選択してください。
IPアドレス必須"192.168.13.100""192.168.14.1"
  • public層側
    内部ネットワーク作成の際に「追加のルート設定」で設定した
    ルータ用のIPアドレスを設定してください。
  • private層側
    内部ネットワーク作成の際に設定したゲートウェイIPアドレスを設定してください。

 (5)NATサーバの作成

  • NATサーバとして使用する仮想サーバを作成します。
    実装手順は インターネット接続パターンの仮想サーバ作成例 を参照してください。
    • 動作検証はCentOS6.8で実施しています。
    • 当資料では、NATサーバに設定されたIPアドレスを192.168.13.3として説明します。

 (6)NATサーバへのIPフォワーディングとIPマスカレード設定

public層ネットワークに配置した仮想サーバに対して、以下の設定を行ってください。
以下、Linuxでの設定を示します。

rootになり、後述のコマンドを実行してください。

  • 設定ファイル(/etc/sysctl.conf)の編集
    • vi /etc/sysctl.conf
      net.ipv4.ip_forward の値を1に変更し、保存する
    • sysctl -p
      設定が反映されていることを確認する

  • iptablesの設定をクリア(設定していなければ不要)
    • iptables -F
    • iptables -t nat -F
    • iptables -X

  • iptablesにNAT(IP MASQUERADE)を設定
    • iptables -t nat -A POSTROUTING -o eth0 -s 192.168.14.0/24 -j MASQUERADE
      -sオプションにはprivate層ネットワーク(CIDR)を指定する

  • iptablesの設定を確認
    • iptables -t nat -nL

  • iptablesの設定を恒久反映(設定の保存とサービスの有効化)
    • service iptables save
    • chkconfig iptables on

 (7) NATサーバへのポート設定

以下のAPIに設定項目(json)を設定し、実行してください。

  • 設定項目(REST API)
項目
設定値
内容
$PORT_ID(生成されたID)NATサーバが使用しているポートID
  • 設定項目(json)
項目
設定値
内容
$PAIR_IP
{\"ip_address\":\"0.0.0.0/1\"},
{\"ip_address\":\"128.0.0.0/1\"},
{\"ip_address\":\"133.162.201.0/24\"}
NATを許可するIPアドレス範囲(※1)

DNSサーバのIPアドレス範囲(※2)

※1 "ip_adress"に"0.0.0.0/0"を設定することはできません。
東日本リージョン1相当のリージョンではAPI実行エラーになります。
また、東日本リージョン2相当のリージョンではエラーにはなりませんが、設定が反映されません。

環境に合わせて、接続先のIPアドレス範囲を具体的に指定してください。
上記サンプルは、"0.0.0.0/0"に相当するアドレス範囲の設定例になります。

※2 NATを許可するIPアドレス範囲にDNSサーバのIPアドレス範囲が包含されていますが、
後者は必ず設定が必要になるため、前者の範囲を狭めた場合にも漏れを無くす目的で定義しています。
(今回の設定であれば後者を省略しても動作します。)

  • 実行API

curl -i -X PUT $NETWORK/v2.0/ports/$PORT_ID -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"port":{"allowed_address_pairs": ['$PAIR_IP']}}'

  • ポートの設定を確認(allowed_address_pairsに値が設定されていることを確認)

curl -s -X GET $NETWORK/v2.0/ports/$PORT_ID -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" | jq .


 (8) 外部-public間の仮想ルータへのルーティング設定

以下のAPIに設定項目(json)を設定し、実行してください。

  • 設定項目(REST API)
項目
設定値
内容
$ROUTER_ID(生成されたID)外部-public間仮想ルータのID
  • 設定項目(json)
項目
設定値
内容
$ROUTES
{\"nexthop\":\"192.168.13.100\",\"destination\":\"192.168.14.0/24\"}
内部ネットワーク(private層)宛ての経路を設定する。
  • 実行API

curl -i $NETWORK/v2.0/routers/$ROUTER_ID -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN " -H "Content-Type: application/json" -d '{"router": { "routes": ['$ROUTES'] }} '

  • 設定の確認

curl -s $NETWORK/v2.0/routers/$ROUTER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN " | jq .

 (9) public-private間の仮想ルータへのルーティング設定

以下のAPIに設定項目(json)を設定し、実行してください。

  • 設定項目(REST API)
項目
設定値
内容
$ROUTER_ID(生成されたID)public-private間仮想ルータのID
  • 設定項目(json)
項目
設定値
内容
$ROUTES
{\"nexthop\":\"192.168.13.3\",\"destination\":\"0.0.0.0/0\"},
{\"nexthop\":\"192.168.13.3\",\"destination\":\"133.162.201.0/24\"}
NATを許可するIPアドレス範囲およびDNSサーバのIPアドレス範囲のNexthopをNATサーバに向ける(※)

※ NATを許可するIPアドレス範囲にDNSサーバのIPアドレス範囲が包含されていますが、
後者は必ず設定が必要になるため、前者の範囲を狭めた場合にも漏れを無くす目的で定義しています。
(今回の設定であれば後者を省略しても動作します。)



  • 実行API

curl -i $NETWORK/v2.0/routers/$ROUTER_ID -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN " -H "Content-Type: application/json" -d '{"router": { "routes": ['$ROUTES'] }} '

  • 設定の確認

curl -s $NETWORK/v2.0/routers/$ROUTER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN " | jq .

 (10) セキュリティ設定 (ファイアーウォール/セキュリティグループ)

  • 仮想サーバを配備する前に、ファイアーウォールやセキュリティグループの設定を行ってください。
  • ファイアーウォールの設定は、2つの仮想ルータ(外部ネットワーク-public、public-private)に、
    それぞれの通信を許可する設定を行ってください。

  • 設定に際しては、以下のデザインパターンをご覧ください。
デザインパターン名称
説明
セキュリティグループ活用セキュリティグループ のみでアクセス制御するパターンです。
セキュリティグループ/
ファイアーウォール併用
セキュリティグループ と ファイアーウォール を組み合わせたパターンです。
機能別セキュリティグループ機能別にアクセス制限をかけるパターンです。

curlコマンドやyumコマンドで、NATを許可した宛先に接続できることを確認してください。

メリット・効果

  • 東日本リージョン1相当のリージョンでも、private層の仮想サーバからインターネットにアクセスできます。
  • ファイアウォール、セキュリティグループを制御することで、DBサーバにパッチをあてる必要がある場合など、必要な時だけインターネットにアクセス可能です。
  • セグメント間の通信で、ファイアーウォールによるアクセス制御をかけることができます。
  • イメージ図のprivate層とpublic層のように、仮想ルータを分けられる (=ファイアーウォールを分けられる) ため、構築時の操作ミスを防ぎます。
  • private層の仮想サーバにはグローバルIPアドレスを割り当てられないため、同じく構築時の操作ミスを防ぎます。

注意事項

  • 本パターンは2017年12月時点のK5(IaaS) 東日本リージョン2 で動作検証しています。
    実装サンプルは東日本リージョン1での構築を想定し、AZとDNSサーバの設定を置き換えています。
    (東日本リージョン2では仮想ルータでNATする構成が可能なため)

  • WindowsServerやLinuxOS上のルーティング設定(NAT)に関しては、K5のサポート対象外となります。
    利用者責任のもとで構築を行ってください。

    本実装サンプルのようなIPマスカレードを使用したNAT構成は
    一般的な手法として事例や情報が多いことから、NATサーバはLinuxOSでの構築を推奨します。

  • ネットワーク構成は自由度が高いため、様々な構成を実現できますが、
    ファイアーウォール、セキュリティグループにて通信の制御は必ず行ってください。

その他

特にありません

関連資料

  • FUJITSU Cloud Service K5 マニュアル
    http://jp.fujitsu.com/solutions/cloud/k5/document/
    • サービスご紹介資料
    • IaaS 機能説明書
    • IaaS サービスポータルユーザーズガイド
    • IaaS APIユーザーズガイド
    • IaaS APIリファレンスマニュアル
    • IaaS HEATテンプレート解説書

(2017年12月検証)