内部ネットワークの共有パターン#

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

要求事項#

  • 利用者側の各部門が、仮想リソースやグループ・ユーザをプロジェクトという単位で管理したい
  • 部門間で共通利用を行う踏み台サーバや共有サーバなどに関しては、1つのプロジェクトにまとめたい

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

  • 複数のプロジェクトをネットワークRBAC(プロジェクト間でネットワークリソースを共有する機能)で接続し、1つのプロジェクトに配備された踏み台サーバや共有サーバなどの共通サービスを、複数のプロジェクトから利用する例を記載します。

  • これによるメリットは以下の通りです。

    • 複数のプロジェクトで共通のサービスを集約することで、構築/運用コストやミドルウェア等のライセンス費用の削減が可能

構造(イメージ図)#

image

  • 本構成ではプロジェクトAの内部ネットワークA1を、プロジェクトB・Cと共有します。
  • 「ssh」や「rdp」など業務サーバB・Cメンテナンス用ポートへのアクセスは、プロジェクトAの踏み台サーバを経由して行います。
  • 内部ネットワークA0・A1・B・CのIPアドレスは、重複しないよう設計してください。
  • 本構成では仮想サーバをCentOS7.9で作成しています。

実装サンプル#

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

仮想ネットワーク・仮想ルータを作成します。

  • 各作業プロジェクトで「内部ネットワークA0」・「内部ネットワークA1」・「内部ネットワークB」・「内部ネットワークC」を作成
  • DHCPは「有効」、DNSサーバは「8.8.8.8」を設定
作業プロジェクト ネットワーク 仮想ネットワーク名 サブネット名 サブネット ゲートウェイIP 用途
プロジェクトA 内部ネットワークA0 nwA0 subnetA0 192.168.1.0/24 192.168.1.1 SSL-VPN接続用
プロジェクトA 内部ネットワークA1 nwA1 subnetA1 192.168.10.0/24 192.168.10.1 共有ネットワーク用
プロジェクトB 内部ネットワークB nwB subnetB 192.168.20.0/24 192.168.20.1 業務用
プロジェクトC 内部ネットワークC nwC subnetC 192.168.30.0/24 192.168.30.1 業務用
  • 各作業プロジェクトで「ルータA0」・「ルータA1」・「ルータB」・「ルータC」を作成します。作成した仮想ルータに内部ネットワークのサブネットを接続します。
作業プロジェクト ルータ 仮想ルータ名 外部ネットワーク サブネット接続 IPアドレス 用途
プロジェクトA ルータA0 routerA0 接続(fip-net) subnetA0 192.168.1.1 SSL-VPN接続用
プロジェクトA ルータA1 routerA1 subnetA1 192.168.10.1 共有ネットワーク用
プロジェクトB ルータB routerB 接続(fip-net) subnetB 192.168.20.1 業務用
プロジェクトC ルータC routerC 接続(fip-net) subnetC 192.168.30.1 業務用

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

(1) 内部ネットワークA0(SSL-VPN接続)用#

プロジェクトA内に以下を作成します。

  • セキュリティグループ
  • セキュリティグループルール
    • 送信:「TCP」「UDP」「ICMP」を全て許可
    • 受信:「SSL-VPNクライアントプール」からの、「SSH (22/tcp)」「RDP (3389/tcp)」を許可
    • 設定手順は初期構築ガイド セキュリティグループルールの作成 を参照
    • 以下の設定値例を参照
No. ルール 方向 オープンポート ポート 接続先 CIDR
1 ALL TCP(1-65535) 送信 CIDR 0.0.0.0/0
2 ALL UDP(1-65535) 送信 CIDR 0.0.0.0/0
3 ALL ICMP 送信 CIDR 0.0.0.0/0
4 カスタムTCPルール 受信 ポート番号 22 CIDR 192.168.246.0/24
5 カスタムTCPルール 受信 ポート番号 3389 CIDR 192.168.246.0/24

(2) 内部ネットワークA1(共有ネットワーク)用#

(A) プロジェクトAでの設定#

プロジェクトA内に以下を作成します。

  • セキュリティグループ
  • セキュリティグループルール
    • 送信:「TCP」「UDP」「ICMP」を全て許可
    • 受信:「内部ネットワークA1」からの、「SSH (22/tcp)」「RDP (3389/tcp)」「ICMP」を許可
    • 設定手順は初期構築ガイド セキュリティグループルールの作成 を参照
    • 以下の設定値例を参照
No. ルール 方向 オープンポート ポート番号 接続先 CIDR
1 ALL TCP(1-65535) 送信 CIDR 0.0.0.0/0
2 ALL UDP(1-65535) 送信 CIDR 0.0.0.0/0
3 ALL ICMP 送信 CIDR 0.0.0.0/0
4 ALL ICMP 受信 CIDR 192.168.10.0/24
5 カスタムTCPルール 受信 ポート番号 22 CIDR 192.168.10.0/24
6 カスタムTCPルール 受信 ポート番号 3389 CIDR 192.168.10.0/24
(B) プロジェクトBでの設定#

セキュリティグループはプロジェクト間で共有されません。そのため、プロジェクトB内にSG-A1-at-pjAと同一のセキュリティグループを作成します。

  • セキュリティグループ
  • セキュリティグループルール
    • 送信:「TCP」「UDP」「ICMP」を全て許可
    • 受信:「内部ネットワークA1」からの、「SSH (22/tcp)」「RDP (3389/tcp)」「ICMP」を許可
    • 設定手順は初期構築ガイド セキュリティグループルールの作成 を参照
    • 以下の設定値例を参照
No. ルール 方向 オープンポート ポート番号 接続先 CIDR
1 ALL TCP(1-65535) 送信 CIDR 0.0.0.0/0
2 ALL UDP(1-65535) 送信 CIDR 0.0.0.0/0
3 ALL ICMP 送信 CIDR 0.0.0.0/0
4 ALL ICMP 受信 CIDR 192.168.10.0/24
5 カスタムTCPルール 受信 ポート番号 22 CIDR 192.168.10.0/24
6 カスタムTCPルール 受信 ポート番号 3389 CIDR 192.168.10.0/24
(C) プロジェクトCでの設定#

同様に、プロジェクトC内にSG-A1-at-pjAと同一のセキュリティグループを作成します。

  • セキュリティグループ
  • セキュリティグループルール
    • 送信:「TCP」「UDP」「ICMP」を全て許可
    • 受信:「内部ネットワークA1」からの、「SSH (22/tcp)」「RDP (3389/tcp)」「ICMP」を許可
    • 設定手順は初期構築ガイド セキュリティグループルールの作成 を参照
    • 以下の設定値例を参照
No. ルール 方向 オープンポート ポート番号 接続先 CIDR
1 ALL TCP(1-65535) 送信 CIDR 0.0.0.0/0
2 ALL UDP(1-65535) 送信 CIDR 0.0.0.0/0
3 ALL ICMP 送信 CIDR 0.0.0.0/0
4 ALL ICMP 受信 CIDR 192.168.10.0/24
5 カスタムTCPルール 受信 ポート番号 22 CIDR 192.168.10.0/24
6 カスタムTCPルール 受信 ポート番号 3389 CIDR 192.168.10.0/24

(3) 内部ネットワークB(業務)用#

プロジェクトB内に以下を作成します。

No. ルール 方向 オープンポート ポート 接続先 CIDR
1 ALL TCP(1-65535) 送信 CIDR 0.0.0.0/0
2 ALL UDP(1-65535) 送信 CIDR 0.0.0.0/0
3 ALL ICMP 送信 CIDR 0.0.0.0/0

(4) 内部ネットワークC(業務)用#

プロジェクトC内に以下を作成します。

No. ルール 方向 オープンポート ポート 接続先 CIDR
1 ALL TCP(1-65535) 送信 CIDR 0.0.0.0/0
2 ALL UDP(1-65535) 送信 CIDR 0.0.0.0/0
3 ALL ICMP 送信 CIDR 0.0.0.0/0

3. SSL-VPNの作成#

仮想サーバへのセキュアな接続を実現するため、プロジェクトA内にSSL-VPNを作成します。

(1) VPNサービスの作成#

  • ルータA0にVPNサービスを設定
項目 設定値例
仮想ルータ名 routerA0
サブネット名 subnetA0
VPNサービス名 ssl-vpn-service
説明 (空欄)
管理状態 TRUE

Note

「指定した仮想ルータにファイアウォールが設定されていません。VPNサービス作成後に設定してください。」というポップアップが現れますが、ここではOKをクリックします。

(2) SSL-VPNコネクションの作成#

