Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Windows 10 dan Windows 11 Hyper-V memungkinkan terjemahan alamat jaringan asli (NAT) untuk jaringan virtual.
Panduan ini memandu Anda melalui cara:
- Membuat jaringan NAT
- Menyambungkan komputer virtual yang ada ke jaringan baru Anda
- Konfirmasikan bahwa komputer virtual terhubung dengan benar
Persyaratan:
- Pembaruan Ulang Tahun Windows 10 atau yang lebih baru
- Hyper-V diaktifkan. Ikuti instruksi untuk Mengaktifkan Hyper-V
Catatan
Saat ini, Anda terbatas pada satu jaringan NAT per host. Untuk detail tambahan tentang implementasi, kemampuan, dan batasan Windows NAT (WinNAT), lihat blog kemampuan dan batasan WinNAT
Gambaran Umum NAT
NAT memberikan akses komputer virtual ke sumber daya jaringan menggunakan alamat IP komputer host dan port melalui Hyper-V Virtual Switch internal.
Network Address Translation (NAT) adalah mode jaringan yang dirancang untuk menghemat alamat IP dengan memetakan alamat IP eksternal dan port ke sekumpulan alamat IP internal yang jauh lebih besar. Pada dasarnya, NAT menggunakan tabel alur untuk merutekan lalu lintas dari Alamat IP eksternal (host) dan nomor port ke alamat IP internal yang benar yang terkait dengan titik akhir di jaringan (komputer virtual, komputer, kontainer, dll.).
Selain itu, NAT memungkinkan beberapa komputer virtual untuk menghosting aplikasi yang memerlukan port komunikasi (internal) yang identik dengan memetakannya ke port eksternal yang unik.
Untuk semua alasan ini, jaringan NAT sangat umum untuk teknologi kontainer (lihat Jaringan Kontainer).
Membuat jaringan virtual NAT
Mari kita telusuri pengaturan jaringan NAT baru.
Buka konsol PowerShell sebagai Administrator.
Buat sakelar internal.
New-VMSwitch -SwitchName "SwitchName" -SwitchType Internal
Temukan indeks antarmuka sakelar virtual yang baru saja Anda buat.
PS C:\> Get-NetAdapter Name InterfaceDescription ifIndex Status MacAddress LinkSpeed ---- -------------------- ------- ------ ---------- --------- vEthernet (intSwitch) Hyper-V Virtual Ethernet Adapter 24 Up 00-15-5D-00-6A-01 10 Gbps Wi-Fi Marvell AVASTAR Wireless-AC Net... 18 Up 98-5F-D3-34-0C-D3 300 Mbps Bluetooth Network ... Bluetooth Device ... 21 Disconnected 98-5F-D3-34-0C-D4 3 Mbps
Sakelar internal memiliki sebuah nama seperti
vEthernet (SwitchName)
dan sebuah Deskripsi AntarmukaHyper-V Virtual Ethernet Adapter
. CatatifIndex
untuk digunakan di langkah berikutnya.Konfigurasikan gateway NAT menggunakan New-NetIPAddress.
Berikut adalah perintah generik:
New-NetIPAddress -IPAddress <NAT Gateway IP> -PrefixLength <NAT Subnet Prefix Length> -InterfaceIndex <ifIndex>
Untuk mengonfigurasi gateway, Anda memerlukan sedikit informasi tentang jaringan Anda:
- IPAddress -- NAT Gateway IP menentukan alamat IPv4 atau IPv6 untuk digunakan sebagai IP gateway NAT.
Bentuk generik adalah a.b.c.1 (misalnya 172.16.0.1). Meskipun posisi akhir tidak harus .1, biasanya (berdasarkan panjang awalan). Alamat IP ini berada dalam rentang alamat yang digunakan oleh komputer virtual tamu. Misalnya, jika VM tamu menggunakan rentang IP 172.16.0.0, maka Anda dapat menggunakan alamat IP 172.16.0.100 sebagai NAT Gateway. IP gateway umum adalah 192.168.0.1
PrefixLength -- NAT Subnet Prefix Length mendefinisikan ukuran subnet lokal NAT (subnet mask). Panjang awalan subnet adalah nilai bilangan bulat antara 0 dan 32.
0 akan memetakan seluruh internet, 32 hanya akan mengizinkan satu IP yang dipetakan. Nilai umum berkisar dari 24 hingga 12 tergantung pada berapa banyak IP yang perlu dilampirkan ke NAT.
PrefixLength umum adalah 24 -- ini adalah subnet mask 255.255.255.0
InterfaceIndex -- ifIndex adalah indeks antarmuka sakelar virtual, yang Anda tentukan di langkah sebelumnya.
Jalankan hal berikut untuk membuat NAT Gateway:
New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceIndex 24
Konfigurasikan jaringan NAT menggunakan New-NetNat.
Berikut adalah perintah generik:
New-NetNat -Name <NATOutsideName> -InternalIPInterfaceAddressPrefix <NAT subnet prefix>
Untuk mengonfigurasi gateway, Anda harus memberikan informasi tentang jaringan dan NAT Gateway:
Nama -- NATOutsideName menjelaskan nama jaringan NAT. Anda akan menggunakan ini untuk menghapus jaringan NAT.
InternalIPInterfaceAddressPrefix -- Prefiks subnet NAT menjelaskan baik prefiks IP Gateway NAT maupun Panjang Prefiks Subnet NAT.
Format generik adalah Panjang Awalan Subnet a.b.c.0/NAT
Untuk contoh ini, kita akan menggunakan 192.168.0.0/24
Jalankan hal berikut untuk menyiapkan jaringan NAT:
New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24
Selamat! Anda sekarang memiliki jaringan NAT virtual!
Menyambungkan komputer virtual
Untuk menyambungkan komputer virtual ke jaringan NAT baru Anda, sambungkan sakelar internal yang Anda buat di langkah pertama artikel ini ke komputer virtual Anda menggunakan menu Pengaturan VM.
Karena WinNAT dengan sendirinya tidak mengalokasikan dan menetapkan alamat IP ke titik akhir (misalnya VM), Anda harus melakukan ini secara manual dari dalam VM itu sendiri - yaitu mengatur alamat IP dalam rentang awalan internal NAT, mengatur alamat IP gateway default, mengatur informasi server DNS. Satu-satunya peringatan untuk ini adalah ketika titik akhir dilampirkan ke kontainer. Dalam hal ini, Host Network Service (HNS) mengalokasikan dan menggunakan Host Compute Service (HCS) untuk menetapkan alamat IP, IP gateway, dan info DNS ke kontainer secara langsung.
Contoh Konfigurasi: Melampirkan VM dan Kontainer ke jaringan NAT
Jika Anda perlu melampirkan beberapa VM dan kontainer ke satu NAT, Anda harus memastikan bahwa awalan subnet internal NAT cukup besar untuk mencakup rentang IP yang ditetapkan oleh aplikasi atau layanan yang berbeda (misalnya Docker untuk Windows dan Windows Container – HNS). Ini memerlukan penetapan IP tingkat aplikasi dan konfigurasi jaringan atau konfigurasi manual yang harus dilakukan oleh admin dan dijamin untuk tidak menggunakan kembali penetapan IP yang ada pada host yang sama.
Docker untuk Windows (Linux VM) dan Kontainer Windows
Dalam bagian ini, pelajari cara membuat Docker untuk Windows (VM Linux menjalankan kontainer Linux) dan Kontainer Windows agar dapat berbagi instans WinNAT yang sama dengan menggunakan vSwitch internal yang terpisah. Konektivitas antara kontainer Linux dan Windows berfungsi.
Pengguna telah menghubungkan VM ke jaringan NAT melalui vSwitch internal bernama "VMNAT" dan sekarang ingin menginstal fitur Kontainer Windows dengan mesin docker:
PS C:\> Get-NetNat “VMNAT”| Remove-NetNat (this removes the NAT but keep the internal vSwitch).
Install Windows Container Feature
DO NOT START Docker Service (daemon)
Edit the arguments passed to the docker daemon (dockerd) by adding –fixed-cidr=<container prefix> parameter. This tells docker to create a default nat network with the IP subnet <container prefix> (e.g. 192.168.1.0/24) so that HNS can allocate IPs from this prefix.
PS C:\> Start-Service Docker; Stop-Service Docker
PS C:\> Get-NetNat | Remove-NetNAT (again, this removes the NAT but keep the internal vSwitch)
PS C:\> New-NetNat -Name SharedNAT -InternalIPInterfaceAddressPrefix <shared prefix>
PS C:\> Start-Service docker
Docker/HNS menetapkan IP ke kontainer Windows dan Admin menetapkan IP ke VM dari set perbedaan keduanya.
Pengguna telah menginstal fitur Kontainer Windows dengan mesin docker yang berjalan dan sekarang ingin menyambungkan VM ke jaringan NAT:
PS C:\> Stop-Service docker
PS C:\> Get-ContainerNetwork | Remove-ContainerNetwork -force
PS C:\> Get-NetNat | Remove-NetNat (this will remove the NAT but keep the internal vSwitch)
Edit the arguments passed to the docker daemon (dockerd) by adding -b “none” option to the end of docker daemon (dockerd) command to tell docker not to create a default NAT network.
PS C:\> New-ContainerNetwork –name nat –Mode NAT –subnetprefix <container prefix> (create a new NAT and internal vSwitch – HNS will allocate IPs to container endpoints attached to this network from the <container prefix>)
PS C:\> Get-Netnat | Remove-NetNAT (again, this will remove the NAT but keep the internal vSwitch)
PS C:\> New-NetNat -Name SharedNAT -InternalIPInterfaceAddressPrefix <shared prefix>
PS C:\> New-VirtualSwitch -Type internal (attach VMs to this new vSwitch)
PS C:\> Start-Service docker
Docker/HNS menetapkan IP ke kontainer Windows dan Admin menetapkan IP ke VM dari set perbedaan keduanya.
Pada akhirnya, Anda akan memiliki dua sakelar VM internal dan satu NetNat yang dibagikan di antara keduanya.
Beberapa Aplikasi menggunakan NAT yang sama
Beberapa skenario memerlukan beberapa aplikasi atau layanan untuk menggunakan NAT yang sama. Dalam hal ini, alur kerja berikut harus diikuti sehingga beberapa aplikasi/layanan dapat menggunakan awalan subnet internal NAT yang lebih besar
Kami akan merinci Docker 4 Windows - Docker Beta - Linux VM yang ada bersama dengan fitur Kontainer Windows pada host yang sama sebagai contoh. Alur kerja ini dapat berubah
-
net stop docker
-
Stop Docker4Windows MobyLinux VM
-
Get-ContainerNetwork | Remove-ContainerNetwork -force
Hapus jaringan kontainer yang sudah ada sebelumnya (yaitu menghapus vSwitch, menghapus NetNat, membersihkan).
Get-NetNat | Remove-NetNat
Buat vSwitch internal bernama nat, dan jaringan NAT dengan awalan IP 10.0.76.0/24.
New-ContainerNetwork -Name nat -Mode NAT –subnetprefix 10.0.76.0/24
Hapus jaringan DockerNAT dan nat NAT (tetap menjaga vSwitch internal).
Remove-NetNAT
Buat jaringan NAT bernama DockerNAT dengan awalan lebih besar 10.0.0.0/17 agar dapat digunakan bersama oleh D4W dan kontainer.
New-NetNat -Name DockerNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/17
Jalankan Docker4Windows (MobyLinux.ps1)
Gunakan jaringan NAT yang ditentukan pengguna sebagai default untuk menyambungkan kontainer Windows.
Net start docker
Pada akhirnya, Anda memiliki dua vSwitch internal - satu bernama DockerNAT dan yang lain bernama nat. Anda hanya memiliki satu jaringan NAT (10.0.0.0/17) yang dikonfirmasi dengan menjalankan Get-NetNat. Alamat IP untuk kontainer Windows ditetapkan oleh Windows Host Network Service (HNS) dari subnet 10.0.76.0/24. Berdasarkan skrip MobyLinux.ps1 yang ada, alamat IP untuk Docker 4 Windows ditetapkan dari subnet 10.0.75.0/24.
Pemecahan Masalah
Beberapa jaringan NAT tidak didukung
Panduan ini mengasumsikan bahwa tidak ada NAT lain di host. Namun, aplikasi atau layanan memerlukan penggunaan NAT dan dapat membuatnya sebagai bagian dari penyiapan. Karena Windows (WinNAT) hanya mendukung satu awalan subnet NAT internal, upaya untuk membuat beberapa NAT akan menempatkan sistem ke dalam kondisi yang tidak diketahui.
Untuk melihat apakah ini mungkin masalahnya, pastikan Anda hanya memiliki satu NAT:
Get-NetNat
Jika NAT sudah ada, hapus:
Get-NetNat | Remove-NetNat
Pastikan Anda hanya memiliki satu vmSwitch "internal" untuk aplikasi atau fitur (misalnya kontainer Windows). Catat nama vSwitch:
Get-VMSwitch
Periksa untuk melihat apakah ada alamat IP privat (misalnya Alamat IP Gateway default NAT – biasanya x.y.z.1) dari NAT lama yang masih ditetapkan ke adaptor:
Get-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)"
Jika alamat IP privat lama sedang digunakan, silakan hapus:
Remove-NetIPAddress -InterfaceAlias "vEthernet (<name of vSwitch>)" -IPAddress <IPAddress>
Menghapus Banyak NAT Kami telah melihat laporan banyak jaringan NAT yang dibuat secara tidak sengaja. Jika Anda melihat beberapa jaringan NAT, setelah menjalankan docker network ls atau Get-ContainerNetwork, lakukan hal berikut dari PowerShell dengan hak akses administrator:
$keys = Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Services\vmsmp\parameters\SwitchList"
foreach($key in $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 -Name nat | Remove-VmSwitch # failure is expected
Stop-Service docker
Set-Service docker -StartupType Disabled
Reboot sistem operasi sebelum menjalankan perintah berikutnya (Restart-Computer
)
Get-NetNat | Remove-NetNat
Set-Service docker -StartupType Automatic
Start-Service docker