Nỗi khổ khi dùng Networking mặc định trên WSL2
Ai dùng WSL2 lâu năm chắc đều từng “phát điên” vì cái IP thay đổi xoành xoạch mỗi lần restart máy. Cơ chế NAT (Network Address Translation) mặc định biến WSL2 thành một ốc đảo tách biệt. Bạn muốn trỏ file host, kết nối Database từ máy thật vào hay chạy các dịch vụ cần IP tĩnh? Chuẩn bị sẵn tinh thần sửa cấu hình mỗi ngày đi.
Mình đang vận hành một homelab với 12 VM trên Proxmox. Khi chuyển sang WSL2, mình luôn kỳ vọng một trải nghiệm mạng nhất quán như máy ảo thật. May mắn là Microsoft đã tung ra tính năng Networking Mirroring. Nó giúp xóa bỏ hoàn toàn lớp NAT phiền phức giữa Windows và Linux.
Networking Mirroring: Khi Windows và Linux hòa làm một
Thay vì nằm sau một con router ảo, chế độ Mirroring biến card mạng Windows thành một chiếc gương soi trực tiếp vào WSL2.
- Dùng chung địa chỉ IP: Windows nhận IP 192.168.1.15 thì WSL2 cũng y hệt. Bạn không còn phải vã mồ hôi cấu hình port forwarding thủ công.
- Hỗ trợ IPv6 đầy đủ: Giờ đây bạn có thể test các ứng dụng dual-stack ngay trên máy cá nhân.
- Kết nối Localhost: Các dịch vụ chạy trên Windows có thể truy cập từ WSL2 qua localhost với độ trễ gần như bằng 0.
- Tốc độ vượt trội: Giảm đáng kể overhead do không phải xử lý đóng gói gói tin qua lớp NAT.
Điều kiện để “lên đời”
Tính năng này không dành cho các bản Windows cũ. Bạn cần chuẩn bị:
- Windows 11 phiên bản 22H2 trở lên (Build 22621+).
- WSL phiên bản 2.0.0 hoặc mới hơn. Kiểm tra nhanh bằng lệnh
wsl --version.
Các bước cấu hình trong 2 phút
Bước 1: Mở file cấu hình .wslconfig
Mọi thiết lập hệ thống của WSL2 đều nằm trong một file text duy nhất ở thư mục người dùng. Bạn nhấn Win + R, gõ %USERPROFILE% và Enter. Tại đây, hãy tạo một file mới tên là .wslconfig nếu chưa có.
Bước 2: Kích hoạt Mirroring và IPv6
Dán đoạn code dưới đây vào file .wslconfig bằng Notepad hoặc VS Code:
[wsl2]
# Chuyển sang chế độ soi chiếu card mạng
networkingMode=mirrored
# Bật IPv6
ipv6=true
# Fix lỗi DNS khi dùng VPN (như Cisco AnyConnect hoặc GlobalProtect)
dnsTunneling=true
# Tự động mở Firewall Windows cho WSL2
firewall=true
# Đồng bộ cấu hình Proxy từ Windows sang Linux
autoProxy=true
Dòng networkingMode=mirrored chính là chìa khóa thay đổi cuộc chơi. Ngoài ra, dnsTunneling cực kỳ quan trọng nếu bạn thường xuyên làm việc từ xa. Nó giúp WSL2 không bị mất mạng mỗi khi bạn bật/tắt VPN trên máy thật.
Bước 3: Restart lại toàn bộ hệ thống
Lưu file xong, bạn cần tắt hẳn WSL2 để áp dụng cấu hình mới. Mở PowerShell và gõ:
wsl --shutdown
Bây giờ, chỉ cần mở lại Ubuntu là mọi thứ đã sẵn sàng.
Kiểm tra thành quả
Soi địa chỉ IP mới
Gõ lệnh này trong terminal WSL2:
ip addr
Bạn sẽ thấy danh sách interface mạng hiện ra y hệt như trên Windows. Cả Wi-Fi lẫn Ethernet đều xuất hiện. Nếu router nhà bạn có IPv6, WSL2 cũng sẽ nhận được một địa chỉ global tương ứng.
Thử nghiệm IPv6 thực tế
Kiểm tra kết nối ra thế giới bằng lệnh ping:
ping -6 google.com
Nếu thấy phản hồi trả về, nghĩa là môi trường dev của bạn đã hỗ trợ dual-stack hoàn chỉnh.
Lưu ý từ trải nghiệm thực tế
Sau 6 tháng dùng Mirroring mode, mình rút ra 3 điều anh em cần nhớ:
- Tránh đụng hàng Port: Vì dùng chung IP, nếu bạn chạy Nginx port 80 trên Windows thì WSL2 không thể dùng port 80 được nữa. Hãy quản lý port như đang dùng một server thực thụ.
- Windows Firewall: Đôi khi firewall vẫn chặn các kết nối Inbound từ máy khác trong LAN. Nếu dựng web server trong WSL2 mà máy khác không vào được, hãy kiểm tra lại bảng Inbound Rules.
- Docker Desktop: Hãy cập nhật Docker lên bản mới nhất. Các bản cũ có thể gặp lỗi network khi chuyển sang chế độ Mirroring.
Việc giả lập mạng chuẩn giúp mình phát hiện lỗi kết nối ngay từ máy cá nhân. Nó tiết kiệm hàng giờ debug khi đẩy code lên môi trường Production trên Cloud hoặc Proxmox.
Lời kết
Cấu hình Networking Mirroring là việc nên làm ngay nếu bạn muốn biến WSL2 thành công cụ làm việc chuyên nghiệp. Thiết lập này không chỉ fix lỗi mất mạng khi dùng VPN mà còn mang lại trải nghiệm mạng mượt mà hơn hẳn. Thử cấu hình ngay hôm nay, bạn sẽ thấy việc quản lý IP trên WSL2 không còn là cơn ác mộng nữa.

