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.
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 -i
kecil .
Di bawah kap, perintah wsl.exe
host meluncurkan instans target dan menjalankan perintah hostname -I
Linux . Perintah ini kemudian mencetak alamat IP instans WSL ke STDOUT
. Konten STDOUT
teks kemudian disampaikan kembali ke wsl.exe. Terakhir, wsl.exe menampilkan output tersebut ke baris perintah.
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}'
Output umum mungkin:
172.30.96.1
172.30.96.1
Jadi adalah alamat IP host untuk Windows, dalam contoh ini.
Catatan
Tindakan kueri alamat IP di atas ini biasanya diperlukan ketika WSL2 berjalan dengan mode jaringan NAT default.
Ketika WSL2 berjalan dengan mode cermin baru, host Windows dan VM WSL2 dapat terhubung satu sama lain menggunakan localhost
(127.0.0.1) sebagai alamat tujuan, sehingga trik menggunakan alamat IP serekan kueri tidak diperlukan.
Secara default, WSL menggunakan arsitektur berbasis NAT (Network Address Translation) untuk jaringan. Ingatlah pertimbangan berikut saat bekerja dengan arsitektur jaringan berbasis NAT:
Jika Anda membangun aplikasi jaringan (misalnya aplikasi yang berjalan di nodeJS atau server SQL) di distribusi Linux, Anda dapat mengaksesnya dari aplikasi Windows (seperti browser internet Edge atau Chrome Anda) menggunakan localhost
(seperti biasa).
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.
- Dapatkan alamat IP komputer host Anda dengan menjalankan perintah ini dari distribusi Linux Anda:
ip route show | grep -i default | awk '{ print $3}'
- 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.
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 ke 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.
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 portproxy antarmuka Netsh untuk menambahkan proksi port yang mendengarkan port host Anda dan menyambungkan proksi port tersebut ke alamat IP untuk 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 ke <yourPortToConnectToInWSL>
nomor port tempat Anda ingin WSL tersambung, misalnya connectport=4000
. Terakhir, connectaddress
nilai 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 di semua port IPv4.
Catatan
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 komputer lain dan harus digunakan untuk mengidentifikasi connectaddress
distribusi Linux Anda yang berjalan melalui WSL 2.
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 di semua port IPv4.
Pada komputer yang menjalankan Windows 11 22H2 dan yang lebih tinggi, Anda dapat mengatur networkingMode=mirrored
di bawah [wsl2]
dalam .wslconfig
file 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
127.0.0.1
localhost . Alamat::1
localhost IPv6 tidak didukung - Kompatibilitas jaringan yang ditingkatkan untuk VPN
- Dukungan multicast
- Sambungkan ke WSL langsung dari jaringan area lokal (LAN) Anda
Catatan
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 umpan balik file pada bug apa pun yang diidentifikasi dalam repositori produk WSL di GitHub.
Pada komputer yang menjalankan Windows 11 22H2 dan yang lebih tinggi, pengaturan dnsTunneling=true
di bawah [wsl2]
dalam .wslconfig
file memiliki WSL menggunakan fitur virtualisasi untuk menjawab permintaan DNS dari dalam WSL, alih-alih memintanya melalui paket jaringan. Fitur ini bertujuan untuk meningkatkan kompatibilitas dengan VPN, dan pengaturan jaringan kompleks lainnya.
Pada komputer yang menjalankan Windows 11 22H2 dan yang lebih tinggi, pengaturan autoProxy=true
di bawah [wsl2]
dalam .wslconfig
file memberlakukan WSL untuk 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.
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 Advanced Security untuk mempelajari selengkapnya tentang fitur keamanan Windows yang akan diterapkan secara otomatis ke WSL.
- Lihat Mengonfigurasi firewall Hyper-V untuk mempelajari selengkapnya tentang menerapkan aturan dan pengaturan ini baik secara lokal maupun melalui alat online seperti Intune.
Umpan balik Windows Subsystem for Linux
Windows Subsystem for Linux adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: