Виртуализация шлюза при помощи Hyper-v

в 8:09, , рубрики: linux, виртуализация, маршрутизация, Настройка Linux, системное администрирование

После рассказов товарища о сгоревшем маршрутизаторе и последующем факапе было принято решение обезопасить себя от подобных ситуаций путем создания резервного шлюза. Поскольку финансирование it в моей текущей компании находится у руководства не в первой десятке самых важных вещей, в качестве шлюзов мы будем использовать виртуальные машины с Ubuntu 14.04 LTS на Hyper-v, а в качестве железа — 2 системника, собранных из говна и палок того, что было на складе. Сказано это было не ради того, чтобы услышать слова сочувствия, а дабы подчеркнуть, что не требуется большого финансирования для создания резервирования основного шлюза.

image

Требования к железу:
— процессор с поддержкой виртуализации и x64
— 2 сетевые карты с поддержкой 802.1q

Представим, что у нас уже имеется системник с установленным windows hyper-v server 2012 r2 и виртуальной машиной второго поколения. Начнем с настроек хоста hyper-v.

Первым делом настроим объединение сетевых карт. Открываем оснастку диспетчер серверов, щелкаем правой кнопкой по нашему серверу и выбираем «настройка объединения сетевых карт»:

image
все манипуляции с оснастками windows проводятся под windows 8.1

image

Настройки могут меняться в зависимости от инфраструктуры. Объединение карт сделано для доступности шлюза в случае выхода из строя сетевой карты или свитча.

Далее создадим виртуальные коммутаторы для локальной сети и интернета. Сделать это можно через оснастку «диспетчер hyper-v» или через powershell.

Открываем оснастку, выбираем наш сервер и в правой части оснастки щелкаем «диспетчер виртуальных коммутаторов». Нам нужно создать 2 внешних виртуальных коммутатора.

image

Назначаем имя свитчу и выбираем соответствующие сетевые карты. Microsoft networkadapter multiplexor driver — наши объединенные сетевухи. Бывают случаи, когда сетевые карты называются одинаково и различаются они лишь номером в конце. Для определения соответствия можно использовать коммандлет powershell get-netadapter и определить карту по mac адресу, либо статусу up -down. Для виртуального свитча интернета снимаем галочку «разрешить управляющей операционной системе ...», для локальной сети оставляем, если, конечно, у вас нет отдельной сетевой карты для управления гипервизором. Это опция необходима для того, чтобы операционная система гипервизора могла использовать эту сетевую карту для доступа к сети.

Создать виртуальный свитч так же можно через командлет powershell new-vmswitch.

Далее необходимо создать сетевые адаптеры для нашей виртуальной машины. Через оснастку, либо командлет powershell add-vmnetworkadapter.

Создание сетевого адаптера не представляет сложности и, как мне кажется, описания не требует. Если в вашей сети используются VLAN, то вам нужно настроить интерфейсы для каждой сети. Это можно сделать несколькими способами:

  • создание виртуальных интерфейсов на уровне хоста гипервизора
  • создание интерфейсов на уровне виртуальной машины
  • создание подинтерфейсов на уровне виртуальной машины

Первый способ не для нас, т.к. в server core версии и мне не удалось открыть эти настройки в графическом режиме, а редактируя реестр вручную можно что-нибудь да поломать. И если я не ошибаюсь, такой способ не рекомендуем самой майкрософт.

Второй способ удобен и прост. Мы можем создать необходимое нам количество сетевых адаптеров и указать нужный нам vlan в настройках.

image

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

Третий способ нас устраивает всем. На нем и остановимся.

Для того, чтобы трафик из всех vlan, которые мы хотим маршрутизировать, нам нужно настроить транк на сетевой карте виртуальной машины. Сделать это можно только через powershell.

Set-VMNetworkAdapterVlan -Trunk -AllowedVlanIdList "100" -VMName "router" -VMNetworkAdapterName "localnet" -NativeVlanId 0

Так уж случилось, что когда я устроился на работу, в сети использовался только 1 vlan, а всё оборудование, находившееся в сети, включая сервера и пк, ходили без тега. При настройке транка я долго не мог понять, почему нетегированный трафик не доходит до моей виртуальной машины, пока не наткнулся на пост, в котором увидел команду powershell с vlan 0, поэтому в качестве native vlan и указан 0.

Далее нам нужно настроить виртуальную машину.

Начнем с адресации.

Пример файла /etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0

# подинтерфейс для маршрутизацияя трафика из 100 vlan
auto eth0.100
iface eth0.100 inet static
address 192.168.100.1
netmask 255.255.255.0
vlan_raw_device eth0

#internet
auto eth1
iface eth1 inet dhcp

далее разрешим нашей виртуальной машине делать forwarding. Изменим значение net.ipv4.ip_forward на 1 в файле /etc/sysctl.conf и применим изменения путем выполнения команды sysctl -p /etc/sysctl.conf.

И последним штрихом будет настройка nat при помощи iptables.

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source xxx.xxx.xxx.xxx 

где xxx.xxx.xxx.xxx ваш ip адресс. Хоть в моем случае и используется dhcp внешний адрес назначается всегда один.
Для динамических адресов следует использовать


iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Для того, чтобы правила iptables сохранялись после перезагрузки, установим пакет iptables-persistent. Название может отличатся в зависимости от дистрибутива.

Теперь пользователи имеют доступ в интернет и всё работает, осталось только настроить репликацию. Делается это через ту же оснастку Диспетчер hyper-v. Открываем оснастку, выбираем наш гипервизор и заходим в параметры hyper-v через панель действие. В параметрах выбираем конфигурация репликации. Далее подробнее:

image

Включаем реплику.

Использовать Встроенную проверку подлинности Windows — менее безопасная. Работает только в домене active directory и не требует дополнительных настроек.

Использовать проверку на основе сертификатов (HTTPS) — более безопасная. Используйте ее в режиме паранойи и вне домена.

Можно разрешить репликацию со всех серверов hyper-v либо только с указанных. Выбираем второй вариант и указываем там сервер реплику с установленным hyper-v. Группа может иметь произвольное название. Далее делаем аналогичные настройки на сервере реплике.

Чтобы при Переключении машины на сервер реплику не возникло проблем, виртуальные коммутаторы должны называться так же, как и на основном сервере.

Автор: pytker

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js