はじめに
くどうです。
前回の投稿では概要だけ説明しました。
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、左メニューからネットワークを開きます。下部「新規」から作成するか、右ペイン「仮想ネットワークの作成」をクリックします。
2、[名前]に[vnet-1]を入力します。[場所]に[日本(東)]を選択します。
3、[DNSサーバーおよびVPN接続]画面での変更点はありません。DNSで変更が必要な場合は変更してください。設定後でも変更は可能です。
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)]
5、以上で仮想ネットワークの作成が出来ました。
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、左メニューから「仮想マシン」を選択します。「仮想マシンを作成する」をクリックします。
2、[ギャラリー]を選択します。
3、[イメージの選択]画面で、OpenLogic 7.1を選択します。6系を使いたい方はご自由に設定を行ってください。ここでは説明しません。
4、[仮想マシン名]に[lv69nat]と入力します。BASIC A0を選択します。認証では、キーの作成を行っていないのでパスワードを指定します。通常はキーを利用することをお勧めします。
5、[仮想マシンの構成]では[クラウドサービスDNS名]に[lv69demo]を入力します。[仮想ネットワーク]は[vnet-1]を選択します。[仮想ネットワーク サブネット]ではpublic-1を選択します。ストレージアカウントは事前に作成したものでも、自動作成された物でも構いません。制限事項ではありません。
6、VMエージェントは変更せずに完了します。以上で、NAT仮想マシンの作成は完了です。
7、デプロイ完了後、ダッシュボードを開きます。右ペインから、[SSH の詳細]を確認します。接続するための情報になります。Tera Term 等で接続します。
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]を入力します。
10、[クラウドサービス]に[lv69demo]を選択します。[仮想ネットワーク]に[Private-1(10.0.0.0/24)]を選択します。[可用性セット]は[可用性セット作成]を選択し、[可用性セット名]に[lv69ha]を入力します。以上の設定で完了です。
12、確認用仮想マシンの設置します。作成手順は1~3を繰り返します。[仮想マシンの構成]画面で、[仮想マシン名]を[lv69src2]を入力します。
13、[クラウドサービス]に[lv69demo]を選択します。[仮想ネットワーク]に[Private-2(10.0.1.0/24)]を選択します。[可用性セット]は[lv69ha]を選択します。以上の設定で完了です。
ルーティングの設定
ルーティングの設定を行います。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を。