Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

Строим полигон для виртуальных машин: fedora 25 openvswitch

Установка и настройка системы Fedora
Ответить
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Строим полигон для виртуальных машин: fedora 25 openvswitch

Сообщение nezabudka »

Превращаем домашний маршрутизатор в dhcp сервер виртуальной сети.

Виртуализация тема интересная и удобство работы с виртуальными машинами
в домашней лаборатории основано на изначально правильно выбранном сетевом
"ядре" виртуальной сети.
Часто в учебном процессе появляется необходимость смоделировать ситуацию,
проверить различные сетевые модели и протестировать работу служб и сервисов.
Пользуюсь попеременно и в разных комбинациях как одиночными запусками
гостевых машин, непосредственно в qemu-kvm, так и работая с фермой виртуальных
машин с установкой через virt-install и управлением через консольный virsh, а
так же бывает полезной простая работа во фронтенде - virt-manager.
более того всегда оставляю возможность для подключения к общей виртуальной
сети отдельных программ, например подключение другой виртуальной сети
созданной на базе лаборатории gns3 с более сложной топологией.

Все запускаемые системы на целевом хосте я попытаюсь параллельно с написанием этой
статьи объединить одним сетевым ядром в виде программного коммутатора openvswitch,
по максимуму упростив установку, настройку и запуск.
Каждая подключенная к сети машина должна быть доступна всем равноправным
участниками этой сети и иметь доступ в глобальную
сеть через домашний роутер напрямую, минуя маршрутизацию на целевом хосте
и это позволит отказаться от дополнительного преобразования адресов через таблицу
нат и как результат, отказаться от проброса портов для выхода за барьер nat,
принимая все виртуальные хосты как отдельные самостоятельные устройства.
Fedora WorkStation сама является по сути маршрутизатором. Не верите?
Запустите в терминале установленной из коробки системы

Код: Выделить всё

cat /proc/sys/net/ipv4/ip_forward
Получим аккуратную единичку. А это значит что ядро переведено в режим
маршрутизации пакетов. Причина тому очень проста. Предустановленная
виртуальная сеть в федоре с ядром на bridge.

Говоря "упростив установку и настройку", мне вспомнился старый родительский
кассетный магнитофон с ползунками эквалайзера и с кучей дополнительных
ручек настроек звука. На его фоне современный плеер выглядит коробкой
с рубильником. При том освободилось место для управлялок более полезных
функций плеера. Пример для меня поучительный, а направление
прогресса более чем очевидно. Делаем так Как учила баба Шура,
чтобы вставил и все работало.

Для начала продумаем систему восстановления если в процессе
эксперимента что то пойдет не так. Вариантов здесь множество,
но я воспользуюсь уже встроенной в файловую систему btrfs возможностью
создавать снэпшоты и откатываться на них при необходимости букавально
несколькими командами в консоли. Если все пройдет гладко то ни что
не помешает весь полученный опыт перенести на любимую
вами файловую систему.

Реализация идеи. В качестве дистрибутива для установки выберу
нашего флагмана виртуализации fedora 25. На свободном месте диска
при установке создам три раздела, swap, загрузочный /boot на ext2 и корневой / на btrfs.
Субтом создастся при этом автоматически и по дефолту будет имеет имя root00
Система установлена, доступ в интернет присутствует.
Что у меня есть из коробки?
Маршрутизатор раздающий динамические адреса всем страждущим в
локальной сети. Домашний компьютер смотрящий одним интерфейсом на
реальном железе в локальную сеть и вторым интерфейсом в виде моста
объединяет виртуальные точки входа гостевых систем. Все подключаемые
виртуалки так же получают динамический адрес через dhcp и посредством ната
предоставляющим netfilter c интерфейсом iptables и надстройкой firewalld
имеют связь с внешним миром. Ядро домашнего компьютера при этом переведено
в режим маршрутизации пакетов. Вот так наворотили из коробки. А все почему?
Потому что совершенно не известно какого типа у вас будет подключение к сети и это
правильно. Но в домашней сети с подключением по локальной сети через роутер
это выглядит мягко сказать избыточно и сильно отвлекает. Нам нужно объединить
две сети, виртуальную и локальную в одну и переложить бремя выделения адресов
на плечи домашнего роутера.
Как работает обыкновенный коммутатор второго уровня?
Вставляешь провода и он связывает всех со всеми. Удобно для домашней
виртуальной сети? Для меня однозначно да и это еще если не брать в расчет
возможность перейти на третий уровень и настроить вланы. Алгоритм работы:

1. Создаем учебную систему на которой будем отрабатывать навыки сетевого
администрирования с обязательной опцией отката в начальную точку при неудачи.
2. Выпиливаем посредника - bridge и отключаем избыточные сервисы.
3. Устанавливаем необходимый софт и настраиваем его.
4.Создаем и запускаем виртуальные машины
а)через virt-install и libvirt
б)через графический фронтенд virt-manger, которым я кстати
сказать пользуюсь очень редко. Но котоый нам может упростить жизнь
в связи с переходом с иксов на wayland и делающим в этот переходной
период невозможным подключение через virt-viewer c условием конечно
что вы планируете работу в gnome на wayland.
с)Через скрипт непосредственно запуск в qemu-kvm и другие продукты
способные работать через виртуальный интерфейс tap0 такие например как gns3

Что я имею из коробки? Установленную систему федора на комп с одной сетевой
картой(1 картой - это важно, иначе придется выставить на второй запрет на поднятие
интерфейса при загрузке).
Плюс, виртуальный мост для подключения виртуальных интерфейсов гостевых
машин. Со всеми наворотами, С пробросом портов, с натом, с кучей статических
адресов, с включенной маршрутизацией пакетов в ядре.
Ядро нашей виртуальной сети будет состоять из програмного коммутатора.
Считаю что файервол удобная надстройка для управления работой netfilter
для тех кто ранее не был знаком с интрефейсом iptables. Но более менее
хорошо разбираясь в синтаксисе правил iptables поселять в свою голову
дублирующие знания по управлению netfilter через нтерфейс firewalld
думаю так же избыточно. Его мы непременно отключим.
Небольшая ремарка для возможных последователей переписать скрипт скажем
на debian отмечу небольшое различие. Если вы войдете в обе системы через команду sudo и
наберете в терминале echo $USER то получите в дебиан root а в федоре имя юзера через
которого зашли в систему. Поэтому имейте ввиду, в строчке кода нужно будет переменную $USER
заменить соответственно на ваш системный логин в ручную. Поведение переменных окружения
по крайней мере в двух этих системах различается.
Запускаем первый скрипт именно через sudo, а не через su.
Есть и небольшая ложка дегтя, как я отметила выше, к вобщем то в целом сладкой
fedorа 25. По умолчанию она использует сервер вайланд и при установки в данный
переходной период через virt-install могут возникнуть проблеммы с подключением virt-viewer.
Есть два простых решения. Первое использовать для подключению к дисплею
сам virt-manager после старта установочного скрипта или запускать целевой хост
в сесии "gnome на X11" выбрав при запуске соответственную строчку в дисплейном
мененджере.

Предыстория закончилась, поехали. Загрузимся в флешки, с лайв
образа с которого устанавливали систему. Подготовим снэпшот для отката системы на стартовые позиции.

Код: Выделить всё

mount /dev/sdaX /mnt
cd /mnt
Посмотрим на субтом и проверим совпадает ли его название с нашим. Переименуем субтом root00 и будем пользоваться им как шаблоном.

Код: Выделить всё

mv root00{,_template}
Сделаем певый снэпшот который и послужит нам боксерской грушей.

Код: Выделить всё

btrfs subvolume snapshot root00{_template,}
cd -
umount /mnt
reboot
Все, восстановление системы подготовили. Загрузимся с жесткого диска.
Запускаем Манускрипт и после перезагрузки радуемся.

Код: Выделить всё

#!/usr/bin/env bash
: << SPRAVKA
Если есть вторая сетевая карта надо установить в ней параметр ONBOOT=no
Для замены fiewalld на интерфейс iptables уберите со строк одиночный знак коментария.
Если работаете в vim достаточно набрать в командной строке :2,$s/^#//
Повторите команду в vim если хотите полностью очистить таблицы iptables
SPRAVKA

if [ $(whoami) == root ] && [ $USER != root ]; then
        echo "Запускаем скрипт"
else
                echo "Запустить скрипт через sudo su \
!Не использовать команду su -"
                exit 1
fi

DIR="/etc/sysconfig/network-scripts/"

IFACE="ifcfg-$(ip r | grep -om 1 'enp[^ ]\+')"
###IFACE="" #Задать в ручную

echo "Отправляем селинукс на Гавайи"
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

echo "Установка пакетов"
dnf update -y
dnf install -y virt-manager openvswitch libvirt virt-install tunctl virt-viewer
#dnf install -y iptables-services
systemctl enable openvswitch
systemctl enable network

