# Заметки по PNET Lab

- [Заметки по PNET Lab](#заметки-по-pnet-lab)
  - [Установка PNET Lab](#установка-pnet-lab)
    - [Установка Ubuntu 20.04](#установка-ubuntu-2004)
    - [Установка ishare2](#установка-ishare2)
    - [Установка платформы PNET Lab](#установка-платформы-pnet-lab)
  - [Загрузка образов устройств](#загрузка-образов-устройств)
  - [Добавление своего qemu образа](#добавление-своего-qemu-образа)
    - [Добавление образа Mikrotik](#добавление-образа-mikrotik)
    - [Права файлов](#права-файлов)
  - [Добавление образов Cisco IOL](#добавление-образов-cisco-iol)

PNETLab (Packet Network Emulator Tool Lab, <https://pnetlab.com>) - форк EVE-NG платформы виртуализации для построения различных сетевых топологий и эмуляции сетевых устройств.

Кроме этого, PNETLab это платформа, которая позволяет создавать и делиться с сообществом своими лабораторными стендами с целью обучения сетевым технолгиям и тестирования.

Платформа состоит из двух основных элементов - PNETLab Box и PNETLab store

PNETLab Box (с 2-мя режимами работы: Offline и Online) - это виртальная машина, которая устаналивается на гипервизор и позволяет создавать и загружать лабораторные стенды.

PNETLab Store - web платформа с большим количеством бесплатных лабораторных стендов.

Платформа позволяет эмулировать сетевые устройства Cisco (IOS, Dynapimps), контейнеры Docker, образы устройств в формате Qemu.

## Установка PNET Lab

Установка платформы состоит из трёх основных этапов:

- установка серверной Ubuntu 20.04 (на момент написания заметки поддерживается только эта версия)
- установка утилиты ishare2. Утилита позволяет скачивать лабораторные стенды, образы устройств и обновления для платформы
- установка платформы PNET Lab

### Установка Ubuntu 20.04

Необходимо выполнить установку серверной версии ОС без обновлений в процессе установки.

### Установка ishare2

ishare2 - это инструмент, который позволяет загружать образы устройств для сетевых эмуляторов и управлять ими. ishare2 может загружать образы qemu, dynamips, bin/iol и docker. Он также может автоматически загружать образы, необходимые для лабораторий.

Репозиторий утилиты расположен по адресу: <https://github.com/ishare2-org/ishare2-cli>

Установка производится от рута командой

```shell
wget -O /usr/sbin/ishare2 https://raw.githubusercontent.com/ishare2-org/ishare2-cli/main/ishare2 && chmod +x /usr/sbin/ishare2 && ishare2
```

В процессе установки будет задано несколько вопросов, нажатие Enter применит значения по-умолчанию.

### Установка платформы PNET Lab

После установки ishare2 можно приступать к установке платформы

```shell
root@pnet:~# ishare2 upgrade
1) Upgrade ishare2
2) Upgrade PNETLab
3) Upgrade ishare2 GUI
4) Exit
Please, select an option: 2
1) Upgrade PNETLab v5 STABLE
2) Upgrade PNETLab v5 BETA
3) Upgrade PNETLab v6 BETA
4) Exit
```

- PNETLab v5 STABLE не подходит, т.к. поддерживает только Ubuntu 18.04
- Upgrade PNETLab v6 BETA - на момент написания заметки имела ограниченный функционал

Стоит выбрать `2) Upgrade PNETLab v5 BETA`

Установка занимает 15-20 минут, после чего консоль вернётся в меню `ishare2`, где нужно выбрать пнукт 4 для выхода и перезагрузить сервер.

## Загрузка образов устройств

Для загрузки образов используется утилита `ishare2`

```shell
root@pnetlab:~# ishare2 --help
Syntax

ishare2 [action] [param1] [param2] [--overwrite]

action:
    search      : Search for images available on LabHub mirrors.
    pull        : Download an image by specifying the type and id.
    installed   : Shows images installed on the server.
    labs        : Shows available labs and downloads the images for the selected lab.
    mylabs      : Same as labs command but you can use a customized path.
    relicense   : Generates an iourc license for iol images.
    upgrade     : Shows a menu to upgrade ishare2 or PNETLab.
    test        : Test internet connectivity to required sites.
    help        : Shows full help information.

param1:
    type = all, iol, qemu, dynamips, docker or name.

param2:
    id = This can be obtained using ishare2 search <type>

--overwrite:
    Used to overwrite an existing image if it already exists on your system.

Try: ishare2 help for more information.
```

Для поиска доступных образов

```shell
root@pnetlab:~# ishare2 search
Usage: ishare2 search <type> [keyword]
       ishare2 search all
Types: qemu, iol, dynamips
```

Показать все доступные образы формата `qemu`

```shell
root@pnetlab:~# ishare2 search qemu                                                      
=============================                                                            
    Available QEMU images                                                                
=============================                                                            
ID    NAME                                                 SIZE     
--    ----                                                 ----      
1     128T-522                                             2.5 GiB  
2     6wind-cgnat-ee-x86_64-2.2.6                          528.6 MiB 
3     6wind-router-ee-x86_64-2.2.6                         528.3 MiB
...
1248  zabbix-3.0                                           3.6 GiB   
1249  zabbix-3.4                                           683.3 MiB
                                                                                         
1249 QEMU images found
```

При поиске можно использовать уточняющие критерии

```shell
root@pnetlab:~# ishare2 search qemu debian
=============================
    Available QEMU images    
=============================
ID   NAME                 SIZE
--   ----                 ----
597  linux-debian-10      1.3 GiB
598  linux-debian-10      1.3 GiB
599  linux-debian-10      1.3 GiB
600  linux-debian-10.3.0  581.3 MiB

4 QEMU images found for the term: "debian"
root@pnetlab:~# 
root@pnetlab:~# 
root@pnetlab:~# ishare2 search qemu pfsense
=============================
    Available QEMU images    
=============================
ID   NAME                      SIZE
--   ----                      ----
764  pfsense-2.3.3             555.5 MiB
765  pfsense-CE-2.4.4          452.7 MiB
766  pfsense-CE-2.4.5          521.5 MiB
767  pfsense-CE-2.4.5-p1       531.0 MiB
768  pfsense-CE-2.5.0-RELEASE  742.6 MiB
769  pfsense-CE-2.5.1-RELEASE  742.9 MiB
770  pfsense-CE-2.5.2          1.5 GiB
771  pfsense-CE-2.5.2-RELEASE  785.2 MiB
772  pfsense-CE-2.6            2.3 GiB
773  pfsense-pfs-2.6.0         832.4 MiB
774  pfsense-pfs-2.7.0         442.3 MiB

11 QEMU images found for the term: "pfsense"
```

Для установки конкретного образа достаточно указать его ID. Например, для скачивания образа `linux-debian-10.3.0` с идентификатором 600

```shell
root@pnetlab:~# ishare2 pull qemu 600
[!] IMAGE INFO 
 - Image Name       : linux-debian-10.3.0
 - Image Size       : 581.3 MiB
 - Image Type       : QEMU
 - Image ID         : 600
 - Image path       : /opt/unetlab/addons/qemu/linux-debian-10.3.0
 - Using host       : https://labhub.eu.org
[!] DOWNLOADING IMAGE 
/opt/unetlab/addons/qemu/linux-debian-10.3.0 100%[=============================================================================================>] 581.33M  10.5MB/s    in 69s     
[+] DOWNLOAD COMPLETED! 
[-] Extracting: linux-debian-10.3.0.tgz file... 
[+] Extracted: /opt/unetlab/addons/qemu/linux-debian-10.3.0. Image ready to use. 
[-] Fixing permissions... 

[+] Fix permissions command has been executed correctly 
```

## Добавление своего qemu образа

### Добавление образа Mikrotik

В репозитории `ishare2` есть несколько версий Mikrotik OS, последняя из доступных на момент написания заметки - 7.6, хотя на официальном сайте уже есть 7.16.2.

```shell
root@pnetlab:~# ishare2 search qemu mikrotik
=============================

    Available QEMU images
=============================
ID   NAME             SIZE
--   ----             ----
635  mikrotik-6.39    45.6 MiB
...
662  mikrotik-7.5     37.2 MiB
663  mikrotik-7.6     39.1 MiB

29 QEMU images found for the term: "mikrotik"
```

Чтобы проще разобраться с форматом и именованием образов, скачаем образ 7.6 из репозитория

```shell
root@pnetlab:~# ishare2 pull qemu 663
[!] IMAGE INFO 
 - Image Name       : mikrotik-7.6
 - Image Size       : 39.1 MiB
 - Image Type       : QEMU
 - Image ID         : 663
 - Image path       : /opt/unetlab/addons/qemu/mikrotik-7.6
 - Using host       : https://drive.labhub.eu.org
[!] DOWNLOADING IMAGE 
/opt/unetlab/addons/qemu/mikrotik-7.6/hda.qc 100%[==================================>]  39.06M  42.0MB/s    in 0.9s    
[+] DOWNLOAD COMPLETED! 
[-] Fixing permissions... 

[+] Fix permissions command has been executed correctly 
```

Образы сохраняются в зависимости от формата, в соответствующей директории

```shell
root@pnetlab:~# ls /opt/unetlab/addons/
docker  dynamips  iol  qemu
```

т.к. образ mikrotik имеет формат qemu, соответственно он и сохранился в

```shell
root@pnetlab:~# tree /opt/unetlab/addons/qemu/
/opt/unetlab/addons/qemu/
├── linux-debian-10.3.0
│   └── virtioa.qcow2
└── mikrotik-7.6
    └── hda.qcow2

2 directories, 2 files
```

в этой же директории сохранился ранее скачанный образ Debian.

Теперь, чтобы скачать поледний доступный образ mikrotik 7.16.2 создадим соответсвтующую директорию и скачаем VMDK образ Mikrotik Cloud Hosted Router

```shell
root@pnetlab:~# cd /opt/unetlab/addons/qemu/
root@pnetlab:/opt/unetlab/addons/qemu# mkdir mikrotik-7.16.2 && cd mikrotik-7.16.2
root@pnetlab:/opt/unetlab/addons/qemu/mikrotik-7.16.2# wget https://download.mikrotik.com/routeros/7.16.2/chr-7.16.2.vmdk.zip
```

Теперь скачанный образ необходимо разархивировать и конвертировать в формат QCOW2

```shell
root@pnetlab:/opt/unetlab/addons/qemu/mikrotik-7.16.2# ls
chr-7.16.2.vmdk.zip
root@pnetlab:/opt/unetlab/addons/qemu/mikrotik-7.16.2# unzip chr-7.16.2.vmdk.zip 
Archive:  chr-7.16.2.vmdk.zip
  inflating: chr-7.16.2.vmdk         
root@pnetlab:/opt/unetlab/addons/qemu/mikrotik-7.16.2# ls -l
total 80044
-rw-r--r-- 1 root root 41746432 Nov 26 13:16 chr-7.16.2.vmdk
-rw-r--r-- 1 root root 40216509 Nov 27 08:24 chr-7.16.2.vmdk.zip
```

Для конвертации в формат QCOW2 необходима утилита `qemu-img`, которая в Ubuntu входит в состав пакета `qemu-utils`.

```shell
root@pnetlab:/opt/unetlab/addons/qemu/mikrotik-7.16.2# apt search qemu-img
Sorting... Done
Full Text Search... Done
qemu-block-extra/now 1:4.2-3ubuntu6.30 amd64 [installed,local]
  extra block backend modules for qemu-system and qemu-utils

qemu-utils/now 1:4.2-3ubuntu6.30 amd64 [installed,local]
  QEMU utilities
```

В состав PNET Lab на основе Ubuntu этот пакет уже входит.

Для конвертации VMDK в QCOW2

```shell
root@pnetlab:/opt/unetlab/addons/qemu/mikrotik-7.16.2# qemu-img convert -f vmdk -O qcow2 chr-7.16.2.vmdk hda.qcow2
```

**!! стоит обратить внимание - имя файла после конвертации должно быть `hda.qcow2`**

Скачанный архив и VMDK образ больше не нужны, их необходимо удалить.

### Права файлов 

Все скачанные образы должны иметь определённые права - 755.

Изменить права можно вручную для файла или через web-интерфейс в разделе `System` => `System Settings` => `Fix Permissions`

Кроме этого есть специальный wrapper, изменить права можно также

```shell
/opt/unetlab/wrappers/unl_wrapper -a fixpermissions
```

Теперь при добавлении новой ноды в лабораторный стенд в выпадающем списке будет доступен образ Mikrotik 7.16.2

## Добавление образов Cisco IOL

С помощью `ishare2` скачал 2 образа Cisco IOL

```shell
root@pnetlab:~# ishare2 installed iol

====================================
    Showing installed IOL images    
====================================
/opt/unetlab/addons/iol/bin/
├── [-rwxr-xr-x 1.5K]  CiscoIOUKeygen.py
├── [-rwxr-xr-x 120M]  i86bi_LinuxL2-AdvEnterpriseK9-M_152_May_2018.bin
├── [-rwxr-xr-x 176M]  i86bi_LinuxL3-AdvEnterpriseK9-M2_157_3_May_2018.bin
├── [-rwxr-xr-x   38]  iourc
└── [-rwxr-xr-x 1.7K]  keepalive.pl

0 directories, 5 files
```

НО, скачать образы недостаточно, необходимо ещё сгенерировать лицензионный ключ, который хранится в файле `iourc`. Для генерации ключа необходимо запустить python скрипт `CiscoIOUKeygen.py`

Пример работы скрипта:

```shell
root@pnetlab:~# /opt/unetlab/addons/iol/bin/CiscoIOUKeygen.py

*********************************************************************
Cisco IOU License Generator - Kal 2011, python port of 2006 C version
hostid=007f0101, hostname=pnetlab, ioukey=7f03e7

*********************************************************************
Create the license file $HOME/.iourc with this command:

The command adds the following text to $HOME/.iourc:
[license]
pnetlab = b126e08dae13e962;

*********************************************************************
Disable the phone home feature with this command:
 grep -q -F '127.0.0.1 xml.cisco.com' /etc/hosts || echo '127.0.0.1 xml.cisco.com' | sudo tee -a /etc/hosts

The command adds the following text to /etc/hosts:
127.0.0.1 xml.cisco.com

*********************************************************************
```

В файл `iourc` необходимо заменить лицензионный ключ на тот, который сгенерирован скриптом.

В конце необходимо поправить права к файлам:

- через web-интерфейс в разделе `System` => `System Settings` => `Fix Permissions`
- или командой

```shell
/opt/unetlab/wrappers/unl_wrapper -a fixpermissions
```
