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

Установка qemu-kvm и настройка локальной виртуальной сети 2.

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

Установка qemu-kvm и настройка локальной виртуальной сети 2.

Сообщение nezabudka »

Для начала стоит оговорится что понятие виртуальная локальная сеть предусматривает
несколько иное понятие чем то которое мы вкладываем в этой серии статей. Давайте для удобства
все же определим это как имя локальной переменной исключительно для данного поста.
В предыдущей части "Первая часть" мы установили qemu-kvm и запустили как есть,
предусмотреной по дефолту. Что бы терминал не висел у нас после запуска виртуальной машины
без дела создадим легкий скрипт по запуску на bash в фоновом режиме. Мы потом его перепишим.

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

cd kvm && vim 1vm.sh

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

#!/usr/bin/env bash
kvm -hda Deb1.img -cdrom debian.iso -boot c &
exit 0
Сохраняем и добавляем права на запуск.

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

chmod 755 1vm.sh
Теперь после набора ./1 и нажатии клавиши <Tab> мы получим к запуску полное имя файла.
Жмем enter, запускается машинка но теперь крым снова наш, можно переместить терминал на
следующий рабочий стол и запустить если нужно другую машину. Теперь ближе к настройке сети.
И прежде чем ломать давайте осмотримся и разберемся в том что мы имеем.
Установим и запустим на госте nmap

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

nmap -sP 10.0.2.0/24 	#команда посылает пинги на все адреса нашей подсети.
В выводе команды обнаружим
10.0.2.2 адрес целевого хоста
10.0.2.3 адрес виртуального ДНС сервера раздающего адреса
10.0.2.15 и естественно наш адрес . Все это так же доступно и в командах
arp netstat и ifconfig. На первый взгляд все как будто достаточно изолировано
и работает вполне самостоятельно но если мы запустим на целевом хосте wireshark
на интерфейсе loopback:lo и с виртуалки просканируем к примеру порты
nmap 10.0.2.2 то увидим со стороны целевой машины что общение идет с "двух"сторон только
на локальном адресе 127.0.0.1 с указанного высше интерфейса обратной петли, а значит
машинка наша ведет себя не очень то изолированно. Добится полной виртуализации сетевых
интерфейсов нам крайне важно и в этом нам поможет настройка моста. Алгоритм наших действий.
Настраиваем на целевой машине мост включающий в себя интерфейсы br0 eth0 и тунели с именами
tap0 tap1 и т.д по количеству подключенных машин. Присоединять интерфейс глобальной сети
к мосту не нужно, что бы ни чего не сломать мы просто включим перадресацию nat между
"локальным" интерфейсом и "глобальным" с помощью iptables и все.
Проверим установлены ли у нас пакеты bridge-utils uml-utilities
Если нет установим их

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

sudo apt-get install bridge-utils uml-utilities
Приведем к следующему виду конфиг /etc/network/interfaces

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

auto lo			
iface lo inet loopback
auto usb0		#здесь вероятнее будет имя вашего интерфейса
iface usb0 inet dhcp	#не меняйте его
auto eth0		#от сюда начинаются наши строчки
iface eth0 inet manual
auto br0
iface br0 inet static
	address 192.168.1.100  
	netmask 255.255.255.0
        bridge_ports eth0
        bridge_stp off
        bridge_fd 9
У меня выход в глобальную сеть осуществлен через интефейс usb0
то есть через подключенный смартфон, у вас будет свой возможно ppp0.
Поднимим прoписанные интерфейсы

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

sudo systemctl restart networking
Можно пойти и по другому пути.
В выводе команды brctl мы увидим список всех доступных опций для создания моста и далее.

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

brctl addbr br0		#создаем мост с именем br0
brctl addif br0 eth0	#добавляем интерфейс с именем eth0 в мост
ifconfig br0 up		#не уверена в необходимости этой команды но вреда она не принесет.
Ну вот как то так, пример просто для ознакомления с возможностями команды brctl

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

brctl show		#смотрим что получилось
bridge name	bridge id		STP enabled	interfaces
br0		8000.bc5ff457df92	     no		eth0
Ну и естественно осмотреть все хозяйство будет удобно при помощи утулиты ifconfig
Превращаем наш хост в маршрутизатор добляем следующие строки в файл /etc/sysctl.conf

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

/etc/sysctl.conf
 net.bridge.bridge-nf-call-ip6tables = 0
 net.bridge.bridge-nf-call-iptables = 0
 net.bridge.bridge-nf-call-arptables = 0
 net.ipv4.ip_forward = 1		#включаем возможность маршрутизации ядра 
И что бы изменения вступили в силу вводим команду

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

