DEX・NATパターン#

本構成はFJcloud-O 東日本/西日本リージョン3向けとなります。

はじめに#

本資料は、「東日本3/西日本3リージョンと従来のリージョンとの機能比較」 → 「DEX(旧プライベート接続)」 に記載された、以下の回避策に関する手順を記載しています。
①仮想サーバで通信経路を振り分け
②NATサーバで通信経路を振り分ける

詳細については、上記「リージョン比較資料」をご覧ください。

要求事項1#

  • 「IaaSの仮想サーバ」は、オンプレ経由でインターネットにアクセスしたい。
    例:全サーバの「インターネットへのアクセス履歴」を「オンプレ側のプロキシサーバ」で管理しているため

  • しかし、「共通ネットワークサービス(例:WSUS)」も利用したい。

要求事項2#

上記に加えて、

  • 仮想サーバを構築する毎に、以下の設定を行う手番を減らしたい。
    • バックLANへの接続
    • ルーティング設定

DEX接続時の注意事項#

仮想サーバが「外部ネットワーク」経由で、インターネットへアクセスする場合は問題ありません。

image

しかし「DEX:オンプレ」経由で、インターネットへアクセスする場合は考慮が必要です。

image

  • インターネットへアクセスするデフォルトルートを「DEX側」に変更した場合、「外部ネットワーク」へのアクセスは不可となります。

  • 「外部ネットワーク」へアクセスできない場合、以下のような「共通ネットワークサービス」を利用できません。

    • OSのライセンス認証:KMS
    • アップデート適用:WSUSやyum など

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

「要求事項1」を満たす構成です。

  • 仮想サーバで通信経路を振り分け
    • 「業務用サーバ」にポート(IPアドレス)を追加、「DEX側のルーティング」を優先するよう設定
    • 「共通ネットワークサービス」へアクセスできるよう、スタティックルーティングを追加

構造1#

「バックLANパターン」を参考に構築後、以下の変更を実施してください。

image

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

「要求事項2」を満たす構成です。

  • NATサーバで通信経路を振り分け
    • 「内部ネットワークA0」のサブネットに、スタティックルーティングを追加
    • 「共通ネットワークサービス」へアクセスするため、「NATサーバ」を追加

構造2#

本構築手順について、この後「実装サンプル」で説明します。

image

  • 「構造1」に、以下を加えた構成となります。
    • 「内部ネットワークA0」にスタティックルーティングを追加
    • 「サーバB」を追加
    • 「NATサーバ」を追加/環境構築

実装サンプル#

1. 設定の概要#

「西日本リージョン3」を「オンプレ環境」に見立て検証します。
なお「西日本リージョン3」は構築済とします。

  • 「西日本リージョン3」に仮想ネットワーク・仮想ルータを作成、外部ネットワーク接続
  • 「西日本リージョン3」に「Proxyサーバ」を配備

実装サンプルの概要は、以下のとおりです。

  • 「東日本リージョン3」に仮想ネットワーク・仮想ルータを作成、外部ネットワーク接続
  • 「東日本リージョン3」と「西日本リージョン3」を、「DEX:リージョン間接続」で接続
  • 「東日本リージョン3」に「サーバB:業務用」「NATサーバ」を配備
  • 「東日本リージョン3」から「共通ネットワークサービス」にアクセスできるよう、「NATサーバ」を設定
  • 「サーバB」は「西日本リージョン3」経由で、インターネットにアクセス

image

本実装サンプルでは、以下の設定値例を使用します。

  • 注意:「名称」や「IPアドレス」などの設定値例は、本ドキュメント公開用に修正しています。
    (検証時の値とは異なります)

(1)内部ネットワーク作成
仮想ネットワーク・仮想ルータを作成します。
以下は事前に作成済とします。

  • SSL-VPN接続用の「内部ネットワークC」
  • DEX接続先「西日本リージョン3」の「内部ネットワークD」

「内部ネットワークA」作成時、「サブネット詳細」にて「追加のルート設定」を実施します。

ネットワーク ネットワーク名称 サブネット名称 サブネット ゲートウェイIP 用途
内部ネットワークA east3-CDP-NW20 east3-CDP-SN20 192.168.20.0/24 192.168.20.1 DEX接続用
内部ネットワークB east3-CDP-NW10 east3-CDP-SN10 192.168.10.0/24 192.168.10.1 共通ネットワークサービス接続用
サブネット詳細 DHCP IPアドレス割当プール DNSサーバ 追加のルート設定 備考
内部ネットワークA 有効 Destination:0.0.0.0/0
Nexthop:192.168.20.1
デフォルトルート追加は省略可
Destination:133.162.97.35/32
Nexthop:192.168.20.3
WSUSへのルート追加は必須
内部ネットワークB 有効
ルータ ルータ名称 外部ネットワーク サブネット接続 ゲートウェイIP 用途
ルータA east3-CDP-RT01 east3-CDP-SN20 192.168.20.1 DEX接続用
ルータB east3-CDP-RT10 接続 east3-CDP-SN10 192.168.10.1 共通ネットワークサービス接続用

仮想ネットワーク・仮想ルータを作成後、「DEX」を申請します。

(2)セキュリティグループ作成
実際の運用においては、「セキュリティグループ活用」を参考に、適切なセキュリティグループを設定してください。

  • SG10
    内部ネットワークB用:共通ネットワークサービス接続側
No. ルール 方向 オープンポート ポート 接続先 CIDR
1 カスタムTCPルール 送信 ポート 1-65535 CIDR 133.162.0.0/16
2 カスタムUDPルール 送信 ポート 1-65535 CIDR 133.162.0.0/16
  • SG20
    内部ネットワークA用:DEX側
No. ルール 方向 オープンポート ポート 接続先 CIDR
1 カスタムTCPルール 送信 ポート 1-65535 CIDR 0.0.0.0/0
2 カスタムTCPルール 受信 ポート 1-65535 CIDR 192.168.20.0/24
3 カスタムUDPルール 送信 ポート 1-65535 CIDR 133.162.0.0/16
4 カスタムUDPルール 受信 ポート 1-65535 CIDR 192.168.20.0/24

(3)ファイアーウォール作成
ルータB用:共通ネットワークサービス接続側
実際の運用においては、適切な値を設定してください。

  • ファイアーウォール
ルータ ファイアーウォール名
ルータB FW_RT10
  • ポリシー
ルータ ポリシー名
ルータB policy_RT10
  • ルール
No. ルール名 allow/deny プロトコル 送信元IPアドレス 送信元ポート 宛先IPアドレス 宛先ポート
1 UDP_RT10_allow allow udp 192.168.10.0/24 133.162.0.0/16
2 TCP_RT10_allow allow tcp 192.168.10.0/24 133.162.0.0/16

(4)仮想サーバ作成
仮想サーバは、まず「内部ネットワークA」のみに接続します。

  • 仮想サーバ
仮想サーバ OS サーバ名称 ポート名 IPアドレス 用途
サーバB Windows server 2012 R2 east3-CDP-SV03 (自動生成) 192.168.20.2 業務用
NATサーバ Red Hat Enterprise Linux 8.x 64bit (English) east3-CDP-NT01 (自動生成) 192.168.20.3 共通ネットワークサービス用
  • アクセスとセキュリティ
仮想サーバ キーペア セキュリティグループ
サーバB SG20
NATサーバ east3-CDP-NT01_keypair SG10、SG20

仮想サーバを配備する時点では、ポートを1つだけ割り当てます。
「NATサーバ」のポートは、サーバ作成後に追加します。
「踏み台サーバ」は、「バックLANパターン」の手順を参考に、接続してください。

(5)NATサーバのセットアップ
「NATサーバ」に「IPフォワーディング」と「IPマスカレード」を設定します。

  • サーバにポート(IPアドレス)を追加+「内部ネットワークB」に接続
  • ポートのセキュリティグループを変更
  • NATサーバのルーティング設定変更
  • NAT機能の設定

(6)Windows業務用サーバのセットアップ
「サーバB」に「WSUS」を設定します。

ここからは、作成手順を説明します。

2. 内部ネットワーク作成#

