Azure

AzureでNAT設置パターンを考える。構築編、これでルートテーブルも大丈夫かもよ。

はじめに

くどうです。
前回の投稿では概要だけ説明しました。
AzureでNAT設置パターンを考える。これでAWSからも移行できますね。

今回は、実際にNATを設置する方法えお、解説していきます。
鍛えられたAzurerさん達は見なくても大丈夫!

概要

概要を説明します。

プライベートセグメントから外部へ通信する場合、NATを利用して外部との通信を行います。
そのため、NATを設置しルーティングによりプライベートセグメントからのデフォルトルートをNATにします。
NATをデフォルトルートに設定する場合、UDRを設定します。UDRを設定する場合、仮想ネットワークへ所属している必要があります。制限事項になります。

今回、大きく分けて手順はい以下になります。
①仮想ネットワーク
②NATの構築
③ルーティングの設定

仮想ネットワーク

仮想ネットワークは1つ作成します。
その中でSubnetを3つ作成します。

以下の構成で作成していきます。

  • 仮想ネットワーク:vnet-1 日本(東) 10.0.0.0/16
  • Subnet1:Private-1 10.0.0.0/24
  • Subnet2:Private-2 10.0.1.0/24
  • Subnet3:Public-1 10.0.2.0/24
  • DNSは指定しない

1、左メニューからネットワークを開きます。下部「新規」から作成するか、右ペイン「仮想ネットワークの作成」をクリックします。

net_udr000

2、[名前]に[vnet-1]を入力します。[場所]に[日本(東)]を選択します。

net_udr001

3、[DNSサーバーおよびVPN接続]画面での変更点はありません。DNSで変更が必要な場合は変更してください。設定後でも変更は可能です。

net_udr002

4、[想ネットワーク アドレス空間]画面でCIDRを[/16(65536)]へ変更します。
サブネットに以下を入力します。
[Private-1] [10.0.0.0] [/24(256)]
[Private-2] [10.0.1.0] [/24(256)]
[Public-1] [10.0.2.0] [/24(256)]

net_udr003

5、以上で仮想ネットワークの作成が出来ました。
net_udr004

NATの構築

ここからは、NATを作成します。
以下の構成で作成します。

  • 各仮想マシンは仮想ネットワーク(vnet-1)に属します
  • NAT仮想マシン:lv69nat 10.0.2.10(IPアドレス固定)
  • 確認マシン1:lv69src1
  • 確認マシン2:lv69src1
  • クラウドサービスDNS名:lv69demo
  • 可用性セット:lv69ha(lv69src1とlv69src2が属します)
  • 各仮想マシンはCentOS7ベースのOpenLogic7.1を利用します
  • 各仮想マシンはBASIC A0サイズを利用します(確認のため)

NAT仮想マシンは、パブリックのセグメント(public-1)に配置します。デプロイ後ログインしNATの設定を行います。

1、左メニューから「仮想マシン」を選択します。「仮想マシンを作成する」をクリックします。
net_udr005

2、[ギャラリー]を選択します。
net_udr006

3、[イメージの選択]画面で、OpenLogic 7.1を選択します。6系を使いたい方はご自由に設定を行ってください。ここでは説明しません。
net_udr007

4、[仮想マシン名]に[lv69nat]と入力します。BASIC A0を選択します。認証では、キーの作成を行っていないのでパスワードを指定します。通常はキーを利用することをお勧めします。
net_udr008

5、[仮想マシンの構成]では[クラウドサービスDNS名]に[lv69demo]を入力します。[仮想ネットワーク]は[vnet-1]を選択します。[仮想ネットワーク サブネット]ではpublic-1を選択します。ストレージアカウントは事前に作成したものでも、自動作成された物でも構いません。制限事項ではありません。
net_udr009
net_udr010

6、VMエージェントは変更せずに完了します。以上で、NAT仮想マシンの作成は完了です。
net_udr011

7、デプロイ完了後、ダッシュボードを開きます。右ペインから、[SSH の詳細]を確認します。接続するための情報になります。Tera Term 等で接続します。
net_udr018