#echo "Firewalld в топку!"
#systemctl disable firewalld && systemctl stop firewalld && systemctl mask firewalld
#systemctl enable iptables && systemctl start iptables

###echo "Отключим ipv6 через параметр ядра"
###cp /etc/default/grub{,_$$.bak}
###sed -i '/GRUB_CMDLINE/s/\"$/ ipv6.disable=1\"/' /etc/default/grub
###grub2-mkconfig -o /boot/grub2/grub.cfg

echo "Отключим ipv6, у него в будущем тяжелый график"
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf
sysctl -p

echo "Нам уже не нужен маршрутизатор в ядре!"
cat /proc/sys/net/ipv4/ip_forward

##echo "Очистим все табилцы в iptables"
##for table in $(</proc/net/ip_tables_names); do
##iptables -t $table -F
##iptables -t $table -X
##iptables -t $table -Z
##done
##
##iptables -P INPUT ACCEPT
##iptables -P FORWARD ACCEPT
##iptables -P OUTPUT ACCEPT
##
##if [ ! -f /etc/sysconfig/iptables_*.bak ]; then
##        mv /etc/sysconfig/iptables{,_$$.bak}
##fi
##
##/usr/sbin/service iptables save

echo "Разрушим дефолтную виртуальную сеть"
sleep 1
virsh net-destroy default
virsh net-autostart --disable default
virsh net-undefine default

echo "Сделаем бэкап"
cp ${DIR}${IFACE}{,_$$.bak}

echo "Создадим новые конфиги интерфейсов"
cat>${DIR}ifcfg-ovsbr0<<\STOP
DEVICE=ovsbr0
DEVICETYPE=ovs
TYPE=OVSBridge
ONBOOT=yes
BOOTPROTO=dhcp
STOP

