Bagikan melalui


Menyiapkan jaringan NAT

Windows 10 Hyper-V memungkinkan native network address translation (NAT) untuk jaringan virtual.

Panduan ini akan memandu Anda melalui:

  • membuat jaringan NAT
  • menyambungkan komputer virtual yang ada ke jaringan baru Anda
  • mengonfirmasi bahwa komputer virtual terhubung dengan benar

Persyaratan:

  • Pembaruan Ulang Tahun Windows 10 atau yang lebih baru
  • Hyper-V diaktifkan (instruksi di sini)

Catatan: Saat ini, Anda terbatas pada satu jaringan NAT per host. Untuk detail tambahan tentang implementasi, kemampuan, dan batasan Windows NAT (WinNAT), silakan referensikan 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 yang identik (internal) dengan memetakannya ke port eksternal yang unik.

Untuk semua alasan ini, jaringan NAT sangat umum untuk teknologi kontainer (lihat Container Networking).

Membuat jaringan virtual NAT

Mari kita telusuri pengaturan jaringan NAT baru.

  1. Buka konsol PowerShell sebagai Administrator.

  2. Buat sakelar internal.

    New-VMSwitch -SwitchName "SwitchName" -SwitchType Internal
    
  3. Temukan indeks antarmuka sakelar virtual yang baru saja Anda buat.

    Anda dapat menemukan indeks antarmuka dengan menjalankan Get-NetAdapter

    Keluaran Anda akan terlihat seperti ini:

    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 (Personal Area...      21 Disconnected 98-5F-D3-34-0C-D4       3 Mbps
    
    

    Sakelar internal akan memiliki nama seperti vEthernet (SwitchName) dan Deskripsi Hyper-V Virtual Ethernet AdapterAntarmuka . Perhatikan ifIndex untuk digunakan di langkah berikutnya.

  4. 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. Formulir generik akan berupa 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 -- Panjang Awalan Subnet NAT mendefinisikan ukuran subnet lokal NAT (subnet mask). Panjang awalan subnet akan menjadi 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 pada langkah sebelumnya.

    Jalankan yang berikut ini untuk membuat NAT Gateway:

    New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceIndex 24
    
  5. 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 -- Awalan subnet NAT menjelaskan awalan IP NAT Gateway dari atas serta Panjang Awalan Subnet NAT dari atas.

    Formulir generik akan berupa Panjang Awalan Subnet a.b.c.0/NAT

    Dari hal di atas, untuk contoh ini, kita akan menggunakan 192.168.0.0/24

    Misalnya, jalankan hal berikut untuk menyiapkan jaringan NAT:

    New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24
    

Selamat! Anda sekarang memiliki jaringan NAT virtual! Untuk menambahkan komputer virtual, ke jaringan NAT ikuti instruksi ini.

Menyambungkan komputer virtual

Untuk menyambungkan komputer virtual ke jaringan NAT baru Anda, sambungkan sakelar internal yang Anda buat di langkah pertama bagian Penyiapan Jaringan NAT 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 akan 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 Windows Containers

Solusi di bawah ini akan memungkinkan Docker untuk Windows (Linux VM yang menjalankan kontainer Linux) dan Kontainer Windows untuk berbagi instans WinNAT yang sama menggunakan vSwitch internal terpisah. Konektivitas antara kontainer Linux dan Windows akan 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 will remove 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 will remove the NAT but keep the internal vSwitch)
PS C:\> New-NetNat -Name SharedNAT -InternalIPInterfaceAddressPrefix <shared prefix>
PS C:\> Start-Service docker

Docker/HNS akan menetapkan IP ke kontainer Windows dan Admin akan 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 akan menetapkan IP ke kontainer Windows dan Admin akan menetapkan IP ke VM dari set perbedaan keduanya.

Pada akhirnya, Anda harus memiliki dua sakelar VM internal dan satu NetNat yang dibagikan di antara mereka.

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 Windows Container pada host yang sama sebagai contoh. Alur kerja ini dapat berubah

  1. C:> net stop docker

  2. Hentikan Docker4Windows MobyLinux VM

  3. PS C:> Get-ContainerNetwork | Remove-ContainerNetwork -force

  4. PS C:> Get-NetNat | Remove-NetNat
    Menghapus jaringan kontainer yang sudah ada sebelumnya (yaitu menghapus vSwitch, menghapus NetNat, membersihkan)

  5. New-ContainerNetwork -Name nat -Mode NAT –subnetprefix 10.0.76.0/24 (subnet ini akan digunakan untuk fitur kontainer Windows) Membuat vSwitch internal bernama nat
    Membuat jaringan NAT bernama "nat" dengan awalan IP 10.0.76.0/24

  6. Remove-NetNAT
    Menghapus jaringan DockerNAT dan nat NAT (menyimpan vSwitch internal)

  7. New-NetNat -Name DockerNAT -InternalIPInterfaceAddressPrefix 10.0.0.0/17 (ini akan membuat jaringan NAT yang lebih besar untuk D4W dan kontainer untuk dibagikan)
    Membuat jaringan NAT bernama DockerNAT dengan awalan yang lebih besar 10.0.0.0/17

  8. Jalankan Docker4Windows (MobyLinux.ps1)
    Membuat vSwitch DockerNAT internal
    Membuat jaringan NAT bernama "DockerNAT" dengan awalan IP 10.0.75.0/24

  9. Docker mulai bersih
    Docker akan menggunakan jaringan NAT yang ditentukan pengguna sebagai default untuk menyambungkan kontainer Windows

Pada akhirnya, Anda harus memiliki dua vSwitch internal - satu bernama DockerNAT dan yang lain bernama nat. Anda hanya akan memiliki satu jaringan NAT (10.0.0.0/17) yang dikonfirmasi dengan menjalankan Get-NetNat. Alamat IP untuk kontainer Windows akan 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 akan ditetapkan dari subnet 10.0.75.0/24.

Pemecahan Masalah

Beberapa jaringan NAT tidak didukung

Panduan ini mengasumsikan bahwa tidak ada NAT lain pada host. Namun, aplikasi atau layanan akan memerlukan penggunaan NAT dan dapat membuatnya sebagai bagian dari penyiapan. Karena Windows (WinNAT) hanya mendukung satu awalan subnet NAT internal, mencoba membuat beberapa NAT akan menempatkan sistem ke dalam status 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). Merekam 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 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 Beberapa NAT
Kami telah melihat laporan beberapa jaringan NAT yang dibuat secara tidak sengaja. Hal ini disebabkan oleh bug dalam build terbaru (termasuk Pratinjau Teknis Windows Server 2016 5 dan build Pratinjau Insider Windows 10). Jika Anda melihat beberapa jaringan NAT, setelah menjalankan jaringan docker ls atau Get-ContainerNetwork, lakukan hal berikut dari PowerShell yang ditingkatkan:

$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 

Lihat panduan penyiapan ini untuk beberapa aplikasi menggunakan NAT yang sama untuk membangun kembali lingkungan NAT Anda, jika perlu.

Referensi

Baca selengkapnya tentang jaringan NAT