8、接続後、設定を行います。
IP Forwarding を有効にします。

sysctl -w net.ipv4.ip_forward=1

再起動後も有効になるように /etc/sysctl.d/ip_forward.conf に設定します。

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.d/ip_forward.conf

NATを有効にします。
CentOS7系ではiptablesは利用しません。Firewalldを利用します。
下記では、元々マスカレードの設定がされているzoneに変更します。

firewall-cmd --set-default-zone=external
firewall-cmd --reload

以上でNATの設定は完了です。
次に、NATするプライベートセグメントに確認用仮想マシンを設置します。

9、確認用仮想マシンの設置します。作成手順は1~3を繰り返します。[仮想マシンの構成]画面で、[仮想マシン名]を[lv69src1]を入力します。
net_udr012

10、[クラウドサービス]に[lv69demo]を選択します。[仮想ネットワーク]に[Private-1(10.0.0.0/24)]を選択します。[可用性セット]は[可用性セット作成]を選択し、[可用性セット名]に[lv69ha]を入力します。以上の設定で完了です。
net_udr013

12、確認用仮想マシンの設置します。作成手順は1~3を繰り返します。[仮想マシンの構成]画面で、[仮想マシン名]を[lv69src2]を入力します。
net_udr015

13、[クラウドサービス]に[lv69demo]を選択します。[仮想ネットワーク]に[Private-2(10.0.1.0/24)]を選択します。[可用性セット]は[lv69ha]を選択します。以上の設定で完了です。
net_udr016

ルーティングの設定

ルーティングの設定を行います。Azureでルーティングの設定を行う場合はAzure PowerShellを利用します。
Azure PowerShellの設定は完了していることを前提に解説していきます。Azure PowerShellがインストールされていない場合は、Web Platform Installerなどを利用してインストールしてください。

Azureでルーティングの設定は「User Defined Routes(ユーザー定義のルート)」(以下UDR)を利用します。UDR は、サブネットに定義することができます。
ネクストホップとて指定できるものは以下になります。

