Thiết lập VM proxy với các sự cố DNS VirtualBox


1

Sử dụng VirtualBox trên Ubuntu, tôi muốn kết nối hai máy ảo Linux (debian 9) với nhau, để máy đầu tiên hoạt động như một bộ định tuyến cho máy thứ hai (VM2), có lưu lượng truy cập được chuyển hoàn toàn qua máy ảo thứ nhất (VM1). VM1 (gateway) được kết nối với dịch vụ VPN và do đó tất cả lưu lượng truy cập từ VM2 được kết nối với VPN.

Tôi đã quản lý để VM2 ping thành công các IP bên ngoài, chẳng hạn như 8.8.8.8. Nhưng tất cả các mạng khác đều thất bại. Tôi nghĩ vấn đề là độ phân giải DNS, vì một số lý do mà tôi không biết là không được giải quyết bởi VM1.

Đây là những gì tôi đã làm cho đến nay:

Trên VirtualBox, VM1 được kết nối với giao diện NAT và giao diện thứ hai, là mạng nội bộ có tên "testvpn". VM2 chỉ được kết nối với mạng nội bộ này, không kết nối với NAT.

VM1 có cấu hình / etc / network / giao diện sau:

auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet dhcp

allow-hotplug enp0s8
iface enp0s8 inet static
      address 10.152.152.10
      netmask 255.255.192.0

VM2 có cấu hình / etc / network / giao diện sau:

auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet static
    address 10.152.152.15
    gateway 10.152.152.10
    netmask 255.255.255.0
    dns-nameservers 10.152.152.10

/Etc/resolv.conf của VM2 trỏ tới VM1:

nameserver 10.152.152.10

Với cấu hình đơn giản này, VM2 có thể ping VM1, nhưng không có quyền truy cập vào internet bên ngoài. Để làm điều này, tôi phải cho phép chuyển tiếp ip và định cấu hình iptables trên VM1:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o tun0 -j ACCEPT

Lưu ý rằng tôi sử dụng trên mục đích tun0 cho giao diện mạng VPN, nhưng kết quả hoàn toàn giống với enp0s3 thay vì tun0 mà không kích hoạt đường hầm VPN. Bây giờ tôi có thể ping địa chỉ bên ngoài trên VM2, nhưng tất cả các kết nối mạng khác đều thất bại:

  $ curl google.com
    curl: (6) Could not resolve host: google.com

Sau khi đọc trực tuyến, tôi đã cố gắng thêm các quy tắc iptables được cho là liên quan đến DNS trên VM cổng đầu tiên:

iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j REDIRECT
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j REDIRECT

Nó không hoạt động. Lưu ý rằng mạng hoạt động tốt trên VM1, có hoặc không có VPN.

Tôi không thử nghiệm nhiều với iptables và tôi thực sự không biết phải làm gì tiếp theo. Tôi đã thử tìm kiếm các giải pháp trực tuyến hàng giờ nhưng không thể tìm ra giải pháp. Tôi không muốn sử dụng các giải pháp dhcp / dnsmasq vì tôi khá chắc chắn rằng iptables là đủ.

T

Câu trả lời:


1

EDIT: Tôi đã làm cho nó hoạt động bằng cách thay đổi các quy tắc PREROUTING như sau:

iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j DNAT --to-destination 10.4.0.1
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j DNAT --to-destination 10.4.0.1

10.4.0.1 là máy chủ tên DNS mặc định của VPN (AirVPN) như trong /etc/resolv.conf.

Tôi không chắc đây có phải là cách làm đúng hay không, nhưng nó hoạt động ...

Vì vậy, bây giờ toàn bộ quy tắc iptables của tôi trông như sau:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o tun0 -j ACCEPT
iptables -t nat -A PREROUTING -i enp0s8 -p udp --dport 53 -j DNAT --to-destination 10.4.0.1
iptables -t nat -A PREROUTING -i enp0s8 -p tcp --dport 53 -j DNAT --to-destination 10.4.0.1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.