Как развернуть и настроить виртуальную лабораторию GNS3-Server на ProxmoxVE с включенной вложенной виртуализацией (Nested Virtualization) или Desktop-Gui на Windows 10 для построения сетей с использованием MikroTik CHR.
Ссылки на документацию:
Стенд:
Все это настраивалось в следующих версиях ПО:
- ProxmoxVE: 9.1.1;
- Debian: Trixie;
- GNS3: 2.2.55;
- CHR: Raw disk image;
- Windows: 10;
GNS3: Server [link]
- Для GNS3 в ProxmoxVE создана отдельная сеть, которая сидит в своем VLAN. В VM добавлен сетевой интерфейс vmbr0 с tag VLAN. Если прокинуть NIC VF в Debian с использованием SR-IOV, то MikroTik не получает адрес через Cloud в GNS3 от вышестоящего DHCP-сервера.
- Если хост, с которого мы подключаемся к CHR, находится в той же сети, то подключиться можно будет только по MAC-адресу.
- Все это дело так-же можно провернуть и на Oracle VM VirtualBox я изначально так и сделал. В типе сети указывал - сетевой мост.
- Для работы GNS3 в режиме Клиент/Сервер необходимо наличие одной и той же версии.
ProxmoxVE: Nested Virtualization
- Проверка:
# cat /sys/module/kvm_intel/parameters/nested
- Включение:
# echo "options kvm-intel nested=Y" > /etc/modprobe.d/kvm-intel.conf
# modprobe -r kvm_intel
# modprobe kvm_intel
- Проверка:
# cat /sys/module/kvm_intel/parameters/nested
- Передаем параметры VM:
# nano /etc/pve/qemu-server/vm-id.conf
args: -cpu host,-hypervisor - необходимо для работы hv-evmcs
cpu: host,flags=+nested-virt;+hv-evmcs
Настройка VM в WebUI:
- Тип CPU: host
- Extra CPU Flags: nested-virt, hv-evmcs
Проверка аппаратной виртуализации внутри VM:
# egrep '(vmx|svm)' --color=always /proc/cpuinfo
VM:
Обновляем систему и устанавливаем необходимые пакеты.
# apt update
# apt install python3-pip pipx qemu-kvm qemu-utils libvirt-clients libvirt-daemon-system virtinst sudo
Создаем пользователя:
С отключенным шелом и одноименной группой:
# useradd gns3 -r -m -d /mnt/data/gns3 -U -s /bin/false
- Задаем пароль пользователю gns3;
# passwd gns3 | KeePassXC
---
- Проверить значение Shell:
# getent passwd gns3
- Вернуть Shell:
# usermod -s /bin/bash gns3
---
- Добавить пользователя gns3 к группе ubridge, kvm, libvirt, libvirt-qemu;
# usermod -aG ubridge,kvm,libvirt,libvirt-qemu gns3
- Удалить пользователя gns3 из групп ubridge, kvm, libvirt, libvirt-qemu;
# gpasswd -d ubridge,kvm,libvirt,libvirt-qemu gns3
- Проверить в какие группы входит пользователь gns3;
# id gns3
- Удалить пользователя:
# userdel -r gns3
Устанавливаем GNS3-Server:
# sudo -u gns3 pipx install gns3-server==2.2.55
# sudo -u gns3 pipx ensurepath | PATH environment variable добавится в ~/.bashrc
- Для обновления до конкретной версии:
# sudo -u gns3 pipx install --force gns3-server==<версия>
- Для обновления до последней версии:
# sudo -u gns3 pipx upgrade gns3-server
Установка зависимостей:
Из репозитория Ubuntu:
Импортируем новый репозиторий, скачаем и добавим ключ от него.
# cat <<EOFsources > /etc/apt/sources.list.d/gns3.sources
Types: deb deb-src
URIs: http://ppa.launchpad.net/gns3/ppa/ubuntu/
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/gns3-ppa-keyring1.gpg /usr/share/keyrings/gns3-ppa-keyring2.gpg
EOFsources
- Зависимости:
# apt install gpg curl
# curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xB83AAABFFBD82D21B543C8EA86C22C2EC6A24D7F" | gpg --dearmor -o /usr/share/keyrings/gns3-ppa-keyring1.gpg
# curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xF88F6D313016330404F710FC9A2FD067A2E3EF7B" | gpg --dearmor -o /usr/share/keyrings/gns3-ppa-keyring2.gpg
# apt update && apt install dynamips ubridge vpcs
Компиляция из исходников (текущий вариант):
### uBridge:
# git clone https://github.com/GNS3/ubridge.git
# cd ubridge
# make
# make install
---
# chmod +x ubridge
# cp -p ubridge /usr/local/bin
- Обязательно добавляем Сapabilities: ubridge должен работать через capabilities, а не через группу
# setcap cap_net_admin,cap_net_raw=ep /usr/local/bin/ubridge
- Проверяем работу:
# getcap /usr/local/bin/ubridge
---
### Dynamips:
# git clone https://github.com/GNS3/dynamips.git
# cd dynamips
# mkdir build && cd build
# cmake ..
# make
# make install
- Проверяем работу:
# dynamips -v
### VPCS:
# git clone https://github.com/GNS3/vpcs.git
# cd vpcs/src
# ./mk.sh
# cp vpcs /usr/local/bin/
- Проверяем работу:
# vpcs -v
Настройка GNS3-Server:
Systemd [link]
# mkdir /var/log/gns3 && chown gns3:gns3 /var/log/gns3
# cat <<EOFsysd > /etc/systemd/system/gns3.service
[Unit]
Description=GNS3 server
Wants=network-online.target
After=network.target network-online.target
[Service]
User=gns3
Group=gns3
ExecStart=/mnt/data/gns3/.local/bin/gns3server --log /var/log/gns3/gns3.log
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOFsysd
- Включаем автозапуск:
# systemctl daemon-reload
# systemctl enable --now gns3.service && systemctl status gns3.service
- Дополнительные проверки:
# systemctl check gns3
# ps -aux | grep gns3server
# /mnt/data/gns3/.local/bin/gns3server --version
Настройка конфига сервера: [link]
# cat <<EOFsrv > /mnt/data/gns3/.config/GNS3/gns3_server.conf
[Server]
host = 172.16.5.226
port = 3080
allowed_interfaces = ens18
auth = True
user = MTv
password = KeePassXC
report_errors = False
images_path = /mnt/data/gns3/GNS3/images
projects_path = /mnt/data/gns3/GNS3/projects
appliances_path = /mnt/data/gns3/GNS3/appliances
configs_path = /mnt/data/gns3/GNS3/configs
symbols_path = /mnt/data/gns3/GNS3/symbols
[Qemu]
enable_kvm = True
require_kvm = True
EOFsrv
Задаем права:
# chown gns3:gns3 /mnt/data/gns3/.config/GNS3/gns3_server.conf
Для клиентского компьютера достаточно установить: "GNS3 Desktop". В GNS3-GUI при первом запуске,
указываем что будем использовать "Remote-Server", перезапускаем клиент. Далее добаляем "Qemu VMs" и загружаем образ "CHR - RAW".
GNS3: Local [link]
Очень важно в настройках к VM для CHR указывать тип сетевого адаптера "virtio-net-pci",
иначе после подключения линка к "ether1" он может подключиться к "ether5" и из-за этого возникнет путаница.
Необходимо установить:
GNS3 Desktop
GNS3 WebClient
Tools:
- WInPCAP
- Dynamips
- QUEMU
- Intel Hardware Acceleration
- VPCS
- Cpulimit
QUEMU:
- [yes] Enable hardware acceleration
- [yes] Enable hardware acceleration
Qemu VMs:
- HDD:
- Network:
- Name format: e{port1}
- Type: virtio-net-pci
Не забываем в Windows создать loopback-интерфейс и подключить его в "Cloud nodes".
Win+R -> hdwwiz.exe: Выбираем адаптер замыкания на себя Microsoft KM-TEST
Еще можно подключить локальный интерфейс Windows - Ethernet, который используется для выхода в Интернет.
Ошибки:
MikroTik не получает адрес по DHCP:
# tcpdump -i ens16.224 -n port 67 or port 68