項目 設定値例
SSL-VPN接続名 ssl-vpn-conn
管理状態 TRUE
証明書 FJCS証明書(デフォルト)
グローバルIP 自動割当
クライアントIPプール 192.168.246.0/24

4. ネットワークRBACの作成#

プロジェクトAで、APIを使用してネットワークRBACを作成します。

  • 設定項目(REST API)
リクエストパラメータ名 変数例 設定値例 内容
"action" $RBAC_ACTION "access_as_shared" RBACポリシーのアクションを指定
"object_id" $OBJ_ID (仮想ネットワークID) 共有する内部ネットワークのリソースIDを指定
ここでは内部ネットワークA1のIDを指定
"object_type" $OBJ_TYPE "network" RBACポリシーを適用するオブジェクトのタイプを指定
"target_tenant" $TAR_TENANT1 (プロジェクトID) RBACポリシーを適用するプロジェクトのIDを指定
ここではプロジェクトBのIDを指定
"target_tenant" $TAR_TENANT2 (プロジェクトID) RBACポリシーを適用するプロジェクトのIDを指定
ここではプロジェクトCのIDを指定
  • 実行API
    以下のcurlコマンドを実行し、内部ネットワークA1をプロジェクトBに共有するためのネットワークのアクセスポリシーを作成

    curl -Ss $NETWORK/v2.0/rbac-policies -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{ "rbac_policy":{ "action":"'$RBAC_ACTION'", "object_id":"'$OBJ_ID'", "object_type":"'$OBJ_TYPE'", "target_tenant":"'$TAR_TENANT1'" } }' | jq .
    

  • 実行API
    以下のcurlコマンドを実行し、内部ネットワークA1をプロジェクトCに共有するためのネットワークのアクセスポリシーを作成

    curl -Ss $NETWORK/v2.0/rbac-policies -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{ "rbac_policy":{ "action":"'$RBAC_ACTION'", "object_id":"'$OBJ_ID'", "object_type":"'$OBJ_TYPE'", "target_tenant":"'$TAR_TENANT2'" } }' | jq .
    

Note

CentOSの仮想環境でAPIを実行するための手順は以下を参照ください。
https://doc.cloud.global.fujitsu.com/lib/iaas/jp/initial_guide/6-api/#api_1

Note

target_tenantにワイルドカードを使用することで、複数の内部ネットワークを指定することはできません。
プロジェクトの数だけアクセスポリシーを作成してください。

5. 仮想サーバの作成#

  • 以下の設定値例に従い、各作業プロジェクトで「踏み台サーバ」・「共有サーバ」・「業務サーバB」・「業務サーバC」を作成
    • サーバグループは「設定なし」、デバイスサイズは最小ディスク容量を設定
    • キーペアは任意のキーペアを選択
    • 「踏み台サーバ」・「業務サーバB」・「業務サーバC」ではプロビジョニングスクリプトを設定
      • ネットワーク構成設定を自動化するため、NetworkManagerをインストール
      • インターネット接続のため、一時的なデフォルトゲートウェイを設定
        #!/bin/bash
        sudo route del default gw 192.168.10.1
        sudo route add default gw <デフォルトゲートウェイの設定値:以下表を参照>
        sudo yum install -y NetworkManager
        sudo systemctl start --now NetworkManager
        sudo systemctl enable --now NetworkManager
        
    • 作成手順は初期構築ガイド 仮想サーバの作成 を参照
作業プロジェクト 仮想サーバ 仮想サーバ名 仮想サーバタイプ OSイメージ 選択済み仮想ネットワーク セキュリティグループ デフォルトルートゲートウェイ設定値
プロジェクトA 踏み台サーバ BastionVM C3-2 CentOS 7.x nwA0・nwA1 (ここでは選択不要) 192.168.1.1
プロジェクトA 共有サーバ SharedVM C3-2 CentOS 7.x nwA1 SG-A1-at-pjA (設定不要)
プロジェクトB 業務サーバB BizVM-B C3-2 CentOS 7.x nwB・nwA1 (ここでは選択不要) 192.168.20.1
プロジェクトC 業務サーバC BizVM-C C3-2 CentOS 7.x nwC・nwA1 (ここでは選択不要) 192.168.30.1
  • ポートのセキュリティグループを設定
    • IaaSポータル画面の場合:上記の各プロジェクト内で、ポートの「アクション」 → 「セキュリティグループ設定」をクリック
    • 初期設定値「default」を解除し、以下の表に従い必要なセキュリティグループを選択
    • 「仮想サーバ詳細画面」をリロードして、設定内容が反映されていることを確認
