Хабрахабр

Переезд с Ubuntu на Windows 10, Hyper-V и избавление от железного маршрутизатора

Купив новый ноутбук, я с сожалением заметил, что моя любимая Ubuntu больше не поддерживает работу сенсоров и вентиляторы постоянно жужжат, делая работу не комфортной. В тоже время, если загрузить предустановленную Windows 10 Pro с оригинального жесткого диска, то наступает приятная для уха тишина. Пока на улице (и дома) было прохладно, было терпимо. Но как наступила жара, терпению пришел конец. Было решено мигрировать на Windows.
В своей работе я использую многочисленные виртуальные машины для сборки, тестирования и отладки разрабатываемого программного обеспечения. Windows 10 Pro включает в себя виртуализацию Hyper-V — раз деньги уплачены, то придеться использовать! В Ubuntu я пользовался libvirt и виртуальными машинами объединенными в одну внутреннюю виртуальную сеть.

Перенеся Windows с оригинального диска на SSD и преобразовав образы виртуальных машин в формат для hyper-v, с болью в сердце, я приступил к осваиванию новой операционной системы.

Виртуальные рабочие столы заменились на рабочие столы windows(к сожалению только горизонтальные), консоль заменила консоль WSL (Windows Subsystem for Linux), для X11 приложений был установлен и добавлен в автозапуск VcXsrv, виртуальные машины заработали в Hyper-V и даже удалось запустить OSX. Оказалось не все так страшно!

Родной терминал оказался не совсем удобным и без вкладок, поэтому был безжалостно заменен на xfce4 терминал, который запускается через ярлык со скрытым окном linux консоли:

image

Объект:

C:\Windows\System32\wscript.exe ./runhidden.vbs bash -c "export DISPLAY=:0.0; export GDK_DPI_SCALE=1.2; cd ~; exec xfce4-terminal"

Код скрипта для запуска приложения со скрытым окном (скрывается родная консоль, которая открывается при запуске X11 приложений с командной строки), нагугленного на просторах интернета:

' Simple command-line help.
select case WScript.Arguments(0)
case "-?", "/?", "-h", "--help" WScript.echo "Usage: runHidden executable [...]" & vbNewLine & vbNewLine & "Runs the specified command hidden (without a visible window)." WScript.Quit(0)
end select ' Separate the arguments into the executable name ' and a single string containing all arguments.
exe = WScript.Arguments(0)
sep = ""
for i = 1 to WScript.Arguments.Count -1 ' Enclose arguments in "..." to preserve their original partitioning. args = args & sep & """" & WScript.Arguments(i) & """" sep = " "
next ' Execute the command with its window *hidden* (0)
WScript.CreateObject("Shell.Application").ShellExecute exe, args, "", "open", 0

В итоге получилось так:

image

Мне приходится часто ездить, специально для поездок у меня был мелкий маршрутизатор TP-LINK WR703N прошитый OpenWRT:

image

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

Очевидно, что все виртуальные машины и Windows должны быть объединены в одну локальную сеть. В связи с этим возникла идея вообще избавиться от этого маршрутизатора (заодно повысив пропускную способность подключения), клубка проводов и блока питания, заменив его виртуальным маршрутизатором.

Создаем новый внутренний виртуальный коммутатор, который будет обслуживать нашу виртуальную локальную сеть. Запускаем Диспетчер Hyper-V и выбираем Диспетчер виртуальных коммутаторов. Назовем его LAN Internal:

image

Создаем два внешних виртуальных коммутатора, не забыв убрать галку «Разрешить управляющей операционной системе предоставлять общий доступ к этому сетевому адаптеру» — незачем Windows ходить в интернет напрямую. Выходить в интернет мы будем через беспроводной адаптер и езернет кабель.

Виртуальный коммутатор для WiFi:

image

Виртуальный коммутатор для езернет кабеля:

image

04. Операционной системой виртуальной машины маршрутизатора я выбрал серверную Ubuntu 16. 04? Почему 16. 04 простые настройки сети в /etc/network/interfaces заменили на netplan — не хочу! Потому что в 18. Создаем новую виртуальную машину и добавляем в нее наши виртуальные коммутаторы:

image

