Thông thường khi mình muốn thêm một giao diện mạng cầu nối cho máy ảo trên Hyper-V thì mình phải tạo thêm 1 external switch từ Hyper-V Manager. External Switch này sẽ liên kết với card mạng vật lý trên máy host Hyper-V để tạo cầu nối ra router. Nếu card mạng vật lý đó là loại sử dụng dây cáp LAN thì không có vấn đề gì. Tuy nhiên, với card mạng không dây (Wireless, Wifi) thì cả máy host lẫn máy ảo đều sẽ bị lỗi chậm kết nối. Cụ thể máy mình bình thường có tốc độ download là 300 Mbps. Nhưng sau khi thêm External Switch thì tốc độ rớt xuống còn có 1 Mbps thôi, cả trên máy host Hyper-V và máy ảo.
Nếu bạn chưa cài đặt Hyper-V thì có thể xem bài hướng dẫn cài đặt Hyper-V trên Windows hoặc cách cài đặt máy ảo Ubuntu bằng Multipass với Hyper-V
Sau đây là cách mình đã sử dụng để khắc phục lỗi Hyper-V làm chậm kết nối mạng:
1. Thực hiện trên máy host Hyper-V
Nhấn nút “Windows” trên bàn phím và gõ vào “Network connections”, sau đó chọn “View network connections từ kết quả”
Tiếp tục nhấn chuột phải vào adapter có tên vEthernet (External), chọn “Properties”
Chọn tiếp “Configure”
Tiếp tục chuyển qua tab “Advanced”, sau đó đổi giá trị của 4 mục sau:
- Large Send Offload Version 2 (IPv4) – Disabled
- Large Send Offload Version 2 (IPv6) – Disabled
- Recv Segment Coalescing (IPv4) – Disabled
- Recv Segment Coalescing (IPv6) – Disabled
Sau đó tiếp tục nhấn chuột phải vào Wi-Fi adapter, chọn “Properties”
Sau đó chọn “Configure”
Thay đổi giá trị của “Packet Coalescing” thành “Disabled”
2. Thực hiện trên máy ảo của Hyper-V
Đối với máy ảo thì tùy vào hệ điều hành là Windows hay Ubuntu sẽ có cách cấu hình khác nhau.
2.1 Trường hợp máy ảo là Windows
Nếu máy ảo là Windows thì cũng làm tương tự như bước 1 cho giao diện mạng cầu nối (bridged adapter)
2.2 Trường hợp máy ảo là Ubuntu
Đầu tiên mình phải xác định được giao diện cầu nối (bridged interface) bằng cách thực hiện lệnh:
$ ip add
Tìm interface có địa chỉ IP cùng lớp với địa chỉ IP của máy host (máy Windows đang chạy Hyper-V), ghi nhớ tên giao diện này. Trong trường hợp máy của mình thì nó có tên là “eth1”.
Tiếp tục thực hiện lệnh sau:
$ sudo touch /etc/networkd-dispatcher/routable.d/40-offloading-config
$ sudo nano /etc/networkd-dispatcher/routable.d/40-offloading-config
# thêm đoạn sau vào, thay <TEN-INTERFACE> đã tìm được ở trên. VD: eth1
#!/bin/sh
/sbin/ethtool -K <TEN-INTERFACE> tso off
Sau đó khởi động lại máy ảo bằng lệnh
$ sudo reboot
Cuối cùng bạn khởi động lại máy host Hyper-V là có thể sử dụng bình thường.
Chúc bạn thành công!