仮想ネットワーク・仮想ルータを作成します。
作成後「DEX」を申請し、「東日本リージョン3」と「西日本リージョン3」を接続します。

  • 「内部ネットワークA」を作成

    • IaaSポータル画面の場合:「サブネット詳細」にて追加ルートを設定
      • 「追加のルート設定」の「+」をクリック
      • 「WSUSへのルート追加」は必須、「デフォルトルート追加」は任意
  • 「内部ネットワークB」を作成

    • 追加ルート設定は不要
  • 「ルータA」を作成

  • 「ルータA」に「内部ネットワークA」を接続

    • IaaSポータル画面の場合:仮想ルータ一覧 → 「仮想ルータ名」のリンク → 「インターフェース」の「+」をクリック
  • 「ルータB」を作成

  • 「ルータB」に「外部ネットワーク」を接続

    • IaaSポータル画面の場合:仮想ルータ一覧 → 「仮想ルータ名」の「アクション」 → 「編集」をクリック
  • 「ルータB」に「内部ネットワークB」を接続

  • DEX申請
    申請時に、以下の情報が必要となります。

    • 契約番号
    • 「東日本リージョン3」の「プロジェクトID」と「DEX接続する仮想ルータID」
    • 「西日本リージョン3」の「プロジェクトID」と「DEX接続する仮想ルータID」

3. セキュリティグループ作成#

内部ネットワークポート「A」「B」用の、セキュリティグループ・セキュリティグループルールを作成します。
実際の運用においては、 セキュリティグループ活用 を参考に、適切なセキュリティグループを設定してください。

  • セキュリティグループ名

    • 「SG10」:内部ネットワークB用:共通ネットワークサービス接続側
    • 「SG20」:内部ネットワークA用:DEX側
  • 「SG10」ルール追加

    • 送信:「共通ネットワークサービス」への「TCP」「UDP」を全て許可
  • 「SG20」ルール追加

    • 送信:全ての宛先への「TCP」を全て許可
    • 受信:「内部ネットワークA」からの「TCP」を全て許可
    • 送信:「共通ネットワークサービス」への「UDP」を全て許可
    • 受信:「内部ネットワークA」からの「UDP」を全て許可

4. ファイアーウォール作成#

「内部ネットワークB」用の仮想ルータに、ファイアーウォールを作成します。
現在「IaaSポータル画面」は利用制限があるため、APIで操作します。

(1)ファイアーウォールルール作成
機能制限あり、1ルールずつAPIを実行してください。

  • udp用
項目 設定値例 内容
$ENABLED "true" 有効/無効区分
現在機能制限あり、「有効」のまま変更不可
$NAME "UDP_RT10_allow" ルール名
$ACTION "allow" アクション(allow/deny)
$SOURCE_IP "192.168.10.0/24" 発信元IPアドレス(IPv4アドレスまたはCIDR)
$DESTINATION_IP "133.162.0.0/16" 受信(宛先)IPアドレス(IPv4アドレスまたはCIDR)
$PROTOCOL "udp" プロトコル
  • tcp用
項目 設定値例 内容
$ENABLED "true" 有効/無効区分
現在機能制限あり、「有効」のまま変更不可
$NAME "TCP_RT10_allow" ルール名
$ACTION "allow" アクション(allow/deny)
$SOURCE_IP "192.168.10.0/24" 発信元IPアドレス(IPv4アドレスまたはCIDR)
$DESTINATION_IP "133.162.0.0/16" 受信(宛先)IPアドレス(IPv4アドレスまたはCIDR)
$PROTOCOL "tcp" プロトコル
  • API

    # ファイアーウォールルール作成
    curl -s $NETWORK/v2.0/fw/firewall_rules \
    -X POST \
    -H "X-Auth-Token: $OS_AUTH_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
    		"firewall_rule": {
    			"enabled": '$ENABLED',
    			"name": "'$NAME'",
    			"action": "'$ACTION'",
    			"source_ip_address":"'$SOURCE_IP'",
    			"destination_ip_address":"'$DESTINATION_IP'",
    			"protocol": "'$PROTOCOL'"
    		}
        }' | jq .
    

  • 「ファイアーウォールルール一覧」確認API

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

(2)ファイアーウォールポリシー作成
機能制限あり、「ルールは未指定:空」でAPIを実行してください。

項目 設定値例 内容
$NAME "policy_RT10" ポリシー名
# ファイアーウォールポリシー作成
curl -s $NETWORK/v2.0/fw/firewall_policies \
-X POST \
-H "X-Auth-Token: $OS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
		"firewall_policy": {
			"name": "'$NAME'"
		}
    }' | jq .
  • 「ファイアーウォールポリシー一覧」確認API
    curl -s $NETWORK/v2.0/fw/firewall_policies -X GET -H  "X-Auth-Token: $OS_AUTH_TOKEN" | jq .
    

