Bagikan melalui


Mengakses aplikasi jaringan dengan WSL

Ada beberapa pertimbangan yang perlu diperhatikan saat bekerja dengan aplikasi jaringan dan WSL. Secara default WSL menggunakan arsitektur berbasis NAT , dan sebaiknya coba mode jaringan Mirrored baru untuk mendapatkan fitur dan peningkatan terbaru.

Identifikasi alamat IP

Ada dua skenario yang perlu dipertimbangkan saat mengidentifikasi alamat IP yang digunakan untuk distribusi Linux yang berjalan melalui WSL:

Skenario Satu: Dari perspektif host Windows, Anda ingin meminta alamat IP distribusi Linux yang berjalan melalui WSL2, sehingga program di host Windows dapat terhubung ke program server yang berjalan di dalam distribusi (instans).

Host Windows dapat menggunakan perintah:

wsl -d <DistributionName> hostname -I

Jika mengkueri distribusi default, bagian perintah yang menunjuk distribusi ini dapat dihilangkan: -d <DistributionName>. Pastikan untuk menggunakan bendera kapital -I dan bukan huruf -ikecil .

Di balik layar, perintah host wsl.exe meluncurkan instans target dan menjalankan perintah Linux hostname -I (singkatan dari --all-ip-addresses). Perintah ini kemudian mencetak alamat IP instans WSL ke STDOUT. Konten teks STDOUT kemudian disampaikan kembali ke wsl.exe. Terakhir, wsl.exe menampilkan output tersebut ke baris perintah.

Sebuah output umum mungkin:

172.30.98.229

Skenario Dua: Program yang berjalan di dalam distribusi Linux melalui WSL2 (instans) ingin mengetahui alamat IP host Windows, sehingga program Linux dapat terhubung ke program server host Windows.

Pengguna WSL2 Linux dapat menggunakan perintah:

ip route show | grep -i default | awk '{ print $3}'

Sebuah output umum mungkin:

172.30.96.1

Jadi 172.30.96.1 adalah alamat IP host untuk Windows, dalam contoh ini.

Nota

Tindakan kueri alamat IP di atas ini biasanya diperlukan ketika WSL2 berjalan dengan mode jaringan NAT default. Ketika WSL2 dijalankan dengan mode pencerminan terbaru , host Windows dan VM WSL2 dapat terhubung satu sama lain menggunakan localhost (127.0.0.1) sebagai alamat tujuan, sehingga trik menggunakan alamat IP rekan kueri tidak diperlukan.

Mode jaringan default: NAT

Secara default, WSL menggunakan arsitektur berbasis NAT (Network Address Translation) untuk jaringan. Ingatlah pertimbangan berikut saat bekerja dengan arsitektur jaringan berbasis NAT:

Mengakses aplikasi jaringan Linux dari Windows (localhost)

Jika Anda membangun aplikasi jaringan (misalnya aplikasi yang berjalan di server NodeJS atau SQL) di distribusi Linux, Anda dapat mengaksesnya dari aplikasi Windows (seperti browser internet Edge atau Chrome Anda) menggunakan localhost (seperti biasanya).

Mengakses aplikasi jaringan Windows dari Linux (IP host)

Jika Anda ingin mengakses aplikasi jaringan yang berjalan di Windows (misalnya aplikasi yang berjalan di server NodeJS atau SQL) dari distribusi Linux Anda (yaitu Ubuntu), maka Anda perlu menggunakan alamat IP komputer host Anda. Meskipun ini bukan skenario umum, Anda dapat mengikuti langkah-langkah ini untuk membuatnya berfungsi.

  1. Dapatkan alamat IP komputer host Anda dengan menjalankan perintah ini dari distribusi Linux Anda:
ip route show | grep -i default | awk '{ print $3}'
  1. Sambungkan ke server Windows mana pun menggunakan alamat IP yang disalin.

Gambar di bawah ini memperlihatkan contoh ini dengan menyambungkan ke server Node.js yang berjalan di Windows melalui curl.

Menyambungkan ke server NodeJS di Windows melalui Curl

Menyambungkan melalui alamat IP jarak jauh

Saat menggunakan alamat IP jarak jauh untuk terhubung ke aplikasi Anda, alamat IP tersebut akan diperlakukan sebagai koneksi dari Jaringan Area Lokal (LAN). Ini berarti Bahwa Anda harus memastikan aplikasi Anda dapat menerima koneksi LAN.

Misalnya, Anda mungkin perlu mengikat aplikasi Anda untuk 0.0.0.0 alih-alih 127.0.0.1. Dalam contoh aplikasi Python menggunakan Flask, ini dapat dilakukan dengan perintah: app.run(host='0.0.0.0'). Ingatlah keamanan saat membuat perubahan ini karena ini akan memungkinkan koneksi dari LAN Anda.

Mengakses distribusi WSL 2 dari jaringan area lokal (LAN) Anda

Saat menggunakan distribusi WSL 1, jika komputer Anda disiapkan untuk diakses oleh LAN Anda, maka aplikasi yang berjalan di WSL juga dapat diakses di LAN Anda.

Ini bukan kasus default di WSL 2. WSL 2 memiliki adaptor ethernet virtual dengan alamat IP uniknya sendiri. Saat ini, untuk mengaktifkan alur kerja ini, Anda harus melalui langkah-langkah yang sama seperti yang Anda lakukan untuk komputer virtual biasa. (Kami mencari cara untuk meningkatkan pengalaman ini.)

Berikut adalah contoh penggunaan perintah Windows Netsh interface portproxy untuk menambahkan proksi port yang mendengarkan pada port host Anda dan menghubungkan proksi port tersebut ke alamat IP VM WSL 2.