作業プロジェクト 仮想サーバ 仮想サーバ名 仮想ネットワーク セキュリティグループ 用途
プロジェクトA 踏み台サーバ BastionVM nwA0 SG-A0 内部ネットワークA0用
プロジェクトA 踏み台サーバ BastionVM nwA1 SG-A1-at-pjA 内部ネットワークA1用
プロジェクトB 業務サーバB BizVM-B nwA1 SG-A1-at-pjB 内部ネットワークA1用
プロジェクトB 業務サーバB BizVM-B nwB SG-B 内部ネットワークB用
プロジェクトC 業務サーバC BizVM-C nwA1 SG-A1-at-pjC 内部ネットワークA1用
プロジェクトC 業務サーバC BizVM-C nwC SG-C 内部ネットワークC用
  • 全てのサーバが、「内部ネットワークA1」に接続されていることを確認

    • IaaSポータル画面の場合:各プロジェクトにログインし、仮想ネットワーク一覧 → 「nwA1」のリンク → 「ポート」を確認
    • 作成したポートがすべて存在すること、状態が「ACTIVE」であること、管理状態が「Up」であることを確認する
  • 設定変更を反映させるために全ての仮想サーバを再起動

    • IaaSポータル画面の場合:各プロジェクトにログインし、仮想サーバ一覧 → 仮想サーバの「アクション」 → 既存のポートの「アクション」 → 「再起動(ハード)」を選択

6. 踏み台サーバの設定変更#

踏み台サーバのルーティング設定を変更します。

(1)「踏み台サーバ」にログイン#

  • 作業用PCからSSL-VPN接続

  • TeraTermを使用して、踏み台サーバにログイン

$ ssh -i ./test-keypair.pem k5user@192.168.1.11
$ sudo su -

(2)踏み台サーバから、他のサーバへSSHするための準備#

  • キーペアファイルを、自PCから踏み台サーバへ転送
    • TeraTermの[ファイル]→[ssh scp...]を選択
    • from:「送信するキーペアファイル」を選択、to:踏み台サーバの任意フォルダ(例:/home/k5user)を指定
  • キーペアファイルのアクセス権限を「600」に指定
    $ chmod 600 ./test-keypair.pem
    $ ls -l
    total 4
    -rw-------. 1 k5user k5user 1679 Sep 13  2018 test-keypair.pem
    

(3)ルーティング設定を変更#

(A)デバイスeth1をデフォルトルートから削除#

ルーティング情報を確認の上、デバイスeth1でデフォルトルートを使用しないように設定します。

  • rootユーザに変更し、内部ネットワークA1へのポート追加後のルーティング情報を確認
    • IPアドレス192.168.1.11および192.168.10.11はデバイスeth0、eth1それぞれに割り当てられたIPアドレス
    • 以下の作業でdefault via 192.168.10.1 dev eth1 proto dhcp metric 101の行が削除されるように、デバイスeth1をデフォルトルートから削除
      $ sudo su -
      # ip route show
      default via 192.168.1.1 dev eth0 proto static metric 100
      default via 192.168.10.1 dev eth1 proto dhcp metric 101
      192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.11 metric 100
      192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.11 metric 101
      

  • デバイスeth1のconnectionに対するUUIDを確認

    # nmcli connection show
    NAME                UUID                                  TYPE      DEVICE
    System eth0         5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0
    Wired connection 1  a5f11d64-7961-3790-9bf4-8525e5e0e691  ethernet  eth1
    ens3                421b5593-cd40-421f-8cfd-3b23942345f6  ethernet  --
    

  • デバイスeth1のconnectionに対するUUIDを指定し、デバイスをデフォルトゲートウェイとして使用しないようする設定(ipv4.never-default)が無効になっていることを確認

    # nmcli connection show a5f11d64-7961-3790-9bf4-8525e5e0e691 | grep "ipv4.never-default"
    ipv4.never-default:                     no
    

  • デバイスeth1をデフォルトゲートウェイとして使用しないように設定

    • ipv4.never-defaultの設定パラメータをyesに修正
      nmcli connection modify a5f11d64-7961-3790-9bf4-8525e5e0e691 ipv4.never-default yes
      
  • 設定の変更内容を確認

    # nmcli connection show a5f11d64-7961-3790-9bf4-8525e5e0e691 | grep "ipv4.never-default"
    ipv4.never-default:                     yes
    

  • 設定変更を反映

    # nmcli connection up a5f11d64-7961-3790-9bf4-8525e5e0e691
    Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
    

  • ルーティングを再度確認し、デバイスeth1がデフォルトルートとして使用されていないことを確認

    # ip route show
    default via 192.168.1.1 dev eth0 proto static metric 100
    192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.11 metric 100
    192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.11 metric 101
    

