web-dev-qa-db-ja.com

Azure Virtual Network内でのDNSのセットアップ

クラウドサービスがいくつかあり、AzureでVM Redisを実行しています。クラウドサービスがVM上のRedisと通信できるように、仮想ネットワークを作成する必要があることを理解しています。これは簡単でした。 。次に、DNSをセットアップして、どこでもIPアドレスを指定する必要がないようにします。

私が見つけた記事はすべてオンサイトDNSサーバーの統合に関するものですが、それはありません。とにかくgodaddy、またはdnsimpleを使用する方法はありますか?現在のVMに単純なDNSサービスをインストールするだけではどうですか?

私の質問は、クラウドサービスがDNS名を介してVNと通信できるようにするために何をする必要があるかと要約できますか?

6
user12597

Azureには、VNの「非表示」機能がいくつかあります。まず、はい、あなたは正しいです。仮想ネットワークを作成する場合、独自のDNSサーバーを提供して動的更新を許可するように設定しない限り、名前解決は機能しません。パブリックDNSサービスを使用して、Windows Azure仮想ネットワークのDNS名前解決を提供することはできません。

だからここにあなたの解決策があります。 VNetで仮想マシンを実行するとDNSサーバーのIPアドレスを変更できないため、「クリーン」を開始する必要があります。

  • 通常どおりVNet(およびそのサブネット)を作成します
  • DNSサーバーのアドレスを入力します。このアドレスをxxx.xxx.xxx.4に設定します(4は常に特定のサブネットで割り当てられた最初のIPアドレスです!)!
  • そのクリーンなVNetで、新しいVM Windows Serverで作成します。そのVMはxxx.xxx.xxx.4 IPアドレスを取得します
  • このマシンにDNSサーバーの役割をインストールして構成する
  • このマシンの静的IPアドレスを設定しないでください!
  • 通常どおり残りのVMを作成する

注意事項:

  • 静的IPアドレスをWindows AzureのVMに割り当てないでください。DHCPにはIPアドレスが割り当てられている必要があります。
  • 最初にDNSマシンを作成して、.4のIPアドレスが取得されるように注意してください
  • DNSを削除しない限り、DNS VMはIPアドレス(.4)を保持します。

このアーキテクチャは有効であることが証明されており、Windows Azure IaaS(別名仮想マシン)内で機能します

5
astaykov

私は同じ問題を抱えていましたが、余分なマシンを必要とせず、作業がほとんどない合理的な解決策を考え出したと思います。

つまり、バックエンドとフロントエンドを同じ仮想ネットワークとサブネットに配置して、同じDNSサーバーが提供されるようにします。次に、フロントエンドサービスでDNSサフィックス検索リストを構成して、名前解決を実行するときにバックエンドのDNSサフィックスを使用するようにします。

手順:

  1. バックエンドVMの1つにログインし、ipconfigを実行します。
  2. 出力から、Connection-specific DNS Suffixの値を取得します

    Output of ipconfig

  3. $dnsSuffixの値を、次のスクリプトの手順2の値に設定します。

    $dnsSuffix = 'xxxxxx.yyyyy.uswest.internal.cloudapp.net';
    
    $nics = Get-WmiObject `
      -Class win32_networkadapterconfiguration `
      -Filter 'IPEnabled = true';
    $nics | % {
      $nicSuffixes = $_.DNSDomainSuffixSearchOrder;
      if ($nicSuffixes -notcontains $dnsSuffix) {
        $_.DNSDomainSuffixSearchOrder = $dnsSuffix + $_.DNSDomainSuffixSearchOrder;
      }
    };
    
    Invoke-WmiMethod `
        -Class win32_networkadapterconfiguration `
        -Name setDNSSuffixSearchOrder `
        -ArgumentList @(@($dnsSuffix)),$null;
    
  4. そのスクリプトにSet-DnsSuffixSearchList.ps1という名前を付けてプロジェクトに含め、ファイルのプロパティを「常にコピー」に設定します。

    Set-DnsSuffixSearchList.ps1 properties

  5. 次の内容を含むstartup.cmdというファイルを作成し、[常にコピー]プロパティも設定します。

    powershell -Command "Set-ExecutionPolicy Unrestricted" >> "%TEMP%\StartupLog.txt" 2>&1
    
    # Set the DNS SearchList so that backend hosts are resolvable using their shortened names.
    powershell .\Set-DnsSuffixSearchList.ps1 >> "%TEMP%\StartupLog.txt" 2>&1
    
  6. ServiceDefinition.csdefを編集し、WebRoleノードの下に次のXMLを追加して、Azure Cloud Service Projectにスタートアップタスクを追加します。

    <Startup>
      <Task
        commandLine="startup.cmd"
        executionContext="elevated"
        taskType="background">
      </Task>
    </Startup>
    
  7. サイトとバックエンドが同じサブネットにある必要があることをすでに指定していると想定して、これで完了です。そうでない場合は、これをServiceConfigurationノード内のServiceConfiguration.Cloud.cscfgファイルに追加します。

      <NetworkConfiguration>
        <VirtualNetworkSite name="yourVirtualNetwork" />
        <AddressAssignments>
          <InstanceAddress roleName="yourCloudServiceName">
            <Subnets>
              <Subnet name="yourSubnetName" />
            </Subnets>
          </InstanceAddress>
        </AddressAssignments>
      </NetworkConfiguration>
    

同じ問題に遭遇した他の人を助けることを願っています!

6
Reuben Bond

新しいポータルでは、パブリックIPアドレスリソースでDNS名を設定できます。これを構成する方法を説明する写真は次のとおりです。

(クリックして拡大表示)
DNS procedure

0
Onur Demir