В закладке Безопасность либо отключаем безопасную загрузку, либо выбираем Центр сертификации Microsoft UEFI и ставим операционную систему как обычно.

Внешние подключения через кабель и WiFi могут получить ip адреса если они подключены и активны. После установки, заходим в свежеустановленную систему и проверяем сетевые интерфейсы командой ifconfig. Если адреса не получены, воспользуемся утилитой получения адреса:
dhclient eth0 eth1 eth2

Локальная сеть у нас будет 192. Внутренний будет без адреса, так как в нашей локальной сети еще не работает сервер dhcp.
В моем случае eth0 — внешний езернет, eth1 — локальная сеть, eth2 — внешнее беспроводное подключение (в порядке добавление сетевых карт). 3. 168. 0.

Отредактируем настройки сети в /etc/network/interfaces с помощью, например, редактора nano:

source /etc/network/interfaces.d/* # The loopback network interface
auto lo
iface lo inet loopback # The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp # Internal LAN
auto eth1
iface eth1 inet static address 192.168.3.1 netmask 255.255.255.0 network 192.168.3.0 broadcast 192.168.3.255 # The primary network interface
allow-hotplug eth2
iface eth2 inet dhcp

Перезагружаем маршрутизатор и заходим на него опять. Теперь все сетевые интерфейсы должны иметь адреса (внешние если имеют подключение).

Настройке маршрутизации посвящено множество статей и имеется достаточное количество материала, поэтому пробежимся быстро по минимальной настройке.

Устанавливаем необходимые нам приложения:
sudo apt install dnsmasq iptables-persistent netfilter-persistent openvpn

Разрешаем пересылку ip пакетов:

cat > /etc/sysctl.d/10-forwarding.conf net.ipv4.ip_forward=1

Настраиваем межсетевой экран:

cat > /etc/iptables/rules.v4
# Generated by iptables-save v1.6.0 on Fri Jun 22 11:13:10 2018
*nat
:PREROUTING ACCEPT [2901:568651]
:INPUT ACCEPT [707:80315]
:OUTPUT ACCEPT [445:30025]
:POSTROUTING ACCEPT [14:1200]
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth2 -j MASQUERADE
-A POSTROUTING -o tun+ -j MASQUERADE
COMMIT
# Completed on Fri Jun 22 11:13:10 2018
# Generated by iptables-save v1.6.0 on Fri Jun 22 11:13:10 2018
*filter
:INPUT ACCEPT [57264:68964200]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [44820:7558046]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o tun+ -j ACCEPT
COMMIT
# Completed on Fri Jun 22 11:13:10 2018

Настраиваем dhcp сервер и сервер имен:

cat > /etc/dnsmasq.d/router.conf dhcp-authoritative
domain-needed
localise-queries
read-ethers
bogus-priv
expand-hosts
local-service
domain=lan
server=/lan/
dhcp-leasefile=/tmp/dhcp.leases interface=eth1
dhcp-range=lan,192.168.3.100,192.168.3.249,255.255.255.0,12h

Перезагружаем и получаем работающий маршрутизатор для Windows и других виртуальных машин!

image

Настраиваем на маршрутизаторе openvpn и наслаждаемся жизнью без дополнительных железок и кабелей.

Но позвольте, спросите вы, а как же быть с телефоном и другими гаджетами?

Но не все так просто. Простое решение — использовать встроенный в Windows 10 Мобильный хотспот! Незадача… Мобильный хотспот не хочет активироваться на виртуальном интерфейсе нашей виртуальной локальной сети!

image

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

Помучившись неделю, приложение было написано (и заодно освоен ранее не изведанный зверь — Visual Studio):

image

Кроме активации точки доступа, приложение может запускаться при входе в систему, активировать точку по запуску и закрывать приложение после активации.

Исходный код доступен на github.
Для тех, кто не может или кому лень собирать из исходных текстов, приложение (бесплатно, без смс и всякой рекламы) доступно в Windows Магазине NoWiFi.

Таким образом, поставленная задача была решена, старый маршрутизатор окончательно отправился на пенсию, а в рюкзаке освободилось место!

На этом у меня все, всем спасибо за внимание и терпение при чтении столь нудного материала!

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть