Konfiguracja sieci wirtualnej maszyny przez Vagrant-a jest dość elastyczna i każdy powinien znaleźć rozwiązanie spełniające jego wymagania. Zaczynając od zwykłego przekierowania portów przez stworzenie prywatnej sieci niedostępnej spoza maszyny gospodarza (hosta), kończąc na publicznym dostępie.
Wpis ten będzie bazował na pliku Vagrantfile, który tworzyłem w poprzednim wpisie Vagrant instalacja i konfiguracja środowiska. Końcowym efektem był serwer www oparty o Nginx-a + PHP + MariaDB, pokażę jak udostępnić go w różnych konfiguracjach sieci.
Dla osób, które nie chcą czytać poprzedniego wpisu, a chcą na bieżąco testować wprowadzane modyfikacje, zapraszam do pobrania Vagrantfile wraz z dodatkowymi plikami na GitHub-a.
Zaczniemy od najprostszej konfiguracji, czyli zwykłe przekierowanie portów. Dla osób nie będących w temacie, przekierowanie portów działa w bardzo prosty sposób. Na naszym komputerze (host) pod jakimś portem np. 1234 jest ustawione przekierowanie na zdefiniowany port innego komputera lub naszego.
Najprościej można sobie to wyobrazić jako skrót, taki jak spotykamy w programach. Pomimo że mamy na pulpicie skrót do programu, który go uruchamia to wiemy, że prowadzi on do innego miejsca w systemie skąd jest uruchamiana aplikacja.
We wzorcowym pliku mamy zdefiniowaną sieć prywatną:
config.vm.network :private_network, ip: '192.168.33.10'
Usuwamy powyższy wpis i zastępujemy go poniższym:
config.vm.network "forwarded_port", guest: 80, host: 1234
Klucz config.vm.network
przyjmuje w tym przypadku następujące parametry:
Po wprowadzeniu zmian zapisujemy plik i przeładowujemy maszynę poleceniem:
vagrant reload
Po ponownym uruchomieniu wirtualnej maszyny i wczytaniu nowej konfiguracji. Powinniśmy zobaczyć w naszej przeglądarce pod adresem http://localhost:1234
stronę wyświetlaną przez Nginx-a, który znajduje się w wirtualnej maszynie.
Sieć prywatna podobnie jak przekierowanie portów daje dostęp do wirtualnej maszyny tylko z poziomu komputera gospodarza (host-a). Tym samym nikt z “zewnątrz” nie będzie miał dostępu do tak przygotowanej maszyny.
Z siecią prywatną mieliśmy już do czynienia w podstawowej konfiguracji pliku Vagrantfile jaka została przygotowana. Poniżej wpis, który możemy zobaczyć domyślnie w naszym pliku.
config.vm.network :private_network, ip: '192.168.33.10'
Klucz config.vm.network
przyjmuje w tym przypadku następujące parametry:
Jak zapewne zauważyliście mamy tutaj zdefiniowany statyczny adres IP naszej wirtualnej maszyny. Jest to o tyle wygodne, że od razu mamy wiedzę pod jakim adresem IP będzie ona dostępna.
Jednak dla chcących skorzystać z serwera DHCP istnieje także taka możliwość. Zmieniamy tylko wpis na:
config.vm.network :private_network, type: "dhcp"
Jednak to wymaga od nas zalogowania się do wirtualnej maszyny lub sprawdzenia w serwerze DHCP jaki adres został przyznany. Szybciej będzie zalogować się do wirtualnej maszyny 😉
vagrant ssh
Następnie sprawdzamy interfejsy sieciowe, ja korzystam z Ubuntu lub Debian-a więc skorzystam z polecenia ifconfig
.
Ostatni rodzaj sieci z jakim mamy do czynienia, to maszyna dostępna publicznie w naszej sieci jak pozostałe komputery i urządzenia.
Konfigurację sieci zmieniamy na:
config.vm.network "public_network", ip: "192.168.1.200"
Klucz config.vm.network
przyjmuje w tym przypadku następujące parametry:
Podobnie jak przy konfigurowaniu sieci prywatnej tutaj także mamy statyczny adres IP. Jednak w odróżnieniu od sieci prywatnej w tym przypadku istnieje dużo większe ryzyko wystąpienia problemów. Jest to związane z faktem, że w sieci zapewne znajduje się serwer DHCP, który przyznaje adresy IP urządzeniom. My zaś definiując adres statyczny adres możemy spowodować konflikt adresów, gdyż serwer DHCP nie wie że adres IP 192.168.1.200
został wykorzystany. Więc albo wykluczymy go z puli w konfiguracji serwera DHCP, albo zmienimy konfigurację na DHCP.
Po zmianie ustawień w pliku Vagrantfile, zapisujemy je i restartujemy serwer poleceniem vagrant reload
. I tutaj możecie się nieco zdziwić, gdyż podczas procesu uruchamiania zostaniecie zapytani, który interfejs sieciowy gospodarza (host-a) ma zostać wykorzystany przy połączeniu z siecią.
Wybieracie ten, który wykorzystujecie do połączenia z internetem (wpisujecie jego numer i potwierdzacie enter-em). I operacja powinna przebiec dalej bez problemów.
Skoro przypisywanie adresu IP na stałe jest ryzykowne, to ustawmy pobieranie go z serwera DHCP.
config.vm.network "public_network", type: "dhcp"
Tak jak poprzednio podczas procesu uruchamiania konieczne jest wybranie interfejsu sieciowego, którego Vagrant ma użyć do konfiguracji sieci. Jest to dość upierdliwe więc dodamy dodatkowy parametr bridge
, który pozwoli na automatyczne wybranie interfejsu.
config.vm.network "public_network",
type: "dhcp",
bridge: "en0: Wi-Fi (AirPort)"
Wartość nowo dodanego parametru bridge
musi być nazwą naszego interfejsu sieciowego z którego będziemy chcieli skorzystać. Zapisujemy zmiany i restartujemy wirtualną maszynę, tym razem nie powinniśmy zostać zapytani o interfejs sieciowy.
Dalej jak w przypadku sieci prywatnej logujemy się przez ssh poleceniem vagrant ssh
i sprawdzamy adres IP poleceniem ifconfig
.
I to by było na tyle jeśli chodzi o konfigurację sieci w Vagrancie. Oczywiście że powyższe rozwiązania nie wyczerpują tematu sieci i ich konfiguracji, gdyż możliwe jest ręczne konfigurowanie interfejsów sieciowych oraz wiele więcej. Jednak tym zajmiemy się innym razem 😉