快速入門:使用 Azure PowerShell 建立虛擬網路

本快速入門說明如何使用 Azure PowerShell 建立虛擬網路。 接著,您會在網路中建立兩部虛擬機(VM),安全地從因特網連線到 VM,並開始 VM 之間的私人通訊。

虛擬網路是 Azure 中私人網路的基礎建置區塊。 Azure 虛擬網路可讓 Azure 資源 (例如 VM) 彼此安全地通訊,以及與網際網路安全地通訊。

虛擬網路快速入門中建立的資源圖表。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 您可以免費建立帳戶

  • Azure Cloud Shell 或 Azure PowerShell。

    本快速入門中的步驟會在 Azure Cloud Shell 中以互動方式執行 Azure PowerShell Cmdlet。 若要在 Cloud Shell 中執行命令,請選取程式碼區塊右上角的 [開啟 Cloudshell]。 選取 [複製 ] 以複製程式代碼,然後將它貼到 Cloud Shell 中以執行程式代碼。 您也可從 Azure 入口網站內執行 Cloud Shell。

    您也可以在本機安裝 Azure PowerShell 來執行 Cmdlet。 本文中的步驟需要 Azure PowerShell 模組 5.4.1 版或更新版本。 執行 Get-Module -ListAvailable Az 來了解您安裝的版本。 如果您需要升級,則請參閱更新 Azure PowerShell 模組

    如果您在本機執行 PowerShell,請執行 Connect-AzAccount 以連線至 Azure。

建立資源群組

使用 New-AzResourceGroup 來建立資源群組以裝載虛擬網路。 執行下列程序代碼,在 eastus2 Azure 區域中建立名為 test-rg 的資源群組:

$rg = @{
    Name = 'test-rg'
    Location = 'eastus2'
}
New-AzResourceGroup @rg

建立虛擬網路

  1. 使用 New-AzVirtualNetwork 在 test-rg 資源群組和 eastus2 位置建立名為 vnet-1 的虛擬網路,其 IP 位址前綴為 10.0.0.0/16

    $vnet = @{
        Name = 'vnet-1'
        ResourceGroupName = 'test-rg'
        Location = 'eastus2'
        AddressPrefix = '10.0.0.0/16'
    }
    $virtualNetwork = New-AzVirtualNetwork @vnet
    
  2. Azure 會將資源部署到虛擬網路內的子網路。 使用 Add-AzVirtualNetworkSubnetConfig 建立名為 subnet-1 的子網組態,其地址前綴 為 10.0.0.0/24

    $subnet = @{
        Name = 'subnet-1'
        VirtualNetwork = $virtualNetwork
        AddressPrefix = '10.0.0.0/24'
    }
    $subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
    
  3. 使用 Set-AzVirtualNetwork 將子網組態與虛擬網路產生關聯:

    $virtualNetwork | Set-AzVirtualNetwork
    

部署 Azure Bastion

Azure Bastion 會使用瀏覽器,透過安全殼層 (SSH) 或遠端桌面通訊協定 (RDP) 連線到虛擬網路中的 VM,方法是使用其私人 IP 位址。 VM 不需要公用 IP 位址、用戶端軟體或特殊設定。 如需 Bastion 的詳細資訊,請參閱什麼是 Azure Bastion?

無論輸出資料使用量為何,每小時價格都是從部署 Bastion 的那一刻開始計費。 如需詳細資訊,請參閱價格SKU。 如果您要在教學課程或測試期間部署 Bastion,建議您在使用完畢後刪除此資源。

  1. 設定虛擬網路的 Bastion 子網。 此子網僅保留給 Bastion 資源,且必須命名為 AzureBastionSubnet

    $subnet = @{
        Name = 'AzureBastionSubnet'
        VirtualNetwork = $virtualNetwork
        AddressPrefix = '10.0.1.0/26'
    }
    $subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
    
  2. 設定組態:

    $virtualNetwork | Set-AzVirtualNetwork
    
  3. 建立 Bastion 的公用 IP 位址。 Bastion 主機會使用公用 IP 透過埠 443 存取 SSH 和 RDP。

    $ip = @{
            ResourceGroupName = 'test-rg'
            Name = 'public-ip'
            Location = 'eastus2'
            AllocationMethod = 'Static'
            Sku = 'Standard'
            Zone = 1,2,3
    }
    New-AzPublicIpAddress @ip
    
  4. 使用 New-AzBastion 命令在 AzureBastionSubnet建立新的標準 SKU Bastion 主機:

    $bastion = @{
        Name = 'bastion'
        ResourceGroupName = 'test-rg'
        PublicIpAddressRgName = 'test-rg'
        PublicIpAddressName = 'public-ip'
        VirtualNetworkRgName = 'test-rg'
        VirtualNetworkName = 'vnet-1'
        Sku = 'Basic'
    }
    New-AzBastion @bastion
    

部署 Bastion 資源大約需要 10 分鐘的時間。 當 Bastion 部署到您的虛擬網路時,您可以在下一節中建立 VM。

建立虛擬機器

使用 New-AzVM 在虛擬網路的 subnet-1 子網路中建立名為 vm-1vm-2 的兩個 VM。 當系統提示您輸入認證時,請輸入 VM 的使用者名稱和密碼。

  1. 若要建立第一個 VM,請使用下列程式碼:

    # Set the administrator and password for the VM. ##
    $cred = Get-Credential
    
    ## Place the virtual network into a variable. ##
    $vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
    
    ## Create a network interface for the VM. ##
    $nic = @{
        Name = "nic-1"
        ResourceGroupName = 'test-rg'
        Location = 'eastus2'
        Subnet = $vnet.Subnets[0]
    }
    $nicVM = New-AzNetworkInterface @nic
    
    ## Create a virtual machine configuration. ##
    $vmsz = @{
        VMName = "vm-1"
        VMSize = 'Standard_DS1_v2'  
    }
    $vmos = @{
        ComputerName = "vm-1"
        Credential = $cred
    }
    $vmimage = @{
        PublisherName = 'Canonical'
        Offer = '0001-com-ubuntu-server-jammy'
        Skus = '22_04-lts-gen2'
        Version = 'latest'    
    }
    $vmConfig = New-AzVMConfig @vmsz `
        | Set-AzVMOperatingSystem @vmos -Linux `
        | Set-AzVMSourceImage @vmimage `
        | Add-AzVMNetworkInterface -Id $nicVM.Id
    
    ## Create the VM. ##
    $vm = @{
        ResourceGroupName = 'test-rg'
        Location = 'eastus2'
        VM = $vmConfig
    }
    New-AzVM @vm
    
  2. 若要建立第二個 VM,請使用下列程式碼:

    # Set the administrator and password for the VM. ##
    $cred = Get-Credential
    
    ## Place the virtual network into a variable. ##
    $vnet = Get-AzVirtualNetwork -Name 'vnet-1' -ResourceGroupName 'test-rg'
    
    ## Create a network interface for the VM. ##
    $nic = @{
        Name = "nic-2"
        ResourceGroupName = 'test-rg'
        Location = 'eastus2'
        Subnet = $vnet.Subnets[0]
    }
    $nicVM = New-AzNetworkInterface @nic
    
    ## Create a virtual machine configuration. ##
    $vmsz = @{
        VMName = "vm-2"
        VMSize = 'Standard_DS1_v2'  
    }
    $vmos = @{
        ComputerName = "vm-2"
        Credential = $cred
    }
    $vmimage = @{
        PublisherName = 'Canonical'
        Offer = '0001-com-ubuntu-server-jammy'
        Skus = '22_04-lts-gen2'
        Version = 'latest'    
    }
    $vmConfig = New-AzVMConfig @vmsz `
        | Set-AzVMOperatingSystem @vmos -Linux `
        | Set-AzVMSourceImage @vmimage `
        | Add-AzVMNetworkInterface -Id $nicVM.Id
    
    ## Create the VM. ##
    $vm = @{
        ResourceGroupName = 'test-rg'
        Location = 'eastus2'
        VM = $vmConfig
    }
    New-AzVM @vm
    

提示

您可以使用 -AsJob 選項在背景中建立 VM,同時繼續執行其他工作。 例如,請執行 New-AzVM @vm1 -AsJob。 當 Azure 開始在背景中建立 VM 時,您會收到類似下列輸出的內容:

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
1      Long Running... AzureLongRun... Running       True            localhost            New-AzVM

Azure 需要幾分鐘的時間來建立 VM。 當 Azure 完成建立 VM 時,它會將輸出傳回 PowerShell。

