Przekierowanie portów: emuluj publiczny adres IP w Ubuntu w Virtualbox

2

Muszę zainstalować aplikację demonstracyjną stworzoną w Ubuntu na maszynie wirtualnej działającej w systemie Windows 10 na laptopie, która zostanie zaprezentowana potencjalnym klientom w różnych lokalizacjach w tym samym kraju, ale ta aplikacja w środowisku wirtualnym powinna być oglądana zewnętrznie jako posiadająca dokładny adres IP. Powodem tego jest to, że mamy publiczne IP (powiedzmy, 11.22.33.44, hipotetyczne) dostarczone przez dostawcę usług internetowych, a dostęp musi być publiczny; właściwie jednym ze sposobów sprawdzania dostępu zdalnego jest IP tej aplikacji. W rzeczywistości w tym urządzeniu wirtualnym będzie działać Klient usługa (przez przeglądarkę) przez sieć lokalną klienta (np. 192.168.a.b), jak w poniższym przypadku (wartości fikcyjne),

> ------------------ +
>                    [---------------]                   [------------]
> Guest (Ubuntu)     [ Host (W10)    ]                   [ Web Server ]
> Static IP          [ Static IP     ]--- Internet --- >>[ Static IP  ]
> 11.22.33.44        [ 192.168.0.100 ]                   [ 11.22.33.x ]
>                    [---------------]                   [------------]
> ------------------ +

Ale wszystko, co próbowałem, nie działało; Nie mogę nawet pomyślnie wykonać PING dla żadnego publicznego adresu IP. W VirtualBox próbowałem kilku kombinacji, takich jak:

Settings >> Network >> NAT >> (virtuo-net) >> Port Fowarding
--TCP: HostIP = blank || HostPort = 6789 || GuestIP = blank || GuestPort = 80
--UDP: HostIP = blank || HostPort = 4567 || GuestIP = blank || GuestPort = 53

W Guest (Ubuntu) ustawiam następującą konfigurację dla sieci, poprzez interfejs GUI jak i via / etc / network / interfaces (chociaż już wspomniano tutaj, że konfiguracja GUI ma pierwszeństwo przed konfiguracją ręczną)

auto 
iface lo inet loopback

auto enp0s3
iface inet enp0s3 static
address 11.22.33.44
netmask 255.255.255.0
network 11.22.33.0
broadcast 11.22.33.254
gateway 11.22.33.1
dns-nameservers 8.8.8.8 8.8.4.4

Czy ktoś może dać wgląd, jeśli coś mi brakuje?

andre_teprom
źródło
UWAGA: To pytanie zostało pierwotnie zadane na forum „askubuntu”, ale stwierdzono, że forum „superużytkownik” jest odpowiednim miejscem do postawienia takiego tematu.
andre_teprom

Odpowiedzi:

1

Nie wiesz, dlaczego próbujesz użyć przekierowania portów - nie jest całkiem blisko do tego, co próbujesz zrobić.

Zamiast tego klient VM potrzebuje połączenia VPN do sieci, w której 11.22.33.44 zostałoby fizycznie zlokalizowane.

Dlaczego nie działa „przekierowywanie portów”?

  1. Próbujesz dodać reguły „przekierowania portów”, aby przetłumaczyć TCP i UDP. Ping nie jest; to jest ICMP.

  2. Próbujesz wykonywać połączenia wychodzące z maszyny wirtualnej, ale celem „przekierowania portów” jest tłumaczenie przychodzących połączeń (tj. DNAT z adresu IP hosta na gościa). SNAT byłby bardziej odpowiedni (jeśli w ogóle). Jeśli wybierzesz sieć „NAT” w VirtualBox, automatycznie wykona ona SNAT, ale ...

  3. Ostatecznym celem zarówno DNAT („przekierowanie portów”), jak i SNAT jest przetłumaczenie adresu. Jak skonfigurowałeś 11.22.33.44 na interfejsie sieciowym maszyny wirtualnej i chcesz, aby 11.22.33.44 był widoczny przez zewnętrzny Internet, wydaje się, że tłumaczenie jest dokładnie tym, czym jesteś nie chcieć.

Dlaczego nie cokolwiek z tego praca

Powiedzmy, że masz tylko podstawową konfigurację IP: Twój system gościa jest skonfigurowany z 11.22.33.44/24 jako jego adres IP, a 11.22.33.1 jako brama.

Problem # 2: Twój przykład ma adres IP serwera na podobnie 11.22.33.0/24 podsieć, jaką ma maszyna wirtualna klienta. Jeśli tak jest, to twoja maszyna wirtualna zakłada, że ​​serwer znajduje się w tej samej „wirtualnej sieci LAN”, co sama maszyna wirtualna - nigdy próbować dotrzeć do niego przez bramę internetową.

