TL; DR:
- khởi động lại VM để đảm bảo trạng thái VPN (được kết nối hoặc ngắt kết nối) của máy chủ không thay đổi trong thời gian này;
- hãy để công cụ VirtualBox NAT chặn các yêu cầu DNS và chuyển tiếp chúng tới bộ giải quyết của máy chủ, nghĩa là sử dụng API DNS của máy chủ để truy vấn thông tin và trả lại cho khách. Bạn đặt điều này bằng cách:
VBoxManage modifyvm "VM name" --natdnshostresolver1 on
Chạy VM trong máy chủ được kết nối với VPN có thể dẫn đến các sự cố DNS mỗi khi trạng thái VPN thay đổi. Có hai kịch bản:
- VM sinh ra trong một máy chủ được kết nối VPN và tại một thời điểm nhất định, VPN sẽ ngắt kết nối;
- VM sinh ra trong một máy chủ không kết nối VPN và tại một thời điểm nhất định, VPN kết nối
1) Kết nối VPN -> Ngắt kết nối VPN
Trong trường hợp này, VM có thể đã nhận được một địa chỉ DNS là một phần của mạng nhà cung cấp VPN. Đây thường sẽ là một địa chỉ IP riêng nội bộ. Kiểm tra nội dung của cat /etc/resolv.conf
. Trong trường hợp của tôi, tôi nhận được như sau:
nameserver 10.8.8.1
<--- Đây là nội bộ của mạng Nhà cung cấp VPN
nameserver 192.168.178.1
<--- Đây là cổng nhà của tôi (bộ định tuyến)
Bây giờ ngắt kết nối máy chủ khỏi kết nối VPN:
- cấu hình DNS trong máy ảo không thay đổi -> VM vẫn sẽ gửi yêu cầu DNS đến IP đích 10.8.8.1 không thể truy cập do máy chủ không còn kết nối với VPN
Trong chi tiết:
- gói sẽ được gửi đến def GW được xác định bởi mạng VirtualBox NAT, nguồn NATTed (có địa chỉ IP máy chủ) và cuối cùng được xử lý bởi bảng định tuyến của máy chủ sẽ chuyển tiếp đến cổng nhà của bạn.
- Tại đây, gói tin sẽ bị hủy vì cổng nhà của bạn không có mục nào cho 10.8.8.1 ở phía mạng LAN (địa chỉ riêng) và không thể chuyển tiếp nó ở phía mạng LAN (địa chỉ công cộng) vì đây là địa chỉ riêng.
2) Ngắt kết nối VPN -> Kết nối VPN
Trong trường hợp này, VM sẽ không nhận được địa chỉ DNS là một phần của nhà cung cấp mạng VPN vì máy chủ không được kết nối với VPN khi VM khởi động. Kiểm tra nội dung của cat /etc/resolv.conf
. Trong trường hợp của tôi, tôi nhận được như sau:
nameserver 192.168.178.1
<--- Đây là cổng nhà của tôi (bộ định tuyến)
Bây giờ kết nối máy chủ với kết nối VPN:
- cấu hình DNS trong máy ảo không thay đổi -> VM vẫn sẽ gửi các yêu cầu DNS đến IP đích 192.168.178.1 không thể đạt được (ping đến nó vẫn hoạt động) vì hiện tại yêu cầu DNS từ VM đang được xử lý giao diện VPN Tap sẽ chuyển tiếp các gói tới mạng VPN nơi không thể truy cập 192.168.178.1 (địa chỉ IP cổng nhà nội bộ của bạn).
Trong chi tiết:
- gói sẽ được gửi đến def GW được xác định bởi mạng VirtualBox NAT, được gửi đến giao diện VPN Tap sẽ sửa đổi tiêu đề IP thay thế địa chỉ nguồn VM IP bằng địa chỉ IP được gán cho máy chủ bởi Mạng VPN, trong khi đích địa chỉ vẫn là địa chỉ DNS 192.168.178.1.
- gói này sau đó sẽ được gói gọn trong một Tiêu đề IP bên ngoài sẽ có địa chỉ IP máy chủ là nguồn (btw sau đó sẽ được thay thế bởi NAT nguồn trên cổng nhà) và Máy chủ VPN làm địa chỉ đích.
- khi gói đến mạng VPN, nó sẽ được giải mã. Địa chỉ IP đích bây giờ lại là địa chỉ DNS 192.168.178.1 mà Mạng nhà cung cấp VPN không có cách nào tiếp cận (trừ khi có xác suất bất thường trong đó đây chính xác là địa chỉ IP được nhà cung cấp mạng VPN của bạn sử dụng cho máy chủ DNS của nó).