(B) デバイスeth0にスタティックルーティングを設定#

将来のルーティング変更(例:デフォルトルートをバックLAN側に切替)に伴い、SSL-VPN接続できなくなるリスクを回避するためデバイスeth0にスタティックルーティングを設定します。

  • デバイスeth0のconnectionに対するUUIDを確認

    # nmcli connection show
    NAME                UUID                                  TYPE      DEVICE
    System eth0         5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0
    Wired connection 1  a5f11d64-7961-3790-9bf4-8525e5e0e691  ethernet  eth1
    ens3                421b5593-cd40-421f-8cfd-3b23942345f6  ethernet  --
    

  • デバイスeth0のconnectionに対するUUIDを指定し、デバイスeth0に対しスタティックルーティングを設定する

    nmcli connection modify 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 +ipv4.routes "192.168.246.0/24 192.168.1.1"
    

  • 設定の変更内容を確認

    # nmcli connection show 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 | grep "ipv4.routes"
    ipv4.routes:                            { ip = 192.168.246.0/24, nh = 192.168.1.1 }
    

  • 設定変更を反映

    # nmcli connection up 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
    Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
    

  • 再度ルーティングを確認

    #  ip route show
    default via 192.168.1.1 dev eth0 proto static metric 100
    192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.11 metric 100
    192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.11 metric 101
    192.168.246.0/24 via 192.168.1.1 dev eth0 proto static metric 100
    

7.業務サーバBの設定変更#

業務サーバBのルーティング設定を変更します。
手順は 6. 踏み台サーバの設定変更 と同じです。

(1)「踏み台サーバ」から「業務サーバB」にログイン、rootユーザに変更#

$ ssh -i ./test-keypair.pem k5user@192.168.10.21
$ sudo su -

(2)ルーティング設定を変更#

「SSL-VPNクライアントIPプール」のスタティックルーティング追加は不要です。

  • 修正後のルーティング情報
    • IPアドレス192.168.1.21および192.168.10.60はデバイスeth1、eth0それぞれに割り当てられたIPアドレス
      # ip route show
      default via 192.168.20.1 dev eth0 proto static metric 100
      192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.21 metric 101
      192.168.20.0/24 dev eth0 proto kernel scope link src 192.168.20.60 metric 100
      

(3)サーバを再起動し、疎通確認#

サーバを再起動し、再度踏み台サーバ経由でsshログインできることを確認します。
上記(2)で設定したルーティング情報が反映されていることを確認します。

8.業務サーバCの設定変更#

業務サーバCのルーティング設定を変更します。
手順は 6. 踏み台サーバの設定変更 と同じです。

(1)「踏み台サーバ」から「業務サーバC」にログイン、rootユーザに変更#

$ ssh -i ./test-keypair.pem k5user@192.168.10.31
$ sudo su -

(2)ルーティング設定を変更#

「SSL-VPNクライアントIPプール」のスタティックルーティング追加は不要です。

  • 修正後のルーティング情報
    • IPアドレス192.168.10.31および192.168.30.91はデバイスeth1、eth0それぞれに割り当てられたIPアドレス
      # ip route show
      default via 192.168.30.1 dev eth0 proto static metric 100
      192.168.10.0/24 dev eth1 proto kernel scope link src 192.168.10.31 metric 101
      192.168.30.0/24 dev eth0 proto kernel scope link src 192.168.30.91 metric 100
      

(3)サーバを再起動し、疎通確認#

サーバを再起動し、再度踏み台サーバ経由でsshログインできることを確認します。
上記(2)で設定したルーティング情報が反映されていることを確認します。

注意事項#

  • 本パターンは2022年3月時点のFJcloud-O 東日本/西日本リージョン3にて動作検証しています。
  • 実際の運用においては、 セキュリティグループ活用 を参考に、適切なセキュリティグループを設定してください。