(以下マイクロソフトより転載:ユーザー定義のルートと IP 転送

  • Local: ローカルの仮想ネットワークを表します。たとえば、同じ仮想ネットワークに 10.1.0.0/16 と 10.2.0.0/16 の 2 つのサブネットがある場合、ルート テーブル内の各サブネットのルートは、次ホップの値が Local になります。
  • VPN Gateway:Azure S2S VPN ゲートウェイを表します。
  • Internet: Azure インフラストラクチャによって提供される既定のインターネット ゲートウェイを表します。
  • Virtual Appliance:Azure Virtual Network に追加した仮想アプライアンスを表します。この場合、転送先のアプライアンスをIP指定します。
  • NULL: ブラック ホールを表します。ブラック ホールに転送されたパケットはまったく転送されません。

今回は、NATのため Virtual Appliance を指定します。

1、PowerShellを開きます。最初に利用する、アカウントを追加します。

PS C:Userssato> Add-AzureAccount
Id                             Type       Subscriptions                          Tenants
--                             ----       -------------                          -------
xxxx@xxxxx.xxxx              User       266ca40e-xxxx-xxxx-xxxxxxxxxxxxxxxxx   a1417187-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                                          5351df9f-xxxx-xxxx-xxxxxxxxxxxxxxxxx   02a1770e-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                                          6c19861f-xxxx-xxxx-xxxxxxxxxxxxxxxxx   c3471eae-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                                          0246bc5c-xxxx-xxxx-xxxxxxxxxxxxxxxxx   dadda6c5-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                                          d9f80202-xxxx-xxxx-xxxxxxxxxxxxxxxxx   e6df4c32-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                                          e78e2d21-xxxx-xxxx-xxxxxxxxxxxxxxxxx   34120743-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                                                                                 6a151a13-xxxx-xxxx-xxxx-xxxxxxxxxxxx
                                                                                 bd2c209c-xxxx-xxxx-xxxx-xxxxxxxxxxxx

2、利用するサブスクリプションを選択します。
使用する、サブスクリプションを確認します。

PS C:Userssato> Get-AzureSubscription
~省略~
SubscriptionId            : 266ca40e-xxxx-xxxx-xxxxxxxxxxxxxxxxx
SubscriptionName          : Microsoft Azure jkudo
Environment               : AzureCloud
SupportedModes            : AzureServiceManagement,AzureResourceManager
DefaultAccount            : xxxx@xxxxx.xxx
Accounts                  : {xxxx@xxxxx.xxx}
IsDefault                 : False
IsCurrent                 : False
CurrentStorageAccountName :
TenantId                  : a1417187-xxxx-xxxx-xxxx-xxxxxxxxxxxx
~省略~

IsCurrentが Falseをなっており、サブスクリプションが選択されていません。選択します。

PS C:Userssato> Select-AzureSubscription -SubscriptionName "Microsoft Azure jkudo"
PS C:Userssato> Get-AzureSubscription
~省略~
IsDefault                 : True
IsCurrent                 : True
~省略~

Tureになっていること確認します。

3、最初にNAT仮想マシンを静的IPアドレスに変更します。

PS C:Userssato> Get-AzureVM -ServiceName lv69demo -Name lv69nat | Set-AzureStaticVNetIP -IPAddress 10.0.2.10 | Update-AzureVM

OperationDescription OperationId                          OperationStatus
-------------------- -----------                          ---------------
Update-AzureVM       2a5950c9-xxxx-xxxx-xxxxxxxxxxxxxxxxx Succeeded

4、ルートテーブルを作成します。

PS C:Userssato> New-AzureRouteTable -Name NatRouteTable -Location "Japan East" -Label "Route table to NAT VM"

Name          Location   Label
----          --------   -----
NatRouteTable Japan East Route table to NAT VM

5、ルートテーブルにルートを追加します。

PS C:Userssato> Get-AzureRouteTable -Name NatRouteTable | Set-AzureRoute -RouteName NatRoute -AddressPrefix 0.0.0.0/0 -Next
HopType VirtualAppliance -NextHopIpAddress 10.0.2.10


Name     : NatRouteTable
Location : Japan East
Label    : Route table to NAT VM
Routes   :
           Name                 Address Prefix    Next hop type        Next hop IP address
           ----                 --------------    -------------        -------------------
           natroute             0.0.0.0/0         VirtualAppliance     10.0.2.10

6、ルートテーブルをサブネットに割り当てます。

PS C:Userssato> Set-AzureSubnetRouteTable -VirtualNetworkName vnet-1 -SubnetName Private-1 -RouteTableName NatRouteTable
PS C:Userssato> Set-AzureSubnetRouteTable -VirtualNetworkName vnet-1 -SubnetName Private-2 -RouteTableName NatRouteTable

実際にVMに適用されているルールを確認します。
natrouteが適用されていることが確認できます。

PS C:Userssato> get-azurevm -Name lv69src1 -ServiceName lv69demo | Get-AzureEffectiveRouteTable


Effective routes :
                   Name            Address Prefix    Next hop type    Next hop IP address Status   Source
                   ----            --------------    -------------    ------------------- ------   ------
                                  {10.0.0.0/16}     VNETLocal                            Active   Default
                   natroute        {0.0.0.0/0}       VirtualAppliance 10.0.2.10           Active   User

以上で設定が完了です。

確認作業として、lv69src1、lv69src2へlv69nat経由でログインします。
UDRを設定したため、private-1およびprivate-2のサブネットには直接ログインすることができません。

ログイン後、curlコマンドで確認してみましょう。ICMPは使用できません。
グローバルIPを取得してみます。

[azureuser@lv69src2 ~]$ curl inet-ip.info 
23.102.70.xxx

問題なく、外部から取得できていることが確認できました。

おわりに

今回は、NAT設置パターンでした。NATを設置するケース、ルートテーブルを設定する場合は多いです。プライベートセグメントのルートを変更する場合、VPNで接続した場合では、そちらに向けたりすることもあります。または、オンプレや他のクラウドサービスからの移行などのケースでも必要だと考えられます。Azureでもできることを覚えておくと良いでしょう。
ではでは、良いAzure Lifeを。

-Azure
-, , ,