Ở bài trước, mình có giới thiệu về cách tạo máy ảo Hyper-V trên Windows. Mặc định thì máy ảo Ubuntu trên Hyper-V sẽ sử dụng internal network interface (tạm dịch giao diện mạng nội bộ) để giao tiếp với máy chủ (host) và các máy ảo khác của Hyper-V. Để sử dụng máy ảo trong mạng nội bộ thì mình có thể truy cập vào máy ảo bằng IP nội bộ (local IP) của máy ảo mà không gặp vấn đề gì cả. Tuy nhiên nếu muốn truy cập máy ảo Ubuntu trên Hyper-V từ internet hay Public IP (WAN IP) thì phải làm thêm một số bước nữa.
Giả sử mình có 1 máy chủ web trên nền Ubuntu đang chạy trên một máy ảo Hyper-V có cấu hình mạng nội bộ như sau:
- IP WAN: 14.123.45.121
- IP Router: 192.168.68.1
- IP máy host Hyper-V: 192.168.68.65 & 172.23.12.1
- IP máy ảo Ubuntu chạy web server: 172.23.12.2
Để có thể truy cập được vào web server tại địa chỉ WAN IP (http://14.123.45.121) thì mình cần làm như sau:
1. Thiết lập bridged network cho máy chủ ảo.
Để máy ảo có thể nhận kết nối trực tiếp từ Internet (WAN IP), mình cần thêm một giao diện mạng cầu nối (bridged interface) vào máy ảo. Mạng cầu nối này sẽ ‘bắt cầu’ với giao diện mạng vật lý của máy host, cho phép máy ảo kết nối trục tiếp đến router như một máy vật lý khác trong mạng nội bộ, nhờ đó nó sẽ được router cấp IP dạng 192.168.68.x như máy host. Sau đây là cách thêm bridged network vào máy ảo:
1.1. Thực hiện tự động bằng Multipass (nếu có)
Nếu bạn sử dụng Multipass để tạo máy ảo Ubuntu thì bạn có thể thêm luôn mạng cầu nối khi tạo máy ảo bằng lệnh:
$ multipass launch --name <TEN-MAY-AO> --network <TEN-GIAO-DIEN-MANG-VAT-LY>
Khi sử dụng lệnh trên thì Multipass sẽ tự động tạo ra một switch ảo có tên ‘External Switch’ trên Hyper-V, đồng thời sẽ tự động thêm giao diện mạng cầu nối vào máy ảo Ubuntu lúc khởi tạo luôn, do đó bạn không cần làm bước 1.2 bên dưới nữa mà tiếp tục với bước 2 để cấu hình trên router luôn.
Để biết thêm chi tiết về cách tạo mạng cầu nối bằng Multipass bạn có thể tham khảo bài: hướng dẫn cài đặt máy ảo Ubuntu bằng Multipass
1.2. Thực hiện thủ công bằng Hyper-V Manager và Ubuntu
Nếu bạn không sử dụng Multipass để tạo máy ảo cho Ubuntu thì thực hiện trên Hyper-V Manager và Ubuntu như sau:
1.2.1 Thực hiện trên Hyper-V Manager
Mở ứng dụng Hyper-V Manager bằng cách nhấn nút “Start” và gõ vào “Hyper-V” sau đó chọn Hyper-V Manager.
Khi cửa sổ Hyper-V Manager xuất hiện, tiếp tục chọn “Virtual Switch Manager” ở khung “Actions” bên phải.
Tiếp tục chọn “New virtual network switch” sau đó chọn “External” rồi nhấn “Create Virtual Switch”
Mình đặt tên cho Virtual Switch này là “External” cho dễ nhớ. Ở phần “External network” bên dưới mình chọn adapter đang kết nối với router là “Realtek PCIe GbE Family Controller”. Ở chỗ này nếu “External network” của bạn là card mạng không dây (wireless adapter) thì có thể sẽ gặp phải lỗi Hyper-V làm chậm kết nối mạng của máy. Bạn có thể tham khảo thêm bài hướng dẫn sửa lỗi của mình.
Tiếp tục nhấn “Yes” để Hyper-V tạo Virtual Switch.
Lưu ý: Trước khi thực hiện bước kế tiếp, bạn phải tắt máy ảo nếu nó vẫn còn đang chạy.
Khi máy ảo đang ở trạng thái “Off”, tiếp nhấn chuột phải vào tên máy ảo, chọn Settings
Chọn “Add Hardware”, “Network Adapter” sau đó nhấn nút “Add”
Tiếp tục chọn “External” và nhấn “OK”.
Bạn tiếp tục nhấn đúp chuột vào tên Network Adapter “External” vừa thêm vào, chọn menu “Advanced Features” và tick vào “Static” ở phần MAC address. Xong bạn nhớ nhấn “OK” để lưu lại cấu hình.
Sau đó bạn mở lại máy áo để tiếp tục cấu hình trên Ubuntu.
1.2.2 Thực hiện trên máy áo Ubuntu
Đăng nhập vào máy ảo bằng Hyper-V Manager hoặc SSH
Tiếp tục thực hiện tiếp lệnh sau:
$ ip link
Lệnh này sẽ liệt kê tất cả các giao diện mạng (network interface) mà máy ảo đang sử dụng. Thông thờng giao diện mạng nằm ở cuối cùng có “state DOWN” là giao diện mạng mình mới thêm vào ở Hyper-V Manager. Trong trường hợp ở máy của mình thì có tên là “eth1”.
Lúc này mặc dù máy ảo đã nhận được bridged interface mới thêm vào nhưng nó vẫn chưa được cấu hình để có thể hoạt động.
Trước khi tiếp tục bạn cần lưu ý phần địa chỉ MAC có dạng “xx:xx:xx:xx:xx:xx” của giao diện “eth1” và copy nó lại để sử dụng trong bước kế tiếp.
Ubuntu lưu cấu hình của các interface tại “/etc/netplan/<xx>-cloud-init.yaml”. Ở mỗi máy sẽ có số <xx> khác nhau nên khi chỉnh sửa file này bạn phải thay <xx> cho đúng với máy của bạn. Trên máy của mình thì tên file là “50-cloud-init-yaml”.
Tiếp tục cấu hình bridged interface với netplan bằng lệnh sau, lưu ý thay thế <xx> và địa chỉ MAC theo máy của bạn.
$ sudo nano /etc/netplan/<xx>-cloud-init.yaml
// thêm vào và thay thế <xx:xx:xx:xx:xx:xx>
external:
dhcp4: true
match:
macaddress: <xx:xx:xx:xx:xx:xx>
Sau khi cấu hình nó sẽ giống như thế này.
Sau khi lưu lại, thực hiện lênh sau để khởi động lại netplan
$ sudo netplan apply
Để kiểm tra máy ảo đã cấp IP cho bridged interface chưa mình thực hiện lệnh sau:
$ ip add
Lệnh này liệt kê các địa chỉ IP của các giao diện mạng. Lúc này giao diện “eth1” của mình đã được cấp IP “192.168.68.x” cùng với lớp mạng của router.
2. Thiết lập trên router
Sau khi máy ảo nhận được IP trực tiếp từ router thì mình phải cấu hình router để luôn cấp cho máy ảo một IP cố định và sau đó sẽ cấu hình chuyển tiếp cổng (port forwarding) để máy ảo có thể được truy cập trực tiếp từ internet.
Do mỗi router sẽ có cách thiết lập khác nhau nên mình chỉ có thể hướng dẫn theo router của mình, các router khác cũng có thể làm tương tự.
Đầu tiên bạn vào giao diện cấu hình router bằng cách nhập IP của router vào trình duyệt. Router máy của mình có IP là 192.168.68.1 nên mình sẽ vào bằng địa chỉ web ‘http://192.168.68.1’
2.1 Thiết lập IP cố định (static IP) cho máy ảo
Để máy ảo luôn có 1 IP cố định thì mình phải cấu hình phần DHCP Server của router.
Tìm mục ‘Manually Assigned IP around the DHCP list’ và thêm địa chỉ IP và MAC của máy ảo vào. Thông thường router sẽ cho phép chọn từ danh sách có sẵn nên mình cũng không cần phải nhập.
Sau đó nhấn nút ‘Save’ để lưu lại cấu hình.
2.2 Thiết lập chuyển tiếp cổng (port forwarding)
Vì máy ảo của mình đang được dùng làm máy chủ web nên mình cần mở cổng 80 là cổng mặc định cho giao thức HTTP trên router, và chuyển tiếp kết nối ở cổng đó về máy ảo.
Mình sẽ thực hiện thiết lập này ở mục ‘Port forwarding’ của router. Chỗ này mình nhập IP của máy ảo và cổng (port) là 80.
Sau đó lưu lại cấu hình bằng cách nhấn nút ‘Save’.
Như vậy mình đã thiết lập xong các cấu hình cần thiết cho máy ảo. Bây giờ mình đã có thể truy cập vào máy ảo bằng WAN IP từ địa chỉ ‘http://14.123.45.121’
Chúc bạn thành công!