Połączenie SSH z maszyną wirtualną poprzez kartę NAT

Damian Stlemach

Jak działa tryb NAT w VirtualBox już wiemy. NAT to ustawienie, które symuluje ruter. Kiedy karta maszyny wirtualnej działa w trybie NAT, program VirtualBox staje się dla wirtualnej maszyny wirtualnym ruterem i dzięki temu ma ona dostęp do Internetu, zakładając oczywiście, że taki dostęp ma komputer lokalny na którym VirtualBox działa. Analogiczna sytuacja jak fizyczny ruter i urządzenia w sieci lokalnej, tylko tutaj sprawę załatwia nam soft. Jeśli chcemy przy takim trybie pracy karty sieciowej wirtualnej maszyny łączyć się z nią poprzez SSH, musimy skonfigurować dla tej karty przekierowanie portu (ang. port forwarding).

Wyjaśnienie czym jest przekierowanie portu (portów) oprzemy o typowy dla tego problemu przykład. W sieci lokalnej pracują 4 komputery z prywatnymi adresami IP. Na jednym z nich, skonfigurowano serwer WWW, który hostuje stronę. Do neta urządzenia mają dostęp poprzez ruter, który po stronie zewnętrznej (po stronie sieci Internet) ma publiczny adres IP. Na tym ruterze dział usługa NAT czyli translacja adresów sieciowych prywatnych na publiczne i odwrotnie. Dzięki "natowaniu" urządzenia w sieci lokalnej mogą komunikować się z Internetem. Gdyby NAT nie działał, no to komunikacja byłaby niemożliwa, bo przecież urządzenia mają prywatne adresy, a jak wiemy po necie śmigamy stosując adresy publiczne.

Ruter NAT

Jak zatem wyświetlić stronę na urządzeniu, które pracuje w innej sieci niż sieć lokalna, np. z poziomu Internetu? Potrzebny do tego będzie publiczny adres IP rutera. Pomijamy tutaj oczywiście usługę DNS. Pojawia się pytanie: skoro w sieci LAN pracują 4 urządzania, to skąd wiadomo, że ruch przychodzący z Internetu, przychodzący przecież na publiczny adres rutera, który żąda wyświetlania strony ma być kierowany do konkretnego komputera, który hostuje stronę, a nie do jakiegoś innego? No tutaj dochodzimy do wspomnianej techniki przekierowania portu. W dużym skrócie: jest to usługa, która pozwala wskazać naszemu ruterowi, do jakiego urządzenia w sieci lokalnej i na jakim porcie ma kierować ruch związany z żądaniami WWW, które przychodzą z innych sieci, w tym wypadku z Internetu. Po odpowiedniej konfiguracji żądanie, które odbiera ruter, jest dalej kierowane do serwera, który hostuje stronę.

Podsumowując: jeśli żądanie strony WWW trafi do rutera na jego publiczny adres, ten przekseruje ruch WWW do właściwego komputera, bo ma w swojej konfiguracji informacje, że dany, konkretny komputer w jego sieci lokalnej jest serwerem WWW.

Port forwarding

Oczywiście przekierowanie nie dotyczy tylko usługi WWW, przekierować porty można dla każdej usługi jaka w sieci pracuje, oczywiście również SSH. Praktycznie każdy nowoczesny ruter posiada wbudowany mechanizm przekierowania i nie ma wielkiej filozofii w jego konfiguracji. Przekierowanie portu lub też portów, bo można to robić dla wielu usług jednocześnie, jest w VirtualBox bardzo proste. Wystarczy uruchomić ustawienia zaawansowane karty NAT wirtualnej maszyny, wybrać przekierowanie portu i podać dane widoczne poniżej:

Port forwarding Virtualbox

Nazwa jest dowolna, nie ma znaczenia, a protokół warstwy transportowej to TCP, bo SSH działa na właśnie TCP. W polu IP hosta możemy wpisać adres pętli zwrotnej, czyli 127.0.0.1, wówczas tylko z naszego fizycznego kompa będzie można połączyć się z serwerem i to ten adres wykorzystamy do połączenia. Jeśli chcemy aby można było się łączyć z serwerem również z innych komputerów w sieci LAN to należy zostawić to pole puste. W polu Port hosta podajemy port po jakim nasz komputer będzie komunikował się z VirtualBox, można tutaj podać port domyślny dla SSH czyli 22, ale tylko pod warunkiem, że na naszym fizycznym kompie nie pracuje już serwer SSH, który tego portu by używał.

Można tutaj podać również jakikolwiek inny numer portu, jeśli jest nie jest na systemie lokalnego komputera zajęty. Jaki porty są zajęte, a jakie wolne można sprawdzić wydając polecenie netstat -a w terminalu. Numer jaki tutaj wpiszecie należy zapamiętać, bo potrzebny będzie do połączenia. IP gościa jest puste, bo adres na tej karcie wirtualna maszyna ma z wirtualnego serwera DHCP tak więc VirtualBox będzie wiedział po jakim IP ma się połączyć. Port gościa to natomiast 22, bo na tym pracuje SSH no i tutaj wyjątków już nie ma.

Do połączeń terminalowych poprzez SSH w Windows 10 można użyć CMD albo PowerShell, zakładając, że zainstalowana jest funkcja klienta SSH, można to sprawdzić wchodząc w ustawienia systemu i dalej aplikacje. Można też w terminalu wydać polecenie ssh, jeśli wyświetli się pomoc dla tego polecenia to znaczy ze klient SSH działa. Do połączeń można też oczywiście wykorzystać zewnętrzne oprogramowanie. Najpopularniejszym klientem SSH jest PuTTY, który możecie sobie za darmo pobrać ze strony projektu, nie trzeba go nawet instalować, wystarczy uruchomić.

Po odpowiedniej konfiguracji możemy już połączyć się zdalnie z wykorzystaniem CMD lub PowerShell wydając takie polecenie:

ssh nazwa_użytkownika_w_ubuntu@127.0.0.1 -p 22