sysctl -p /etc/sysctl.conf
Теперь запустим виртуалку для редактирования конфигов.

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

./1vm.sh
Здесь нас интересуют два файла. В первом /etc/network/interfaces добавляем строки

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

allow-hotplug eth0
iface eth0 inet static
	address 192.168.1.33
	netmask 255.255.255.0
	broadcast 192.168.1.255
	gateway 192.168.1.100
Во втором коментируем единственную строчку и добавляем свой адрес шлюза

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

nameserver 192.168.42.129
Это адрес смотрящий в локалку моего телефона. Ваш адрес может быть адресом модема
или адресом провайдера. В следующий раз мы будем запускать нашу машинку уже в новом
качестве как точку локальной сети. Замечу на будущее только одно, команды

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

systemctl restart networking
systemctl reboot
Изменяют параметры машины установленные при запуске на дефолтные. Поэтому после
изменений в конфигурации сети необходимо остановить машину и снова ее запустить.
Мы позже пропишим в скрипте запуска параметр reboot для старта машины в таких случаях.
Выполним следующее и выйдим из виртуалки

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

shutdown -h now
Для запуска обновленной машины нужен и обновленный скрипт. Переписываем следующими строчками

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

#!/usr/bin/env bash
sudo  tunctl -b -u nezabudka   #вместо моего вставляем своего юзера
sudo ifconfig tap0 up		#создаем именованный канал и поднимаем его,
                                                #для каждой машины свой(tap1, tap2......)
sudo brctl addif br0 tap0	#добавляем в мост(tap1, tap2....)
macaddress=$(printf 'DE:AD:BE:EF:%02X:%02X\n' $((RANDOM%256)) $((RANDOM%256)))
kvm -hda Deb1.img -cdrom debian.iso -net nic,model=e1000,macaddr=${macaddress},vlan=0 -net tap,vlan=0,ifname=tap0,script=no &
exit 0
В этом скрипте определяется переменная $macaddress это необходимо делать если будут
запущены несколько машин соединенных в локалке. Потому что адрес машин объединеных в одну
сеть не может быть одинаков. Так же в каждом скрипте своих машин меняйте tap0 на другой ну
и естественно имидж образа. Кстати vlan=0 в параметрах kvm это совсем не то что принято считать
в сетевой терминалогии.(совсем как в названии нашей статьи :)) Модель эмулируемой сетевой
карты можно не указывать, будет использована предусмотренная по умолчанию.
Запустим машину и проверим сеть

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

./1vm.sh
nmap 192.168.1.100
Если все нормально можно в файле /etc/hosts записать имя хоста
192.168.1.100 linux #нормальное имя для машины в своей сети
Нам осталось только прописать правило в iptable на целевой машине для выхода
нашей виртуалки в глобальную сеть

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

sudo iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o usb0 -j MASQUERADE
Перейдем в нашу машину и проверим доступность сети для этого установим браузер

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

apt-get install w3m
Запускаем любимый ресурс

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

w3m linuxim.ru
Если все нормально возвращаемся на целевой хост проверяем на всякий случай все соединения
и устанавливаем программу которая сохранит наши настройки iptables

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

sudo apt-get install iptables-persistent
В ходе установки будет предложено записать правила в файл, соглашаемся.
В следующей части мы осмотримся в том что создали, разберемся во всем, перепишим файл запуска
и по возможности сделаем работу удобней.
Не сомневаюсь что допустила кучу ошибок и буду рада любой помощи как по теме
так и редакции текста.
Ссылка на третью часть
Последний раз редактировалось nezabudka 12 май 2015, 18:58, всего редактировалось 5 раз.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Sunderland93

Re: Установка qemu-kvm и настройка локальной виртуальной сет

Сообщение Sunderland93 »

Весьма неплохо. Но чувствуется некая узкозаточенность в тексте, хоть ты и просто приводила свой случай как пример. Однако я для подобных полигонов всё равно за GUI :D
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: Установка qemu-kvm и настройка локальной виртуальной сет

Сообщение nezabudka »

Sunderland93 писал(а):Весьма неплохо. Но чувствуется некая узкозаточенность
Конечно, я сразу огаваривалась. создаем полигон для тестинга сетевых соединений и не для чего больше.
В конечном счете все должно включатся одним рубильником. :D
Последний раз редактировалось nezabudka 05 май 2015, 19:05, всего редактировалось 1 раз.
"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: Установка qemu-kvm и настройка локальной виртуальной сет

Сообщение nezabudka »

Нет, наверное есть что то большее. Это были очень интересные и увлекательные два дня в моей жизни.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Ответить

Вернуться в «Установка программ»