(3)ファイアーウォールポリシーにルールを追加
機能制限あり、1回のAPI実行につき「1ルールのみ追加」となります。
1回のAPI実行で、複数ルールを追加することはできません。
なおルールは更新できないため、変更する場合は「削除」→「追加」の操作となります。

  • 「ポリシーID」「ルールID」は、上記確認APIの出力結果から取得
  • 「TCP_RT10_allow」 → 「UDP_RT10_allow」の順に、APIを2回実行
項目 設定値例 内容
$FWP_ID "xxxxx" ポリシーID
$FWR_ID "xxxxx" ルールID
$INSERT_AFTER "" 指定したルールIDの後に追加
# ファイアーウォールポリシーにルール追加
curl -s $NETWORK/v2.0/fw/firewall_policies/$FWP_ID/insert_rule \
-X PUT \
-H "X-Auth-Token: $OS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
		"firewall_rule_id": "'$FWR_ID'",
		"insert_after": "'$INSERT_AFTER'"
    }' | jq .
  • 上記の補足:項目「$INSERT_AFTER」について

    • 値が空「""」の場合、一番上に追加される
    • 挿入場所を指定する場合、設定値に「"ルールID"」を設定
    • なお、挿入場所を「指定したルールIDの前に追加」したい場合、APIを以下のように変更

      • 変更前

        "insert_after": "'$INSERT_AFTER'"
        

      • 変更後

        "insert_before": "'$INSERT_AFTER'"
        

  • 「ファイアーウォールポリシー一覧」確認API

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

(4)ファイアーウォール作成

  • 「ポリシーID」は、上記確認APIの出力結果から取得
  • 「仮想ルータID」の取得
    • IaaSポータル画面の場合:仮想ルータ一覧 → 「仮想ルータ」のリンクをクリック
項目 設定値例 内容
$NAME "FW_RT10" ファイアーウォール名
$FWP_ID "xxxxx" ポリシーID
$ROUTER_ID "xxxxx" 仮想ルータID
# ファイアーウォール作成
curl -s $NETWORK/v2.0/fw/firewalls \
-X POST \
-H "X-Auth-Token: $OS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{
		"firewall": {
			"name": "'$NAME'",
			"firewall_policy_id": "'$FWP_ID'",
			"router_ids": [
				"'$ROUTER_ID'"
			]
		}
    }' | jq .
  • 「ファイアーウォール一覧」確認コマンド
    curl -s $NETWORK/v2.0/fw/firewalls -X GET -H  "X-Auth-Token: $OS_AUTH_TOKEN" | jq .
    

5. 仮想サーバ作成#

「サーバB」「NATサーバ」は、「内部ネットワークA」に接続します。
「NATサーバ」へのポート(IPアドレス)追加は、次の手順で追加します。

6. NATサーバを内部ネットワークBへ接続#

「NATサーバ」にポート(IPアドレス)を追加します。

  • サーバにポート(IPアドレス)を追加+「内部ネットワークB」に接続

    • IaaSポータル画面の場合:仮想サーバ一覧 → 「仮想サーバ名」のリンク → 「ポート」の「+」をクリック
    • 「内部ネットワークB」を選択
    • 「プライベートIPアドレス」に「192.168.10.3」を指定
  • ポートのセキュリティグループを変更

    • IaaSポータル画面の場合:上記の続き、追加されたポートの「アクション」 → 「セキュリティグループ設定」をクリック
    • 初期設定値「default」を解除、「SG10」を選択
    • 「仮想サーバ詳細画面」をリロードして、設定内容が反映されていることを確認

7. NATサーバのルーティング設定変更#

(1)「踏み台サーバ」から「NATサーバ」にログインします。