(Nawiasem mówiąc, adres transmisji dla 11.22.33.0/24 to 11.22.33. 255 , nie 254. Mogłeś uniknąć tego błędu, nie próbując w ogóle ręcznie podać adresu rozgłoszeniowego: system operacyjny może doskonale obliczyć go samodzielnie.)

Ale powiedzmy, że adres IP serwera znajduje się w innej podsieci (a może próbujesz pingować Google). Następnie tak, klient VM spróbuje wysłać pakiety przez bramę do Internetu. Ale oto co się stanie:

  • Jeśli maszyna wirtualna jest skonfigurowana do pracy w sieci „NAT”, VirtualBox będzie SNAT dla wszystkich wychodzących pakietów, aby wyglądały tak, jakby były wysyłane z własnego adresu IP hosta (w tym przypadku 192.168.0.100). To nie to, czego chcesz.

    Po tym, jak przetłumaczone pakiety opuszczą komputer hosta i dotrą do lokalnego routera klienta, ponownie SNAT te pakiety, aby wyglądały tak, jakby były wysyłane z publicznego adresu IP klienta. I to też nie jest to, czego chcesz.

  • Jeśli maszyna wirtualna jest skonfigurowana dla sieci „Bridged”, system-gość będzie próbował znaleźć swoją bramę w sieci LAN klienta - co oczywiście nie zawiera 11.22.33.1.

Jeśli maszyna wirtualna jest skonfigurowana do pracy w sieci „Tylko hosta” i jeśli odpowiedni interfejs wirtualnej sieci LAN w systemie operacyjnym jest skonfigurowany jako 11.22.33.1/24 i jeśli system operacyjny hosta ma włączone routing / przekazywanie IP (trochę kłopotliwe w systemie Windows), to pakiet ma szansę pozostawić komputer hosta niezmodyfikowany. Ale to nie pójdzie dalej:

  • Jest bardzo prawdopodobne, że router LAN klienta i tak będzie SNAT pakietu, umieszczając publiczny adres IP klienta jako źródło zamiast twojego.

  • Jeśli router nie wykonać SNAT i wysłać pakiet niezmodyfikowany, prawdopodobnie zostanie odrzucony przez ISP. (Wielu dostawców usług internetowych blokuje pakiety za pomocą „fałszywych” adresów źródłowych IP, z oczywistych względów bezpieczeństwa.

  • Jeśli pakiet uciekł zarówno z SNAT routera i filtry przeciwdziałające fałszowaniu ISP i pomyślnie dotarły do ​​serwera docelowego ... odpowiedzi trafiłyby do sieci firmowej, ponieważ tam jest adres IP naprawdę usytuowany. Innymi słowy, losowe serwery w Internecie naprawdę nie wiedzą, że twój laptop „pożycza” ten adres IP.

Jak to zrobić

Podsumowując, nawet jeśli możesz dotrzeć do serwera, serwer nie może do ciebie dotrzeć - albo jego odpowiedzi pozostają w tej samej podsieci, albo podróżują przez Internet, ale w każdym przypadku wszystkie pakiety przeznaczone na 11.22.33.44 dotrą do twojego domu „ISP, a następnie w sieci Twojej firmy.

Więc potrzebujesz drogi powiedz sieci swojej firmy jak dotrzeć do maszyny wirtualnej wewnątrz laptopa, aby maszyna wirtualna mogła odbierać pakiety przeznaczone na 11.22.33.44 Zwykle odbywa się to przez ustawienie a tunel lub VPN. (To samo naprawdę.)

Będziesz musiał:

  1. skonfigurować serwer VPN w sieci firmowej (jeśli jeszcze go nie ma);
  2. spraw, aby maszyna wirtualna klienta połączyła się z siecią VPN;
  3. skonfiguruj VPN serwer posiadać adres IP 11.22.33.44 (jeden z kilku możliwych podejść, ale prawdopodobnie najprostszy).
grawity
źródło
Dzięki szczegółowemu wyjaśnieniu, w rzeczywistości VPN brzmi jak odpowiednie rozwiązanie, w każdym razie chciałbym, aby aplikacja działała zwirtualizowana w systemie Ubuntu jako gość, a nie na komputerze hosta. Zakładam, że twoja (ładna) odpowiedź uwzględnia ten scenariusz, prawda?
andre_teprom
Jeśli aplikacja znajduje się w maszynie wirtualnej, uruchom klienta VPN również w VM ... Większość protokołów VPN wygląda jak zwykłe strumienie UDP, więc nie ma znaczenia, czy system operacyjny klienta jest zwirtualizowany, czy nie.
grawity