注意

具有 Bastion 主機的虛擬網路中的 VM 不需要公用 IP 位址。 Bastion 會提供公用 IP,而 VM 會使用私人 IP 在網路內通訊。 您可以從 Bastion 裝載的虛擬網路中的任何 VM 移除公用 IP。 如需詳細資訊,請參閱中斷公用 IP 位址與 Azure VM 的關聯

注意

無論是未獲指派公用 IP 位址的 VM,或位於內部基本 Azure 負載平衡器後端集區的 VM,Azure 都會為其提供預設輸出存取 IP。 預設輸出存取 IP 機制能提供無法自行設定的輸出 IP 位址。

發生下列其中一個事件時,會停用預設輸出存取 IP:

  • 公用 IP 位址會指派給 VM。
  • 無論有沒有輸出規則,都會將 VM 放在標準負載平衡器的後端集區中。
  • Azure NAT 閘道資源會指派給 VM 的子網。

您在彈性協調流程模式中使用虛擬機器擴展集建立的 VM 沒有預設輸出存取。

如需 Azure 中輸出連線的詳細資訊,請參閱 Azure 中的預設對外存取使用來源網路位址轉譯 (SNAT) 進行輸出連線

連接到虛擬機器

  1. 在入口網站中,搜尋並選取 [虛擬機器]

  2. 在 [虛擬機器] 頁面上,選取 [vm-1]

  3. 在 vm-1 的 [概觀資訊] 中,選取 [連線]。

  4. [連線 至虛擬機] 頁面上,選取 [Bastion] 索引標籤。

  5. 選取 [使用 Bastion]

  6. 輸入您在建立 VM 時建立的使用者名稱和密碼,然後選取 [連線]。

開始 VM 之間的通訊

  1. vm-1 的 Bash 提示中,輸入 ping -c 4 vm-2

    您會收到類似下列訊息的回覆:

    azureuser@vm-1:~$ ping -c 4 vm-2
    PING vm-2.3bnkevn3313ujpr5l1kqop4n4d.cx.internal.cloudapp.net (10.0.0.5) 56(84) bytes of data.
    64 bytes from vm-2.internal.cloudapp.net (10.0.0.5): icmp_seq=1 ttl=64 time=1.83 ms
    64 bytes from vm-2.internal.cloudapp.net (10.0.0.5): icmp_seq=2 ttl=64 time=0.987 ms
    64 bytes from vm-2.internal.cloudapp.net (10.0.0.5): icmp_seq=3 ttl=64 time=0.864 ms
    64 bytes from vm-2.internal.cloudapp.net (10.0.0.5): icmp_seq=4 ttl=64 time=0.890 ms
    
  2. 關閉與 vm-1 的 Bastion 連線。

  3. 重複 [連線至虛擬機器] 中的步驟以連線至 vm-2

  4. vm-2 的 Bash 提示中,輸入 ping -c 4 vm-1

    您會收到類似下列訊息的回覆:

    azureuser@vm-2:~$ ping -c 4 vm-1
    PING vm-1.3bnkevn3313ujpr5l1kqop4n4d.cx.internal.cloudapp.net (10.0.0.4) 56(84) bytes of data.
    64 bytes from vm-1.internal.cloudapp.net (10.0.0.4): icmp_seq=1 ttl=64 time=0.695 ms
    64 bytes from vm-1.internal.cloudapp.net (10.0.0.4): icmp_seq=2 ttl=64 time=0.896 ms
    64 bytes from vm-1.internal.cloudapp.net (10.0.0.4): icmp_seq=3 ttl=64 time=3.43 ms
    64 bytes from vm-1.internal.cloudapp.net (10.0.0.4): icmp_seq=4 ttl=64 time=0.780 ms
    
  5. 關閉與 vm-2 的 Bastion 連線。

清除資源

當您完成虛擬網路和 VM 時,請使用 Remove-AzResourceGroup 來移除資源群組及其所有資源:

Remove-AzResourceGroup -Name 'test-rg' -Force

下一步

在本快速入門中,您已建立一個虛擬網路,其中包含的預設子網路有兩個 VM。 您已部署 Azure Bastion,並用它來連線至 VM,以及在 VM 之間安全地通訊。 若要深入了解虛擬網路設定,請參閱建立、變更或刪除虛擬網路