(2)「rootユーザ」に変更し、ルーティング設定を変更します。

  • 追加ポート:eth1の「ネットワークインタフェース設定ファイル」を作成
    eth1の設定ファイル「ifcfg-eth1」が存在しないことを確認

    $ sudo su -
    # cd /etc/sysconfig/network-scripts/
    # ls -l |grep ifcfg
    -rw-r--r--. 1 root root   126 Apr  3  2017 ifcfg-eth0
    -rw-r--r--. 1 root root   254 Aug 24  2018 ifcfg-lo
    

  • eth0の設定ファイルをコピー+修正

    # cp -Rp ifcfg-eth0 ifcfg-eth1
    # vi ifcfg-eth1
    

  • ifcfg-eth1の修正方法
    「内部ネットワークB」はデフォルトルートにしない

    DEVICE="eth1"   [eth0][eth1]に変更
    DEFROUTE="no"  末尾に追加
    PEERDNS="no"   末尾に追加
    

  • ifcfg-eth1の修正後

    # cat ifcfg-eth1
    DEVICE="eth1"
    BOOTPROTO="dhcp"
    ONBOOT="yes"
    TYPE="Ethernet"
    USERCTL="yes"
    PEERDNS="yes"
    IPV6INIT="no"
    PERSISTENT_DHCLIENT="1"
    DEFROUTE="no"
    PEERDNS="no"
    

  • スタティックルーティングを削除
    「内部ネットワークA」のサブネットに追加した「追加のルート設定:WSUSへのスタティックルーティング」が、NATサーバ内にも設定されていると、NAT機能が動作しないため削除

    # route del -net 133.162.97.35 netmask 255.255.255.255
    

  • スタティックルーティングの削除確認
    削除した追加ルートが存在しないこと

    # netstat -nr
    

  • サーバ再起動後も、スタティックルーティングが削除されるよう設定

    # vi /etc/rc.d/rc.local
    

最下部に以下を追加

route del -net 133.162.97.35 netmask 255.255.255.255

(3)サーバを再起動

(4)「NATサーバ」にログイン、「rootユーザ」に変更しルーティング情報を確認

  • スタティックルーティングの削除確認
    削除した追加ルートが存在しないこと
    # netstat -nr
    

8. NAT機能の設定#

「NATサーバ」に「IPフォワーディング」と「IPマスカレード」を設定します。

(1)「rootユーザ」でログインします。

(2)設定ファイル「/etc/sysctl.conf」を編集します。

  • 「net.ipv4.ip_forward」の値を「1」に変更

    # vi /etc/rc.d/rc.local
    

  • 設定が反映されていることを確認

    # sysctl -p
    

(3)「iptables」の設定をクリアします。

  • 設定していなければ不要
    # iptables -F
    # iptables -t nat -F
    # iptables -X
    

(4)「iptables」に、「NAT:IP MASQUERADE」を設定します。

  • 「-s」オプションには、「内部ネットワークA用:DEX側」サブネット(CIDR)を指定
    # iptables -t nat -A POSTROUTING -o eth0 -s 192.168.20.0/24 -j MASQUERADE
    

(5)「iptables」の設定を確認します。

# iptables -t nat -nL

(6)「iptables」の設定を恒久反映します。

  • 設定の保存とサービスの有効化
    # service iptables save
    # chkconfig iptables on
    

(7)ポートを更新します。

  • APIで「通信許可するIPアドレス範囲」を設定
  • 「ポートID」の取得
    • IaaSポータル画面の場合:仮想サーバ→「仮想サーバ名」のリンク→「ポート名」のリンクをクリック
項目 設定値例 内容
$PORT_ID 「192.168.20.3」のポートID 「NATサーバ」が使用している「ポートID」
$PAIR_IP {\"ip_address\":\"0.0.0.0/1\"},
{\"ip_address\":\"128.0.0.0/1\"}
NATを許可するIPアドレス範囲
curl -i $NETWORK/v2.0/ports/$PORT_ID \
-X PUT \
-H "X-Auth-Token: $OS_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-d '{"port":{"allowed_address_pairs": ['$PAIR_IP']}}'

(8)ポートの設定を確認します。

  • APIで、「allowed_address_pairs」に値が設定されていること
    curl -s $NETWORK/v2.0/ports/$PORT_ID \
    -X GET \
    -H "X-Auth-Token: $OS_AUTH_TOKEN" \
    -H "Content-Type: application/json" | jq .
    

9. Windows業務サーバの設定変更#

WSUSを設定します。

注意事項#

  • 本パターンは2019年3月時点のFJcloud-O 東日本/西日本リージョン3にて動作検証しています。
  • DEX網の接続先環境(オンプレ環境)のルータからIaaSの仮想ルータへ適切な経路情報を広報するようオンプレ環境側で設定してください。なお、東日本/西日本リージョン3では、仮想ルータがDEX網からのデフォルトルート(0.0.0.0/0)の広報を受信しないように設定されています。IaaSのシステムからオンプレ環境を経由してインターネットへアクセスする場合は、仮想ルータがデフォルトルートの広報を受信できるよう、設定を変更する必要があります。
    設定の変更方法についてはDigital enhanced EXchange利用ガイド 「 4-2. 構内接続[FJcloud-O]」の、「デフォルトルートの広報」に関する記載事項をご覧ください。