Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов. 8(977)608-78-62 adm@nixm.ru
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов. 8(977)608-78-62 adm@nixm.ru
Установка qemu-kvm и настройка локальной виртуальной сети 2.
Установка qemu-kvm и настройка локальной виртуальной сети 2.
Для начала стоит оговорится что понятие виртуальная локальная сеть предусматривает
несколько иное понятие чем то которое мы вкладываем в этой серии статей. Давайте для удобства
все же определим это как имя локальной переменной исключительно для данного поста.
В предыдущей части "Первая часть" мы установили qemu-kvm и запустили как есть,
предусмотреной по дефолту. Что бы терминал не висел у нас после запуска виртуальной машины
без дела создадим легкий скрипт по запуску на bash в фоновом режиме. Мы потом его перепишим.
Сохраняем и добавляем права на запуск.
Теперь после набора ./1 и нажатии клавиши <Tab> мы получим к запуску полное имя файла.
Жмем enter, запускается машинка но теперь крым снова наш, можно переместить терминал на
следующий рабочий стол и запустить если нужно другую машину. Теперь ближе к настройке сети.
И прежде чем ломать давайте осмотримся и разберемся в том что мы имеем.
Установим и запустим на госте nmap
В выводе команды обнаружим
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
Если нет установим их
Приведем к следующему виду конфиг /etc/network/interfaces
У меня выход в глобальную сеть осуществлен через интефейс usb0
то есть через подключенный смартфон, у вас будет свой возможно ppp0.
Поднимим прoписанные интерфейсы
Можно пойти и по другому пути.
В выводе команды brctl мы увидим список всех доступных опций для создания моста и далее.
Ну вот как то так, пример просто для ознакомления с возможностями команды brctl
Ну и естественно осмотреть все хозяйство будет удобно при помощи утулиты ifconfig
Превращаем наш хост в маршрутизатор добляем следующие строки в файл /etc/sysctl.conf
И что бы изменения вступили в силу вводим команду
Теперь запустим виртуалку для редактирования конфигов.
Здесь нас интересуют два файла. В первом /etc/network/interfaces добавляем строки
Во втором коментируем единственную строчку и добавляем свой адрес шлюза
Это адрес смотрящий в локалку моего телефона. Ваш адрес может быть адресом модема
или адресом провайдера. В следующий раз мы будем запускать нашу машинку уже в новом
качестве как точку локальной сети. Замечу на будущее только одно, команды
Изменяют параметры машины установленные при запуске на дефолтные. Поэтому после
изменений в конфигурации сети необходимо остановить машину и снова ее запустить.
Мы позже пропишим в скрипте запуска параметр reboot для старта машины в таких случаях.
Выполним следующее и выйдим из виртуалки
Для запуска обновленной машины нужен и обновленный скрипт. Переписываем следующими строчками
В этом скрипте определяется переменная $macaddress это необходимо делать если будут
запущены несколько машин соединенных в локалке. Потому что адрес машин объединеных в одну
сеть не может быть одинаков. Так же в каждом скрипте своих машин меняйте tap0 на другой ну
и естественно имидж образа. Кстати vlan=0 в параметрах kvm это совсем не то что принято считать
в сетевой терминалогии.(совсем как в названии нашей статьи ) Модель эмулируемой сетевой
карты можно не указывать, будет использована предусмотренная по умолчанию.
Запустим машину и проверим сеть
Если все нормально можно в файле /etc/hosts записать имя хоста
192.168.1.100 linux #нормальное имя для машины в своей сети
Нам осталось только прописать правило в iptable на целевой машине для выхода
нашей виртуалки в глобальную сеть
Перейдем в нашу машину и проверим доступность сети для этого установим браузер
Запускаем любимый ресурс
Если все нормально возвращаемся на целевой хост проверяем на всякий случай все соединения
и устанавливаем программу которая сохранит наши настройки iptables
В ходе установки будет предложено записать правила в файл, соглашаемся.
В следующей части мы осмотримся в том что создали, разберемся во всем, перепишим файл запуска
и по возможности сделаем работу удобней.
Не сомневаюсь что допустила кучу ошибок и буду рада любой помощи как по теме
так и редакции текста.
Ссылка на третью часть
несколько иное понятие чем то которое мы вкладываем в этой серии статей. Давайте для удобства
все же определим это как имя локальной переменной исключительно для данного поста.
В предыдущей части "Первая часть" мы установили 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
Жмем 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
Код: Выделить всё
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
то есть через подключенный смартфон, у вас будет свой возможно ppp0.
Поднимим прoписанные интерфейсы
Код: Выделить всё
sudo systemctl restart networking
В выводе команды brctl мы увидим список всех доступных опций для создания моста и далее.
Код: Выделить всё
brctl addbr br0 #создаем мост с именем br0
brctl addif br0 eth0 #добавляем интерфейс с именем eth0 в мост
ifconfig br0 up #не уверена в необходимости этой команды но вреда она не принесет.
Код: Выделить всё
brctl show #смотрим что получилось
bridge name bridge id STP enabled interfaces
br0 8000.bc5ff457df92 no eth0
Превращаем наш хост в маршрутизатор добляем следующие строки в файл /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
Код: Выделить всё
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
запущены несколько машин соединенных в локалке. Потому что адрес машин объединеных в одну
сеть не может быть одинаков. Так же в каждом скрипте своих машин меняйте tap0 на другой ну
и естественно имидж образа. Кстати vlan=0 в параметрах kvm это совсем не то что принято считать
в сетевой терминалогии.(совсем как в названии нашей статьи ) Модель эмулируемой сетевой
карты можно не указывать, будет использована предусмотренная по умолчанию.
Запустим машину и проверим сеть
Код: Выделить всё
./1vm.sh
nmap 192.168.1.100
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
Re: Установка qemu-kvm и настройка локальной виртуальной сет
Весьма неплохо. Но чувствуется некая узкозаточенность в тексте, хоть ты и просто приводила свой случай как пример. Однако я для подобных полигонов всё равно за GUI
Re: Установка qemu-kvm и настройка локальной виртуальной сет
Конечно, я сразу огаваривалась. создаем полигон для тестинга сетевых соединений и не для чего больше.Sunderland93 писал(а):Весьма неплохо. Но чувствуется некая узкозаточенность
В конечном счете все должно включатся одним рубильником.
Последний раз редактировалось 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
Re: Установка qemu-kvm и настройка локальной виртуальной сет
Нет, наверное есть что то большее. Это были очень интересные и увлекательные два дня в моей жизни.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay