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

Требования к железу:
— процессор с поддержкой виртуализации и x64
— 2 сетевые карты с поддержкой 802.1q
Представим, что у нас уже имеется системник с установленным windows hyper-v server 2012 r2 и виртуальной машиной второго поколения. Начнем с настроек хоста hyper-v.
Первым делом настроим объединение сетевых карт. Открываем оснастку диспетчер серверов, щелкаем правой кнопкой по нашему серверу и выбираем «настройка объединения сетевых карт»:

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

Настройки могут меняться в зависимости от инфраструктуры. Объединение карт сделано для доступности шлюза в случае выхода из строя сетевой карты или свитча.
Далее создадим виртуальные коммутаторы для локальной сети и интернета. Сделать это можно через оснастку «диспетчер hyper-v» или через powershell.
Открываем оснастку, выбираем наш сервер и в правой части оснастки щелкаем «диспетчер виртуальных коммутаторов». Нам нужно создать 2 внешних виртуальных коммутатора.

Назначаем имя свитчу и выбираем соответствующие сетевые карты. Microsoft networkadapter multiplexor driver — наши объединенные сетевухи. Бывают случаи, когда сетевые карты называются одинаково и различаются они лишь номером в конце. Для определения соответствия можно использовать коммандлет powershell get-netadapter и определить карту по mac адресу, либо статусу up -down. Для виртуального свитча интернета снимаем галочку «разрешить управляющей операционной системе ...», для локальной сети оставляем, если, конечно, у вас нет отдельной сетевой карты для управления гипервизором. Это опция необходима для того, чтобы операционная система гипервизора могла использовать эту сетевую карту для доступа к сети.
Создать виртуальный свитч так же можно через командлет powershell new-vmswitch.
Далее необходимо создать сетевые адаптеры для нашей виртуальной машины. Через оснастку, либо командлет powershell add-vmnetworkadapter.
Создание сетевого адаптера не представляет сложности и, как мне кажется, описания не требует. Если в вашей сети используются VLAN, то вам нужно настроить интерфейсы для каждой сети. Это можно сделать несколькими способами:
Первый способ не для нас, т.к. в server core версии и мне не удалось открыть эти настройки в графическом режиме, а редактируя реестр вручную можно что-нибудь да поломать. И если я не ошибаюсь, такой способ не рекомендуем самой майкрософт.
Второй способ удобен и прост. Мы можем создать необходимое нам количество сетевых адаптеров и указать нужный нам vlan в настройках.

Единственное, чем неудобен этот способ, при появлении нового vlan добавление сетевого адаптера возможно только при выключенной виртуальной машине.
Третий способ нас устраивает всем. На нем и остановимся.
Для того, чтобы трафик из всех vlan, которые мы хотим маршрутизировать, нам нужно настроить транк на сетевой карте виртуальной машины. Сделать это можно только через powershell.
Так уж случилось, что когда я устроился на работу, в сети использовался только 1 vlan, а всё оборудование, находившееся в сети, включая сервера и пк, ходили без тега. При настройке транка я долго не мог понять, почему нетегированный трафик не доходит до моей виртуальной машины, пока не наткнулся на пост, в котором увидел команду powershell с vlan 0, поэтому в качестве native vlan и указан 0.
Далее нам нужно настроить виртуальную машину.
Начнем с адресации.
Пример файла /etc/network/interfaces
далее разрешим нашей виртуальной машине делать forwarding. Изменим значение net.ipv4.ip_forward на 1 в файле /etc/sysctl.conf и применим изменения путем выполнения команды sysctl -p /etc/sysctl.conf.
И последним штрихом будет настройка nat при помощи iptables.
где xxx.xxx.xxx.xxx ваш ip адресс. Хоть в моем случае и используется dhcp внешний адрес назначается всегда один.
Для динамических адресов следует использовать
Для того, чтобы правила iptables сохранялись после перезагрузки, установим пакет iptables-persistent. Название может отличатся в зависимости от дистрибутива.
Теперь пользователи имеют доступ в интернет и всё работает, осталось только настроить репликацию. Делается это через ту же оснастку Диспетчер hyper-v. Открываем оснастку, выбираем наш гипервизор и заходим в параметры hyper-v через панель действие. В параметрах выбираем конфигурация репликации. Далее подробнее:

Включаем реплику.
Использовать Встроенную проверку подлинности Windows — менее безопасная. Работает только в домене active directory и не требует дополнительных настроек.
Использовать проверку на основе сертификатов (HTTPS) — более безопасная. Используйте ее в режиме паранойи и вне домена.
Можно разрешить репликацию со всех серверов hyper-v либо только с указанных. Выбираем второй вариант и указываем там сервер реплику с установленным hyper-v. Группа может иметь произвольное название. Далее делаем аналогичные настройки на сервере реплике.
Чтобы при Переключении машины на сервер реплику не возникло проблем, виртуальные коммутаторы должны называться так же, как и на основном сервере.

Требования к железу:
— процессор с поддержкой виртуализации и x64
— 2 сетевые карты с поддержкой 802.1q
Представим, что у нас уже имеется системник с установленным windows hyper-v server 2012 r2 и виртуальной машиной второго поколения. Начнем с настроек хоста hyper-v.
Первым делом настроим объединение сетевых карт. Открываем оснастку диспетчер серверов, щелкаем правой кнопкой по нашему серверу и выбираем «настройка объединения сетевых карт»:

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

Настройки могут меняться в зависимости от инфраструктуры. Объединение карт сделано для доступности шлюза в случае выхода из строя сетевой карты или свитча.
Далее создадим виртуальные коммутаторы для локальной сети и интернета. Сделать это можно через оснастку «диспетчер hyper-v» или через powershell.
Открываем оснастку, выбираем наш сервер и в правой части оснастки щелкаем «диспетчер виртуальных коммутаторов». Нам нужно создать 2 внешних виртуальных коммутатора.

Назначаем имя свитчу и выбираем соответствующие сетевые карты. Microsoft networkadapter multiplexor driver — наши объединенные сетевухи. Бывают случаи, когда сетевые карты называются одинаково и различаются они лишь номером в конце. Для определения соответствия можно использовать коммандлет powershell get-netadapter и определить карту по mac адресу, либо статусу up -down. Для виртуального свитча интернета снимаем галочку «разрешить управляющей операционной системе ...», для локальной сети оставляем, если, конечно, у вас нет отдельной сетевой карты для управления гипервизором. Это опция необходима для того, чтобы операционная система гипервизора могла использовать эту сетевую карту для доступа к сети.
Создать виртуальный свитч так же можно через командлет powershell new-vmswitch.
Далее необходимо создать сетевые адаптеры для нашей виртуальной машины. Через оснастку, либо командлет powershell add-vmnetworkadapter.
Создание сетевого адаптера не представляет сложности и, как мне кажется, описания не требует. Если в вашей сети используются VLAN, то вам нужно настроить интерфейсы для каждой сети. Это можно сделать несколькими способами:
- создание виртуальных интерфейсов на уровне хоста гипервизора
- создание интерфейсов на уровне виртуальной машины
- создание подинтерфейсов на уровне виртуальной машины
Первый способ не для нас, т.к. в server core версии и мне не удалось открыть эти настройки в графическом режиме, а редактируя реестр вручную можно что-нибудь да поломать. И если я не ошибаюсь, такой способ не рекомендуем самой майкрософт.
Второй способ удобен и прост. Мы можем создать необходимое нам количество сетевых адаптеров и указать нужный нам vlan в настройках.
Единственное, чем неудобен этот способ, при появлении нового 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 через панель действие. В параметрах выбираем конфигурация репликации. Далее подробнее:

Включаем реплику.
Использовать Встроенную проверку подлинности Windows — менее безопасная. Работает только в домене active directory и не требует дополнительных настроек.
Использовать проверку на основе сертификатов (HTTPS) — более безопасная. Используйте ее в режиме паранойи и вне домена.
Можно разрешить репликацию со всех серверов hyper-v либо только с указанных. Выбираем второй вариант и указываем там сервер реплику с установленным hyper-v. Группа может иметь произвольное название. Далее делаем аналогичные настройки на сервере реплике.
Чтобы при Переключении машины на сервер реплику не возникло проблем, виртуальные коммутаторы должны называться так же, как и на основном сервере.