Poniższa instrukcja może posłużyć do konfiguracji PNETLaba na hypervisorze VMWare. Inne hypervisory nie są wspierane.
Zainstaluj najnowszą, darmową wersję VMWare Workstation Pro - po przejęcie VMWare przez Broadcom konieczne jest niestety posiadanie konta na tej platformie: https://support.broadcom.com/group/ecx/productdownloads?subfamily=VMware+Workstation+Pro
Jeśli posiadasz Linuxa, po instalacji VMWare konieczne jest wykonanie komendy
sudo chmod 666 /dev/vmnet*
Jeśli będziesz chcieć uruchomić ansible ze swojego laptopa, musisz mieć system Linux (Windows ani WSL nie jest wspierany). Jeśli nie masz możliwości użycia Linuxa - zainstaluj ansible wewnątrz VMki PNETLab (instrukacja poniżej).
Jeśli posiadasz system Linux, zainstaluj ansible wykorzystując swój package-manager.
Doinstaluj moduły cisco
przez ansible-galaxy
ansible-galaxy collection install cisco.ios
Sklonuj repo https://github.com/pczarnik/hybrid-net-with-pnet.git
Maszyna wirtualna PNETLab wymaga WVMware Workstation, Player lub ESXi, ale poniższe laboratiorium było testowane wyłącznie na Workstation. Obraz PNETLab można pobrać ze strony https://pnetlab.com/pages/download.
Poniższa instrukcja testowana była na wersji PNETLab_4.2.10
.
Pobrany plik będzie miał rozszerzenie .ova
.
Do pierwszej konfiguracji PNETLaba konieczne jest posiadanie dostępu do publicznego internetu - najlepiej z adresem IP przydzielanym przez DHCP.
-
Stwórz maszynę importując plik
.ova
. -
Zmodyfikuj ustawienia maszyny wirtualnej:
-
Uruchom maszynę wirtualną - zaloguj się za pomocą
root/pnet
-
Pojawi się okno konfiguracji - wpisz dwukrotnie hasło
pnet
, a potem nic nie zmieniaj, przeklikaj enterem. Maszyna automatycznie się zrestartuje. -
Po automatycznym zrestartowaniu maszyny, zanotuj jej adres IP przydzielony przez DHCP.
Jeśli adres nie zostanie automatycznie przydzielony:
zaloguj się do niej za pomocą
root/pnet
i ustaw statyczny adres IP z tej samej sieci, na której jest hypervisor/laptop:ip address add dev pnet0 <IP/MASK 192.168.0.5/24>
-
Sprawdź, czy maszyna jest dostępna pingując ją z hypervisora/laptopa:
ping <IP 192.168.0.5>
-
Teraz możesz zalogować się do PNETLaba przez ssh - wykorzystaj terminal lub PUTTY - login i hasło takie same jak wcześniej:
root/pnet
. Następne komendy wykonuj po zalogowaniu się do VMki. -
(Krok opcjonalny - jeśli będziesz uruchamiał ansible z wewnątrz VMki PNETLAba) Zainstaluj
pip3
iansible
za pomocą komendy:curl -O https://bootstrap.pypa.io/pip/3.6/get-pip.py python3 get-pip.py pip install ansible paramiko
-
(Krok opcjonalny - jeśli będziesz uruchamiał ansible z wewnątrz VMki PNETLAba) Sklonuj repozytorium:
git clone https://github.com/pczarnik/hybrid-net-with-pnet.git
-
Zainstaluj
ishare2
, za pomocą komendy:wget -O /usr/sbin/ishare2 https://raw.githubusercontent.com/ishare2-org/ishare2-cli/main/ishare2 && chmod +x /usr/sbin/ishare2 && ishare2
Przy automatycznej konfiguracji ishare2 skorzystaj z domyślnych ustawień zmieniając jedynie
Check SSL certrificate
nan
. -
Pobierz obrazy routera i switcha:
- sprawdź id-ki obrazów:
ishare2 search vios-15.5.3M ishare2 search viosl2-15.2.4.55e
- pobierz obrazy wykorzystując id-ki:
ishare2 pull qemu 918 ishare2 pull qemu 930
- sprawdź id-ki obrazów:
-
Sprawdź, czy PNETLab działa:
-
Sprawdź adres IP PNETLaba:
ip address show pnet0
Otwórz ten adres IP w przeglądarce i zaloguj się wybierając logowanie
offline
i używając domyślneadmin/pnet
. Możesz zmienićDefault Console
naHTML Console
(umożliwi to dostęp do konsoli wirtualnych urządzeń przez przeglądarkę) -
Stwórz nowy lab:
-
Dodaj nowy node:
-
Sprawdź, czy na liście znajdują się Router i Switch:
-
Wybierz router, zmień nazwę na
VR1
i zapisz: -
Uruchom router
-
Poczekaj aż router się włączy i odczytaj jego port telnet
-
Na laptopie skorzystaj z telneta (przez terminal lub PUTTY) i zaloguj się do routera -
<IP PNETLaba>:<port routera>
. Równie dobrze możesz użyć konsoli HTML klikając dwukrotnie na router w PNETLabie. -
Jeśli połączenie nie zostało odrzucone i po chwili pojawił się dialog konfiguracyjny routera to znaczy, że PNETLab działa.
-
-
Odłącz laptop/hypervisor od publicznego internetu - nie jest to konieczne, ale sugerowane.
-
Brawo - skonfigurowałeś PNETLaba. Czas na stworzenie sieci hybrydowej.
-
Zbuduj sieć fizyczną jak na obrazku poniżej:
Router skonfiguruj klasycznie przez kabel konsolowy z innego komputera:
Router>enable Router#conf t Router(config)#hostname R1 R1(config)#interface GigabitEthernet 0/0 R1(config-if)#ip address 192.168.0.1 255.255.255.0 R1(config-if)#no shutdown R1(config-if)#exit R1(config)#ip domain-name EXAMPLE.LOCAL R1(config)#crypto key generate rsa The name for the keys will be: R1.EXAMPLE.LOCAL Choose the size of the key modulus in the range of 360 to 4096 for your General Purpose Keys. Choosing a key modulus greater than 512 may take a few minutes. How many bits in the modulus [512]: 2048 % Generating 2048 bit RSA keys, keys will be non-exportable... [OK] (elapsed time was 2 seconds) R1(config)#line vty 0 4 R1(config-line)#transport input ssh R1(config-line)#login local R1(config-line)#exit R1(config)#username admin password pass R1(config)#username admin privilege 15 R1(config)#end
Powyższe komendy dodały adres IP do fizycznego routera i włączyły ssh z loginem: admin/pass Możesz teraz zalogować się do routera przez ssh - nie potrzebujesz kabla konsolowego.
Ustaw statyczne adresy IP na laptopie/hypervisorze i VMce PNETLaba (przez VMWare).
-
W PNETLabie stwórz poniższą konfigurację
By połączyć ze sobą node'y wirtualnymi kablami użyj:
By dodać "chmurkę" umożliwiającą dostęp na zewnątrz PNETLaba użyj:
Odczytaj port telneta dla routera VR1 - użyjesz go do konfiguracji routera.
-
Zaloguj się do routera VR1 przez telnet
<IP PNETLaba>:<port telneta>
(lub użyj konsoli HTML) i skonfiguruj go dokładnie tak samo jak router fizyczny, zmieniając hostname naVR1
i adres IP na192.168.0.2
. -
Zaloguj się do routera VR1 przez ssh (login admin/pass) - sprawdź czy działają podstawowe komendy, spinguj router R1:
ping 192.168.0.1
-
Brawo brawo! Skonfigurowałeś sieć hybrydową, którą logicznie można reprezentować w następujący sposób:
-
Jeśli na routerach R1 i VR1 ustawiłeś inne adresy IP niż wskazane w instrukcji lub użyłeś więcej routerów fizycznych i wirtualnych zmień pliki:
-
inventory.cfg
- dodaj lub zmień hosty i IPki pod[all]
zgodnie ze wzorem:<hostname> ansible_host=<ip address>
-
vars.yaml
- dodaj lub zmień konfigurację loopbacków i OSPFa dla każdego ze zmienionych/dodanych routerów:ip_interfaces_config: <hostname>: - name: Loopback1 ipv4: - address: 10.0.0.1/32 ... ospf_config: <hostname>: processes: - process_id: 1 network: - address: 192.168.0.0 wildcard_bits: 0.0.0.255 area: 0 - address: 10.0.0.0 wildcard_bits: 0.0.0.255 area: 0
-
-
Uruchom ansible-owy playbook:
ansible-playbook -i inventory.cfg config_routers.yml
Playbook ten uruchomi listę zadań na routerach wymienionych w
inventory.cfg
. Najpierw wyczyści ewentualnie istniejące loopbacki i konfigurację OSPFa, a następnie skonfiguruje routery zgodnie z plikiemvars.yaml
, dodając loopbacki i OSPFa. Na koniec spinguje wszystkie loopbacki ze sobą, sprawdzając, poprawność konfiguracji dynamicznego routingu. -
Brawo brawo brawo, skonfigurowałeś automatycznie routing dynamiczny w sieci hybrydowej. Spróbuj dodać dodatkowy router wirtualny (a może też i fizyczny?) - pamiętaj o zmodyfikowaniu
inventory.cfg
ivars.yaml
. -
Zauważ, że wcześniej konfigurowaliśmy OSPFa na sieci
192.168.0.0/24
, którą używamy do SSH. Spróbuj teraz skonfigurować bardziej rozbudowaną sieć (R*
iS*
to mogą być albo fizyczne albo wirtualne urządzenia), w której mamy dodatkową prywatną sieć172.31.0.0/24
:Interfejsy
Gi0/0
skonfiguruj ręcznie (tak jak wcześniej) - posłużą nam one tylko do połączenia ssh - nie będziemy ich dodawać do OSPFa.Interfejsy
Gi0/1
iLoopback*
oraz OSPF na sieciach172.31.0.0/24
i wszystkich sieciach loopbackowych zostaną skonfigurowane przez Ansible.Użyj do tego plików
examples/private_net_4_routers/inventory.cfg
iexamples/private_net_4_routers/vars.yaml
.Sprawdź tablice routingu i neighborów OSPFa - powinny teraz zawierać więcej wpisów.
- Wersja 6.1.2 ansible'owej kolecji
ansible.netcommon
zawiera błędy, które nie pozwalają na tworzenie interfejsów. Należy zainstalować starszą wersję, np.6.1.1
.
- Instrukcja instalacji PNETLab: https://pnetlab.com/pages/download
- Dokumentacja Ansible: https://docs.ansible.com/, a w szczególności:
- tworzenie inventory: https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html
- używanie zmiennych: https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html
- kolekcje Cisco: https://docs.ansible.com/ansible/latest/collections/cisco/index.html
- playbooks: https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_intro.html
- Wspierane obrazy: https://pnetlab.com/pages/documentation?slug=PNETLab-Supported-Images. Warto zwrócić uwagę na to, że PNETLab wspiera obrazy nie tylko Cisco, ale również np. Juniper, czy Mikrotik. Powyższa instrukcja nie będzie jednak dla nich działać.