netsh interface portproxy add v4tov4 listenport=<yourPortToForward> listenaddress=0.0.0.0 connectport=<yourPortToConnectToInWSL> connectaddress=(wsl hostname -I)

Dalam contoh ini, Anda harus memperbarui <yourPortToForward> ke nomor port, misalnya listenport=4000. listenaddress=0.0.0.0 berarti bahwa permintaan masuk akan diterima dari alamat IP APA PUN. Alamat Dengar menentukan alamat IPv4 yang akan didengarkan dan dapat diubah ke nilai yang mencakup: alamat IP, nama NetBIOS komputer, atau nama DNS komputer. Jika alamat tidak ditentukan, defaultnya adalah komputer lokal. Anda perlu memperbarui nilai <yourPortToConnectToInWSL> ke nomor port tempat Anda ingin WSL tersambung, misalnya connectport=4000. Terakhir, nilai connectaddress harus menjadi alamat IP distribusi Linux Anda yang diinstal melalui WSL 2 (alamat VM WSL 2), yang dapat ditemukan dengan memasukkan perintah: wsl.exe hostname -I.

Jadi perintah ini mungkin terlihat seperti:

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100

Untuk mendapatkan alamat IP, gunakan:

  • wsl hostname -I untuk alamat IP distribusi Linux Anda yang diinstal melalui WSL 2 (alamat VM WSL 2)
  • cat /etc/resolv.conf untuk alamat IP komputer Windows seperti yang terlihat dari WSL 2 (WSL 2 VM)

Menggunakan listenaddress=0.0.0.0 akan mendengarkan semua port IPv4 .

Nota

Menggunakan huruf kecil "i" dengan perintah nama host akan menghasilkan hasil yang berbeda dari menggunakan huruf besar "I". wsl hostname -i adalah komputer lokal Anda (127.0.1.1 adalah alamat diagnostik tempat penampung), sedangkan wsl hostname -I akan mengembalikan alamat IP komputer lokal Anda seperti yang terlihat oleh mesin lain dan harus digunakan untuk mengidentifikasi connectaddress distribusi Linux Anda yang berjalan melalui WSL 2.

Akses IPv6

  • wsl hostname -i untuk alamat IP distribusi Linux Anda yang diinstal melalui WSL 2 (alamat VM WSL 2)
  • ip route show | grep -i default | awk '{ print $3}' untuk alamat IP komputer Windows seperti yang terlihat dari WSL 2 (WSL 2 VM)

Menggunakan listenaddress=0.0.0.0 akan mendengarkan semua port IPv4 .

Jaringan mode cermin

Pada komputer yang menjalankan Windows 11 22H2 dan yang lebih tinggi, Anda dapat mengatur networkingMode=mirrored di bawah [wsl2] dalam file .wslconfig untuk mengaktifkan jaringan mode cermin. Mengaktifkan perubahan ini WSL ke arsitektur jaringan yang sama sekali baru yang memiliki tujuan 'mencerminkan' antarmuka jaringan yang Anda miliki di Windows ke Linux, untuk menambahkan fitur jaringan baru dan meningkatkan kompatibilitas.

Berikut adalah manfaat saat ini untuk mengaktifkan mode ini:

  • Dukungan IPv6
  • Sambungkan ke server Windows dari dalam Linux menggunakan alamat localhost 127.0.0.1. Alamat localhost IPv6 ::1 tidak didukung
  • Kompatibilitas jaringan yang ditingkatkan untuk VPN
  • Dukungan multicast
  • Sambungkan ke WSL langsung dari jaringan area lokal (LAN) Anda

Nota

Jalankan perintah berikut di jendela PowerShell dengan hak istimewa admin untuk Mengonfigurasi pengaturan firewall Hyper-V untuk mengizinkan koneksi masuk: Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow atau New-NetFirewallHyperVRule -Name "MyWebServer" -DisplayName "My Web Server" -Direction Inbound -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -Protocol TCP -LocalPorts 80.

Mode baru ini mengatasi masalah jaringan yang terlihat dengan menggunakan arsitektur berbasis NAT (Network Address Translation). Temukan masalah yang diketahui atau kirimkan umpan balik pada bug apa pun yang diidentifikasi dalam repositori produk WSL di GitHub.

Penerowongan DNS

Pada komputer yang menjalankan Windows 11 22H2 dan versi yang lebih tinggi, pengaturan dnsTunneling=true di bawah [wsl2] dalam file .wslconfig membuat WSL menggunakan fitur virtualisasi untuk menjawab permintaan DNS dari dalam WSL, daripada memintanya melalui paket jaringan. Fitur ini bertujuan untuk meningkatkan kompatibilitas dengan VPN, dan pengaturan jaringan kompleks lainnya.

Proksi Otomatis

Pada komputer dengan Windows 11 22H2 atau lebih tinggi, mengatur autoProxy=true di bawah [wsl2] dalam file .wslconfig memaksa WSL menggunakan informasi proksi HTTP Windows. Jika Anda memiliki proksi yang sudah disiapkan di Windows, mengaktifkan fitur ini akan membuat proksi tersebut juga diatur secara otomatis di WSL.

WSL dan firewall

Pada komputer yang menjalankan Windows 11 22H2 dan yang lebih tinggi, dengan WSL 2.0.9 dan yang lebih tinggi, fitur firewall Hyper-V akan diaktifkan secara default. Ini akan memastikan bahwa:

  • Lihat Windows Defender Firewall dengan Keamanan Tingkat Lanjut untuk mempelajari selengkapnya tentang fitur keamanan Windows yang akan secara otomatis berlaku untuk WSL.
  • Lihat Mengonfigurasi firewall Hyper-V untuk mempelajari selengkapnya tentang menerapkan aturan dan pengaturan ini baik secara lokal maupun melalui alat online seperti Intune.