Chuyển đến nội dung chính (Skip to content)
Mục lục bài viết
Docker

Docker trên mạng LAN: macvlan, ipvlan và Hostnic

Docker trên mạng LAN: macvlan, ipvlan và Hostnic

Đánh giá driver LAN trên Linux, giới hạn giao tiếp host–container và rủi ro plugin Hostnic; dùng lab riêng trước khi thay đổi mạng production.

Đối chiếu ngày 24/10/2026. Các nguồn ở cuối bài dùng để kiểm tra phiên bản và giới hạn. Ví dụ phải điều chỉnh theo hệ điều hành và ứng dụng; không phải báo cáo thử nghiệm trên mọi nền tảng.

1. Vì sao cần đánh giá lại hướng dẫn Hostnic?

Hostnic là plugin bên thứ ba của Yunify/QingCloud, không phải driver tích hợp trong Docker. README upstream mô tả luồng triển khai cũ và ghi thử với Docker 1.12. Điều đó không xác nhận tương thích Engine 29, kernel hoặc hạ tầng hiện tại. Bài này bỏ lệnh cài yunify/hostnic:latest kèm grant-all-permissions chưa được đối chiếu, đồng thời bỏ số throughput và CPU không có báo cáo thử nghiệm.

Nếu hệ thống cũ bắt buộc dùng Hostnic, kiểm kê repository, commit, binary, API plugin, quyền và NIC đang dùng. Chỉ thử sau khi có đường quản trị dự phòng và kế hoạch phục hồi. Không lấy README lịch sử làm cam kết plugin còn được duy trì hoặc đạt hiệu năng line-rate.

Sơ đồ Container trên Linux → Parent NIC / VLAN → Switch và mạng LAN
Sơ đồ Container trên Linux → Parent NIC / VLAN → Switch và mạng LAN. Chạm vào sơ đồ để mở bản lớn.

2. Chọn driver theo nhu cầu kết nối

  • User-defined bridge: nhiều ứng dụng một host, DNS và published port rõ ràng.
  • Host: dùng network namespace của host, có nguy cơ trùng cổng; không gán riêng NIC vào container.
  • Macvlan: interface có MAC riêng, cần switch và mạng cho phép nhiều MAC trên parent.
  • IPvlan: chia sẻ MAC parent và tổ chức địa chỉ/routing theo mode L2 hoặc L3.

Macvlan chỉ áp dụng cho Linux host, không hỗ trợ Docker Desktop Windows/macOS. Nhiều cloud, Wi-Fi hoặc chính sách port security hạn chế underlay. IPvlan L3 không tự bảo đảm host giao tiếp trực tiếp với container trong mọi cấu hình. Trước khi chọn, xác định ai cần kết nối tới ai, cần L2 hay chỉ IP routing, và có yêu cầu cô lập nào.

3. Chuẩn bị mạng lab và đường khôi phục

Dùng NIC hoặc VLAN riêng. Không chọn NIC SSH làm parent trong lần thử đầu. Ghi interface, route, MTU, subnet, gateway, DHCP pool và port security; có console ngoài băng trước thay đổi ảnh hưởng mạng. Địa chỉ IP container phải được quản trị mạng cấp, loại khỏi DHCP để tránh trùng.

ip -br address
ip route
docker version
docker network ls
# Vi du su dung eth1: thay bang interface lab da xac minh.

Tạo network không tự cấu hình switch hoặc routing upstream. Một network tạo thành công chỉ chứng minh Docker chấp nhận tham số, không chứng minh máy ngoài truy cập được ứng dụng. Kiểm tra từng chặng thay vì đổi đồng thời nhiều tham số.

4. Ví dụ macvlan có phạm vi IPAM rõ ràng

docker network create -d macvlan \
  --subnet=192.0.2.0/24 \
  --gateway=192.0.2.1 \
  --ip-range=192.0.2.128/27 \
  -o parent=eth1 docker_lan_lab

docker run --rm --network docker_lan_lab \
  --ip 192.0.2.130 busybox:1.37 ip address

192.0.2.0/24 là dải địa chỉ tài liệu, phải thay bằng mạng lab thực. Docker IPAM không tự xin lease từ DHCP doanh nghiệp trong ví dụ này. Container in interface rồi kết thúc, không phải dịch vụ chờ ping. Nếu thử ứng dụng, chọn image đã kiểm tra và port listener phù hợp, rồi kiểm tra từ một máy LAN khác.

5. Chẩn đoán kết nối host–container

Linux macvlan mặc định không cho host nói trực tiếp với container qua parent theo cách nhiều người kỳ vọng. Nếu máy LAN khác truy cập được nhưng host không được, xem xét giới hạn này trước khi kết luận Docker hỏng. Kiểm tra ARP, VLAN và trùng IP; packet capture cần đúng interface và sự cho phép của đơn vị vận hành.

Nếu host cần truy cập container, thiết kế interface macvlan bổ sung hoặc mạng bridge thứ hai và route phù hợp. Đây là thay đổi mạng cần người quản trị xác minh, không phải lý do tắt firewall hoặc đổi default route để thử. Với ipvlan, đối chiếu mode L2/L3 và route trên mạng upstream, không chỉ cấu hình trong Docker.

docker network inspect docker_lan_lab
ip -s link show eth1
# Tu may lab khac: kiem tra ARP, route va cong ung dung.

6. Đo hiệu năng, xác nhận và dọn lab

So sánh trên cùng phần cứng, MTU, mã hóa, số kết nối và offload. Đo throughput, độ trễ phân vị, packet loss và CPU cả hai đầu; giữ lệnh, cấu hình và thời điểm để tái lập. Một phép đo iperf không đại diện toàn ứng dụng, và bỏ NAT không tự bảo đảm giảm latency trong mọi tình huống. Bài này không công bố benchmark đã thực hiện.

Xác nhận cả kết nối bình thường, mất node và restart trước khi triển khai dịch vụ thật. Khi kết thúc, dừng đúng container lab, xác nhận không còn endpoint rồi mới xóa docker_lan_lab. Không xóa parent NIC hoặc gỡ plugin của hệ thống đang chạy. Nếu mất kết nối, phục hồi cấu hình mạng đã lưu từ console quản trị.

Các nhánh kiểm tra docker macvlan ipvlan
Các nhánh kiểm tra docker macvlan ipvlan. Chạm vào sơ đồ để mở bản lớn.

Nguồn đối chiếu và xác nhận sau thay đổi

Đọc đúng tài liệu theo phiên bản. Địa chỉ, tên và đường dẫn trong ví dụ cần thay theo môi trường. Sơ đồ là khái niệm, không phải screenshot hay benchmark.

Lưu cấu hình và digest cũ, kiểm tra backup phục hồi được, xác nhận endpoint và log sau thay đổi. Rollback phải tính đến dữ liệu đã ghi mới; đổi image không tự phục hồi database.

Tìm hiểu thêm

Xem toàn bộ lộ trình Docker