設定NAT 網路

文章推薦指數: 80 %
投票人數:10人

NAT 概觀; 建立NAT 虛擬網路; 連接虛擬機器; 設定範例︰將VM 和容器連結到NAT 網路 ... Windows 10 Hyper-V 可促成虛擬網路的原生網路位址轉譯(NAT)。

跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge 其他資訊 目錄 結束焦點模式 閱讀英文 儲存 共用 Twitter LinkedIn Facebook 電子郵件 WeChat 目錄 閱讀英文 儲存 目錄 閱讀英文 儲存 Twitter LinkedIn Facebook 電子郵件 WeChat 目錄 設定NAT網路 發行項 03/19/2022 9位參與者 此頁面有所助益嗎? Yes No 還有其他意見反應嗎? 系統會將意見反應傳送給Microsoft:按下[提交]按鈕,您的意見反應將用來改善Microsoft產品和服務。

隱私權原則。

送出 謝謝。

本文內容 Windows10Hyper-V可促成虛擬網路的原生網路位址轉譯(NAT)。

本指南將逐步引導您完成: 建立NAT網路 將現有的虛擬機器連接到新網路 確認虛擬機器已正確連接 需求: Windows10年度更新版或較新版本 已啟用Hyper-V(指示在這裡) 注意:目前,每個主機只能有一個NAT網路。

如需WindowsNAT(WinNAT)實作、功能及限制的其他詳細資料,請參閱WinNAT功能與限制部落格 NAT概觀 NAT讓虛擬機器透過內部的Hyper-V虛擬交換器,使用主機電腦的IP位址和連接埠存取網路資源。

網路位址轉譯(NAT)是設計來節省IP位址的網路模式,它會將外部IP位址和連接埠對應至較大集合的內部IP位址。

基本上,NAT使用流程表將來自外部(主機)IP位址和連接埠號碼的流量,路由傳送到已與網路上的端點(虛擬機器、電腦、容器等)建立關聯的正確內部IP位址。

此外,NAT還可藉由將通訊連接埠與唯一外部連接埠對應,以讓多部虛擬機器裝載需要相同(內部)通訊連接埠的應用程式。

由於所有這些理由,NAT網路是非常普遍的容器技術(請參閱容器的網路功能)。

建立NAT虛擬網路 讓我們逐步解說如何設定新的NAT網路。

以系統管理員身分開啟PowerShell主控台。

建立內部交換器。

New-VMSwitch-SwitchName"SwitchName"-SwitchTypeInternal 尋找您剛才建立之虛擬交換器的介面索引。