sed -i '/HWADDR/!d' ${DIR}${IFACE}
cat>>${DIR}${IFACE}<<STOP
DEVICE=${IFACE#*-}
ONBOOT=yes
NETBOOT=yes
TYPE=OVSPort
BOOTPROTO=none
DEVICETYPE=OVSIntPort
OVS_BRIDGE=ovsbr0
STOP

echo "Стартуем коммутатор"
systemctl start openvswitch

echo "Запустим сеть, дождитесь, это займет некоторое время..."
systemctl start network

echo "Создадим новую дефолтную виртуальную сеть"
sleep 1
cat>/tmp/default.xml<<\STOP
<network>
  <name>default</name>
  <forward mode='bridge'/>
  <bridge name='ovsbr0'/>
  <virtualport type='openvswitch'/>
</network>
STOP

echo "Зарегистрируем новую дефолтную сеть и запустим ее"
virsh net-define /tmp/default.xml
virsh net-start default
virsh net-autostart default

###echo "Создадим пул в домашней директории"
###mkdir /POOL
###virsh pool-define-as POOL dir --target /POOL
###virsh pool-build POOL
###virsh pool-start POOL
###virsh pool-autostart POOL
###virsh pool-list

echo "Добавим пользователя в дополнительные группы"
usermod -aG libvirt,qemu,kvm $USER

#####systemctl restart libvirtd
#####echo export LIBVIRT_DEFAULT_URI="qemu:///system" >> /home/$USER/.bashrc

echo "Конфигурация закончена, через 10 секунд компьютер будет перезагружен.
Для отмены нажмите Ctrl+C. Для поднятия сети нужна перезагрузка!"
for((i=10; i != 0; i--)); do
	echo $i
	sleep 1
done
echo "Перезагружа-а-а-юсь! ,,,(o_O)?"
reboot
Если все работает удостоверяемся что наша система
больше не является маршрутизатором по определению

Код: Выделить всё

cat /proc/sys/net/ipv4/ip_forward
Вывод должен порадовать нас ноликом.
Во второй части сделаем необходимый тюнинг и добавим для удобства
запуска виртуалок несколько скриптов.

Если что то пошло не так, возвращаемся назад и пытаемся проанализировать
ошибки. Если старания не привели к успеху и вы окончательно запутались,
то вернем систему к отправной точке - в первородное ее состояние.
Это займет несколько минут а при следующем старте скрипта можно ввести
дополнительные строчки индикаторы и тогда очередной старт
будет сопровождаться дополнительным выводом всего что происходит на
каждом его этапе работы.
Загрузимся с лайв диска и откатим систему.

Код: Выделить всё

sudo su
mount /dev/sdaX /mnt
cd /mnt
btrfs subvolume delete root00
btrfs subvolume snapshot root00{_template,}
cd -
umount /mnt
reboot
Начинай сначала!
--------------
Продолжение здесь
Последний раз редактировалось nezabudka 18 янв 2019, 10:07, всего редактировалось 8 раз.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: Строим полигон для виртуальных машин: fedora 25 openvswi

Сообщение nezabudka »

Статья сырая. Написала по наброскам буквально за пол чаcа. Тем более пишу с маленького нетбука да еще с мобильного инета. Провайдер сволочь чинит линию с 24 декабря. Помогите создать проверку запуска от рута но с переменной $USER != root не могу уже. Если что, завтра :cry: сама допишу. Буду признательна любым замечаниям
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: Строим полигон для виртуальных машин: fedora 25 openvswi

Сообщение nezabudka »

Ладно, а то спать плохо буду :D

Код: Выделить всё

if [ $(whoami) == root ] && [ $USER != root ]; then
        echo "Запускаем скрипт"
        else
                echo "Запустить скрипт через sudo su \
!Не искользовать команду su -"
                exit 1
        fi
Вставила в скрипт.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Olej

Re: Строим полигон для виртуальных машин: fedora 25 openvswi

Сообщение Olej »

nezabudka писал(а):Превращаем домашний маршрутизатор в dhcp сервер виртуальной сети.
Затея хорошая. Я делал нечто подобное (но правда другим инструментарием) при написании кода и отработке специфических драйверов (модулей ядра) сетевых протоколов, с тем, чтобы при неизбежных ошибках в коде не заваливать вообще операционную систему на хостах виртуальной сети.
Хотя как оно полезно в учебном процессе сказать ничего не могу ... да и мало меня это занимает:
nezabudka писал(а): Часто в учебном процессе появляется необходимость смоделировать ситуацию,
проверить различные сетевые модели и протестировать работу служб и сервисов.
Но тут попутно было затронуто вами пара тем, которые интересно можно было бы поднять отдельными темами форума, и любопытно обсудить в деталях, и поделиться ссылками на публикации по темам:

1. btrfs :
nezabudka писал(а): Вариантов здесь множество,
но я воспользуюсь уже встроенной в файловую систему btrfs возможностью
создавать снэпшоты и откатываться на них при необходимости букавально
несколькими командами в консоли. Если все пройдет гладко то ни что
не помешает весь полученный опыт перенести на любимую
вами файловую систему. Btrfs хорошо между прочим конвертируется
в extX на горячую, без какой либо переустановки.
2. Wayland :
nezabudka писал(а): Есть и небольшая ложка дегтя, как я отметила выше, к вобщем то в целом сладкой
fedorа 25. По умолчанию она использует сервер вайланд и при установки в данный
переходной период через virt-install могут возникнуть проблеммы с подключением virt-viewer.
Есть два простых решения. Первое использовать для подключению к дисплею
сам virt-manager после старта установочного скрипта или запускать целевой хост
в сесии "gnome на X11" выбрав при запуске соответственную строчку в дисплейном
мененджере.
1. Насколько я смотрел Fedora 25 (может и ошибся, но и в 23, 24 так же было) Wayland используется только в сборке GNOME. Все остальные сборки (которые у Fedora называются спинами) используют X11.
2. Опять же предположительно, Wayland - большая гадость в сравнении с X11, ... которая может ожидать пользователей Linux в ближайшие времена.

KDE и Wayland
Сергей Голубев
27.12.2016 13:33:12
Брайан Лундюк считает, что его пессимистический прогноз относительно перспектив Wayland в 2016 году оказался ошибочным, поскольку в дистрибутиве Fedora 25 этот сервер используется по умолчанию. Но на мой взгляд, эксперт тут явно скромничает — даже поверхностное знакомство с системой показывает, что связка Wayland+GNOME пока работает явно не лучшим образом.
...
Впрочем, может быть виновата не новая графическая подсистема Wayland, а рабочее окружение GNOME? Может быть, все проблемы решатся заменой GNOME на KDE?

Увы, это не так. Вот что пишут по поводу возможности замены традиционной системы X11 на Wayland сами разработчики KDE.
...
Таким образом, несмотря на решение (кстати, весьма спорное с точки зрения обычного пользователя) разработчиков дистрибутива Fedora, графическая система Wayland пока не готова к массовому применению на десктопе. Возможно, в будущем году что-то изменится, но наверняка этого утверждать нельзя.
Ответить

Вернуться в «Установка и обновление системы»