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

Установка и настройка программ в Debian

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

Сообщение nezabudka » 05 май 2015, 10:35

Для начала стоит оговорится что понятие виртуальная локальная сеть предусматривает
несколько иное понятие чем то которое мы вкладываем в этой серии статей. Давайте для удобства
все же определим это как имя локальной переменной исключительно для данного поста.
В предыдущей части "Первая часть" мы установили 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
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 612
Фото: 180
Стаж: 2 года 5 месяцев 4 дня
Откуда: Ростов на Дону
Благодарил (а): 283 раз.
Поблагодарили: 145 раз.

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

Спонсор

Спонсор
 

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

Сообщение Sunderland93 » 05 май 2015, 11:14

Весьма неплохо. Но чувствуется некая узкозаточенность в тексте, хоть ты и просто приводила свой случай как пример. Однако я для подобных полигонов всё равно за GUI :D
Sunderland93
 
Стаж: 47 лет 8 месяцев 21 день

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

Сообщение nezabudka » 05 май 2015, 11:21

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
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 612
Фото: 180
Стаж: 2 года 5 месяцев 4 дня
Откуда: Ростов на Дону
Благодарил (а): 283 раз.
Поблагодарили: 145 раз.

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

Сообщение nezabudka » 05 май 2015, 11:34

Нет, наверное есть что то большее. Это были очень интересные и увлекательные два дня в моей жизни.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 612
Фото: 180
Стаж: 2 года 5 месяцев 4 дня
Откуда: Ростов на Дону
Благодарил (а): 283 раз.
Поблагодарили: 145 раз.


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

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1