Настраиваем мост (bridge) между GNS3 и виртуальным сервером - АлтунинВВ.Блог - всё об IT-технологиях!
Понедельник, 21 сентября 2020 19:00

Настраиваем мост (bridge) между GNS3 и виртуальным сервером

Россия
Оцените материал
(0 голосов)

Если вы когда-нибудь запускали виртуальные машины в GNS3 через QEMU и пытались загрузить на эту виртуальную машину файл или скачать обновления для операционной системы, вы могли столкнуться с проблемой низкой скорости доступа к интернету и ЛВС из виртуальной машины.

Многое зависит от производительности ПК, на котором запускается виртуализация, но в целом скорость доступа может быть очень низкой.

Всё дело в том, что сам GNS3 не предназначен для передачи такого объема информации. Он прекрасно справляется с задачей эмуляции сети, передачей пакетов и так далее. Но как только объем передаваемой информации резко возрастает он может не справляться большим объемом передаваемой информации, так как в том числе, эмулирует и сетевые адаптеры виртуальных машин.

Сегодня мы рассмотрим способ решить эту проблему — настроим сетевой мост (bridge) в виртуальной машине GNS3.

Создадим простой проект в GNS3.

Добавим шаблон для Tiny Core Linux 6.4  и перетащим его в окно проекта. Так же добавьте Cloud.

Соедините Cloud1 и  TinyCoreLinux

У меня GNS3 настроен таким образом, что на eth2 по DHCP выдается IP-адрес с доступом к интернету.

Запустим узел и перейдем в консоль.

Проверим настройки сети

2020-09-20_16-42-27.png

Попробуем что-то скачать

В консоли введем

tce-load -wi mc

 

 2020-09-20_16-42-07.png

Скорость скачивания очень маленькая.

Нажмем ctrl+c чтобы прервать загрузку.

Один из способов, добиться нормальной скорости — настроить бридж между tap интерфейсом и сетевым адаптером виртуальной машины.

Обратите внимание для использования с бриджем, нужно добавить еще один интерфейс к виртуальной машине GNS3!

Настройка бриджа

Откроем консоль GNS3

И введем:

sudo apt install uml-utilities bridge-utils
modprobe tun
sudo tunctl -u gns3
sudo ifconfig tap0 0.0.0.0 promisc up
sudo ifconfig eth2 0.0.0.0 promisc up
sudo brctl addbr br0
sudo brctl addif br0 tap0
sudo brctl addif br0 eth2
sudo ifconfig br0 up
sudo dhclient br0
sudo brctl show br0

bridge name     bridge id               STP enabled     interfaces
br0             8000.00155d3fc129       no              eth2
                                                        tap0

Проверим статус интерфейсов

ip a

...
9: tap0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 1000
    link/ether 9a:8e:e0:93:bd:6e brd ff:ff:ff:ff:ff:ff
10: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:15:5d:3f:c1:29 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.45/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe3f:c129/64 scope link
       valid_lft forever preferred_lft forever

Бридж получил ip-адрес.

Перезагрузим виртуальную машину GNS3 и проверим, статус бриджа.

Бриджа нет! А всё потому, что мы настраивали его из консоли вручную, а при загрузке GNS3 не знает, что нужно его создать!

Настройка автоматического создания бриджа при запуске GNS3

Откроем консоль GNS3

Создадим скрипт для конфигурации нашего бриджа: 

touch /usr/local/share/br0.sh

  Вставим в этот файл наш скрипт: 

modprobe tun
tunctl -u gns3
ifconfig tap0 0.0.0.0 promisc up
ifconfig eth2 0.0.0.0 promisc up
brctl addbr br0
brctl addif br0 tap0
brctl addif br0 eth2
ifconfig br0 up
dhclient br0

сделаем исполняемым:

sudo chmod +x /usr/local/share/br0.sh

Вставим в файл /etc/rc.local строку

sudo /usr/local/share/br0.sh

перед

exit 0

Перезагрузим виртуальную машину

Проверяем:

ip a
...
4: eth2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
    link/ether 00:15:5d:3f:c1:29 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::215:5dff:fe3f:c129/64 scope link
       valid_lft forever preferred_lft forever
...
6: tap0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 1000
    link/ether 2e:76:21:38:da:c7 brd ff:ff:ff:ff:ff:ff
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:15:5d:3f:c1:29 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.45/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe3f:c129/64 scope link
       valid_lft forever preferred_lft forever

Интерфейс появился.

Удалим и добавим облако.

Соединим облако и узел через новый интерфейс br0

Попробуем снова запустить загрузку, на этот раз установим openssl

tce-load -wi openssl

Теперь, после установки openssl, вы можете проверить скорость скачав любой «тяжелый» файл с интернета!

Чтобы не вводить много букв, вы можете воспользоваться любым сервисом Shorten URL

wget https://github.com/GNS3/gns3-gui/releases/download/v2.2.14/GNS3.VM.KVM.2.2.14.zip

Файл размером 560Мб скачивается за 6-7 минут. Учитывая какая скорость была до этого и то, что сам дистрибутив Tiny Core Linux довольно старый и мы не используем virtio это неплохой результат!

Как видите, скорость загрузки значительно повысились!

На этом настройка закончена. Вы теперь можете постоянно использовать этот адаптер, чтобы  получать доступ к сети Интернет из виртуальные машин QEMU в GNS3.

Заключение

Сегодня мы рассмотрели настройку сетевого моста (bridge) для соединения виртуальных машин, запущенных в GNS3 к внешним сетям.

Мы добавили Tiny Core Linux и проверили скорость доступа к сети Интернет.

Настроили сетевой мост на виртуальном сервере GNS3 и убедились, что его положительно влияет на скорость передачи данных.

Настроили автоматическое создание сетевого моста при включении виртуального сервера GNS3.

Прочитано 167 раз Последнее изменение Понедельник, 21 сентября 2020 21:38