您可以藉由執行來尋找介面索引Get-NetAdapter 您的輸出看起來應該像這樣︰ PSC:\>Get-NetAdapter NameInterfaceDescriptionifIndexStatusMacAddressLinkSpeed -------------------------------------------------------- vEthernet(intSwitch)Hyper-VVirtualEthernetAdapter24Up00-15-5D-00-6A-0110Gbps Wi-FiMarvellAVASTARWireless-ACNet...18Up98-5F-D3-34-0C-D3300Mbps BluetoothNetwork...BluetoothDevice(PersonalArea...21Disconnected98-5F-D3-34-0C-D43Mbps 內部交換器會有類似vEthernet(SwitchName)的名稱,和介面描述Hyper-VVirtualEthernetAdapter。

記下其ifIndex以用於下一個步驟。

使用New-NetIPAddress設定NAT閘道。

下面是一般的命令︰ New-NetIPAddress-IPAddress-PrefixLength-InterfaceIndex 若要設定閘道,您將需要一些網路的相關資訊︰ IPAddress-NAT閘道IP指定要作為NAT閘道IP的IPv4或IPv6位址。

一般格式為a.b.c.1(例如172.16.0.1)。

最後一個位置不一定要是.1,不過通常是如此(根據首碼長度) 常見的閘道IP是192.168.0.1 PrefixLength--Nat子網前置長度會定義(子網路遮罩)的nat本地子網大小。

子網路首碼長度將是一個介於0到32之間的整數值。

0會對應整個網際網路,32則只允許一個對應的IP。

常見的值範圍從24到12,視必須附加至NAT的IP數量而定。

常見的PrefixLength是24-這是子網路遮罩255.255.255.0 InterfaceIndex--ifIndex是虛擬交換器的介面索引(您已在上一步中判斷出)。

請執行下列命令,以建立NAT閘道: New-NetIPAddress-IPAddress192.168.0.1-PrefixLength24-InterfaceIndex24 使用New-NetNat設定NAT網路。

下面是一般的命令︰ New-NetNat-Name-InternalIPInterfaceAddressPrefix 若要設定閘道,您將需要提供網路和NAT閘道的相關資訊︰ 名稱-NATOutsideName描述NAT網路的名稱。

您將使用它來移除NAT網路。

InternalIPInterfaceAddressPrefix-NAT子網路首碼說明上述的NAT閘道IP首碼,以及上述的NAT子網路首碼長度。

一般格式將為a.b.c.0/NAT子網路首碼長度 從上述說明,在本例中,我們將使用192.168.0.0/24 針對我們的範例,執行下列命令以設定NAT網路︰ New-NetNat-NameMyNATnetwork-InternalIPInterfaceAddressPrefix192.168.0.0/24 恭喜!您現在有了虛擬NAT網路了!若要新增虛擬機器至NAT網路,請遵循這些指示。

連接虛擬機器 若要將虛擬機器連接到新的NAT網路,請使用[VM設定]功能表將您在NAT網路設定一節的第一個步驟中建立的內部交換器,連接到您的虛擬機器。

因為WinNAT本身不會將IP位址配置和指派到端點(例如VM),所以您必須從VM內手動執行此操作,也就是在NAT內部首碼的範圍內設定IP位址、設定預設閘道IP位址,以及設定DNS伺服器資訊。

唯一要注意的是端點連結到容器的時機。

在本例中,主機網路服務(HNS)會配置並使用主機計算服務(HCS)直接將IP位址、閘道IP和DNS資訊指派給容器。

設定範例︰將VM和容器連結到NAT網路 如果要將多個VM和容器連結到單一NAT,您必須確定NAT內部子網路首碼夠大,足以納入不同應用程式或服務(例如DockerforWindows和WindowsContainers–HNS)所指派的IP範圍。

這需要應用程式層級的IP指派和網路設定,或是必須由管理員手動設定,並保證不會在相同的主機上重複使用現有的IP指派。

DockerforWindows(LinuxVM)和WindowsContainers 下方的解決方案會讓DockerforWindows(執行Linux容器的LinuxVM)和WindowsContainers使用不同的內部vSwitch,共用同一個WinNAT執行個體。

Linux和Windows容器間的連線都會正常運作。

使用者已透過名為“VMNAT”的內部vSwitch將VM連線到NAT網路,現在想要安裝具有docker引擎的WindowsContainer功能 PSC:\>Get-NetNat“VMNAT”|Remove-NetNat(thiswillremovetheNATbutkeeptheinternalvSwitch). InstallWindowsContainerFeature DONOTSTARTDockerService(daemon) Edittheargumentspassedtothedockerdaemon(dockerd)byadding–fixed-cidr=parameter.ThistellsdockertocreateadefaultnatnetworkwiththeIPsubnet(e.g.192.168.1.0/24)sothatHNScanallocateIPsfromthisprefix. PSC:\>Start-ServiceDocker;Stop-ServiceDocker PSC:\>Get-NetNat|Remove-NetNAT(again,thiswillremovetheNATbutkeeptheinternalvSwitch) PSC:\>New-NetNat-NameSharedNAT-InternalIPInterfaceAddressPrefix PSC:\>Start-Servicedocker Docker/HNS會將ip指派給Windows的容器,系統管理員會將ip指派給來自兩者差異集合的vm。

使用者已安裝執行docker引擎的WindowsContainer功能,現在想要將VM連線到NAT網路 PSC:\>Stop-Servicedocker PSC:\>Get-ContainerNetwork|Remove-ContainerNetwork-force PSC:\>Get-NetNat|Remove-NetNat(thiswillremovetheNATbutkeeptheinternalvSwitch) Edittheargumentspassedtothedockerdaemon(dockerd)byadding-b“none”optiontotheendofdockerdaemon(dockerd)commandtotelldockernottocreateadefaultNATnetwork. PSC:\>New-ContainerNetwork–namenat–ModeNAT–subnetprefix(createanewNATandinternalvSwitch–HNSwillallocateIPstocontainerendpointsattachedtothisnetworkfromthe) PSC:\>Get-Netnat|Remove-NetNAT(again,thiswillremovetheNATbutkeeptheinternalvSwitch) PSC:\>New-NetNat-NameSharedNAT-InternalIPInterfaceAddressPrefix PSC:\>New-VirtualSwitch-Typeinternal(attachVMstothisnewvSwitch) PSC:\>Start-Servicedocker Docker/HNS會將ip指派給Windows的容器,系統管理員會將ip指派給來自兩者差異集合的vm。

最後,您應該要有兩個內部VM交換器,而且兩者共用一個NetNat。

多個應用程式使用相同的NAT 某些情況下需要多個應用程式或服務使用相同的NAT。

在此情況下,必須遵循下列工作流程,以便多個應用程式/服務可以使用較大的NAT內部子網路首碼 我們將詳細說明docker4Windows-dockerBeta-LinuxVM與相同主機上的Windows容器功能,例如範例。

此工作流程可能會變更 C:>netstopdocker 停止Docker4WindowsMobyLinuxVM PSC:>Get-ContainerNetwork|Remove-ContainerNetwork-force PSC:>Get-NetNat|Remove-NetNat 移除任何先前已存在的容器網路(亦即刪除vSwitch、刪除NetNat、清除) New-ContainerNetwork-Namenat-ModeNAT–subnetprefix10.0.76.0/24(此子網路將用於Windows容器功能)建立名為nat的內部vSwitch 建立名為“nat”且IP首碼為10.0.76.0/24的NAT網路 Remove-NetNAT 移除DockerNAT和natNAT網路(保留內部vSwitch) New-NetNat-NameDockerNAT-InternalIPInterfaceAddressPrefix10.0.0.0/17(這會建立一個較大的NAT網路讓D4W和容器共用) 建立名為DockerNAT且具有較大首碼10.0.0.0/17的NAT網路 執行Docker4Windows(MobyLinux.ps1) 建立內部vSwitchDockerNAT 建立名為“DockerNAT”且IP首碼為10.0.75.0/24的NAT網路 Netstartdocker Docker將以使用者定義的NAT網路作為預設值來連接Windows容器 最後,您應該有兩個內部vSwitch–一個名為DockerNAT,另一個名為nat。

您只能只會有一個透過執行Get-NetNat確認的NAT網路(10.0.0.0/17)。

Windows主機網路服務(HNS)會從10.0.76.0/24子網路指派Windows容器的IP位址。

根據現有的MobyLinux.ps1指令碼,將會從10.0.75.0/24子網路指派Docker4Windows的IP位址。

疑難排解 不支援多個NAT網路 本指南假設主機上沒有其他NAT。

不過,應用程式或服務將會需要使用NAT,而且可能會在安裝程序中建立。

由於Windows(WinNAT)只支援一個內部NAT子網路首碼,嘗試建立多個NAT會讓系統進入不明的狀態。

若要看看這是否是問題,請確定您只有一個NAT: Get-NetNat 如果NAT已經存在,請刪除它 Get-NetNat|Remove-NetNat 請確定您只有一個「內部」vmSwitch供應用程式或功能使用(例如Windows容器)。

記錄vSwitch的名稱 Get-VMSwitch 查看是否有私人IP位址(例如NAT預設閘道IP位址-通常是x。

y。

仍指派給介面卡的舊NAT中的z.1) Get-NetIPAddress-InterfaceAlias"vEthernet()" 如果舊的私人IP位址正在使用中,請將它刪除 Remove-NetIPAddress-InterfaceAlias"vEthernet()"-IPAddress 移除多個NAT 我們看到報告顯示意外建立了多個NAT網路。

這是近期組建的Bug所造成(包括WindowsServer2016TechnicalPreview5和Windows10InsiderPreview組建)。

如果您在執行docker網路ls或Get-ContainerNetwork之後,看到多個NAT網路,請從提高權限的PowerShell執行下列作業︰ $keys=Get-ChildItem"HKLM:\SYSTEM\CurrentControlSet\Services\vmsmp\parameters\SwitchList" foreach($keyin$keys) { if($key.GetValue("FriendlyName")-eq'nat') { $newKeyPath=$KeyPath+"\"+$key.PSChildName Remove-Item-Path$newKeyPath-Recurse } } Remove-NetNat-Confirm:$false Get-ContainerNetwork|Remove-ContainerNetwork Get-VmSwitch-Namenat|Remove-VmSwitch#failureisexpected Stop-Servicedocker Set-Servicedocker-StartupTypeDisabled 先將作業系統重新開機,再執行後續的命令(Restart-Computer) Get-NetNat|Remove-NetNat Set-Servicedocker-StartupTypeAutomatic Start-Servicedocker 請參閱使用相同NAT的多個應用程式設定指南,視需要重建NAT環境。

參考資料 深入了解NAT網路 本文內容



請為這篇文章評分?