VirtualBox - gość Ubuntu traci DNS, gdy host łączy się z VPN

11

Mam system gościa Ubuntu w VirtualBox używający domyślnego NAT dla eth0.

Działa dobrze w biurze i w domu Z WYJĄTKIEM w biurze VPN z domu.

Gdy system operacyjny (Windows 7) jest podłączony do sieci VPN, wyszukiwania DNS nie działają w gościu Virtualbox. Wyszukiwanie DNS jest prawidłowe na hoście. W Virtualbox mogę pingować adresy IP bezpośrednio zarówno w sieci VPN, jak i na zewnątrz, więc nie jest to problem z łącznością.

Wygląda na to, że gość Ubuntu używa localhost jako punktu wejścia DNS, zgodnie z /etc/resolv.confi nslookup. Wygląda więc na to, że coś lokalnie wysyła następnie do innego bazowego DNS.

Jak rozwiązać ten problem?

wrschneider
źródło
Czego używasz do VPN? Czy masz dostęp do ustawień VPN na urządzeniu, z którym łączą się te maszyny? Zazwyczaj komputery łączące się z VPN pobierają swoje ustawienia z urządzenia VPN.
jmreicha
Aby wyjaśnić, że wyszukiwania DNS na hoście działają poprawnie - dotyczy to tylko gościa Virtualbox.
wrschneider,

Odpowiedzi:

17

Z jakiegoś powodu to zadziałało

C:\...\VirtualBox\VBoxManage modifyvm "VM name" --natdnshostresolver1 on

Podejrzewam, że dzieje się tak, ponieważ gdy VPN jest aktywny, host robi coś specjalnego dla wyszukiwań DNS, poza tylko przesyłaniem żądań do określonych serwerów DNS, które VirtualBox odebrał z konfiguracji Windows.

wrschneider
źródło
1
Uratowałeś dzień, koleś.
CantGetANick
Działa dla mnie idealnie!
Hai Minh Nguyen
1

Miałem bardzo podobną sytuację z Lubuntu 16.04 (powinno być identyczne w innych Ubuntus), ale ta poprawka nie poprawiła sytuacji. Przynajmniej w przypadku wersji 16.04 problem wydaje się polegać na tym, że NetworkManager używa lokalnego serwera proxy DNS (dnsmasq), co nie działa dobrze w przypadku połączeń VPN, przynajmniej w domyślnej konfiguracji.

Komentowanie / usuwanie dns = dnsmasq w /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile,ofono
# dns=dnsmasq

Prawdopodobnie istnieje sposób skonfigurowania dnsmasq, ale daje to (mi) równoważny dostęp do hosta (dns itp.), Więc nie zbadałem. YMMV.

AntonOfTheWoods
źródło
1

TL; DR:

  • zrestartuj maszynę wirtualną, upewniając się, że status VPN (połączony lub rozłączony) hosta nie zmienia się w międzyczasie;
  • pozwól silnikowi VirtualBox NAT przechwytywać żądania DNS i przekazywać je do resolvera hosta, to znaczy za pomocą interfejsu API DNS hosta, aby zapytać o informacje i zwrócić je gościowi. Ustawiasz to przez:

VBoxManage modifyvm "VM name" --natdnshostresolver1 on


Uruchomienie maszyny wirtualnej na hoście podłączonym do sieci VPN może powodować problemy z DNS przy każdej zmianie statusu VPN. Istnieją dwa scenariusze:

  1. maszyna wirtualna jest spawnowana na hoście podłączonym do VPN iw pewnym momencie VPN się rozłącza;
  2. maszyna wirtualna jest spawnowana na hoście niepołączonym z VPN, aw pewnym momencie łączy się VPN

1) Połączony z VPN -> VPN odłączony

W takim przypadku maszyna wirtualna prawdopodobnie otrzyma adres DNS będący częścią sieci dostawcy VPN. Zwykle będzie to wewnętrzny prywatny adres IP. Sprawdź zawartość cat /etc/resolv.conf. W moim przypadku otrzymuję:

nameserver 10.8.8.1 <--- To dotyczy sieci VPN Provider

nameserver 192.168.178.1 <--- To jest moja domowa brama (router)

Teraz odłącz hosta od połączenia VPN:

  • konfiguracja DNS na maszynach wirtualnych się nie zmienia -> maszyna wirtualna nadal wysyła żądania DNS do docelowego adresu IP 10.8.8.1, do których nie można dotrzeć, ponieważ host nie jest już połączony z siecią VPN

Więcej szczegółów:

  • pakiet zostanie wysłany do zdefiniowanej GW zdefiniowanej przez sieć NAT VirtualBox, źródłowej NATTed (z adresem IP hosta), a na końcu obsłużonej przez tablicę routingu hosta, która przekaże go do bramy domowej.
  • W tym przypadku pakiet zostanie odrzucony, ponieważ brama domowa nie ma wpisu 10.8.8.1 po stronie LAN (adresy prywatne) i nie może przekazać go po stronie WAN (adresy publiczne), ponieważ jest to adres prywatny.

2) VPN odłączony -> VPN podłączony

W takim przypadku maszyna wirtualna nie otrzyma adresu DNS, który jest częścią dostawcy sieci VPN, ponieważ host nie był podłączony do sieci VPN podczas uruchamiania maszyny wirtualnej. Sprawdź zawartość cat /etc/resolv.conf. W moim przypadku otrzymuję:

nameserver 192.168.178.1 <--- To jest moja domowa brama (router)

Teraz podłącz hosta do połączenia VPN:

  • konfiguracja DNS na maszynach wirtualnych się nie zmienia -> maszyna wirtualna nadal będzie wysyłać żądania DNS do docelowego adresu IP 192.168.178.1, do których nie można dotrzeć (chociaż polecenie ping nadal działa), ponieważ teraz żądanie DNS z maszyny wirtualnej jest obsługiwane przez interfejs VPN Tap, który przekieruje pakiety do sieci VPN, do której 192.168.178.1 (adres IP wewnętrznej bramy domowej) nie jest dostępny.

Więcej szczegółów:

  • pakiet zostanie wysłany do zdefiniowanej GW zdefiniowanej przez sieć NAT VirtualBox, wysłany do interfejsu VPN Tap, który zmodyfikuje nagłówek IP zastępując źródłowy adres VM VM adresem IP przypisanym do hosta przez sieć VPN, podczas gdy miejsce docelowe adres pozostaje adresem DNS 192.168.178.1.
  • pakiet ten zostanie następnie zamknięty w zewnętrznym nagłówku IP, który będzie miał źródłowy adres IP hosta (ten btw zostanie później zastąpiony źródłowym NAT na bramie domowej), a serwer VPN jako adres docelowy.
  • kiedy pakiet dociera do sieci VPN, jest dekapsulowany. Docelowy adres IP jest teraz ponownie adresem DNS 192.168.178.1, do którego nie ma możliwości uzyskania dostępu do sieci dostawców VPN (chyba że w nadzwyczajnej konsensusie, gdy jest to dokładnie ten sam adres IP używany przez dostawcę sieci VPN dla jego serwera DNS).
StefTN
źródło