Введение:
По работе мне часто приходится работать с перепрошитыми роутерами на DD-WRT или OpenWRT. Все время как-то получалось обходиться без роутера дома, но те возможности, которые дают эти прошивки, реально классные. Вот и задумался о приобретении роутера, такого чтоб тянул все сервисы, которые мне могут понадобиться. Остановился на выборе Asus RT-N16, но, правда, дороговата эта игрушка оказалась для меня. Это при том, что реальной необходимости в роутере не было, т.к. отлично спасала сетевая Wi-Fi карточка TP-LINK WN851ND.
Вот и пришла в голову идея о виртуальном роутере, опытом, по настройке которого, я сейчас с вами поделюсь.
Немного о плюсах и минусах:
1. +Низкая стоимость
дополнительные расходы у меня составили 150р на покупку 2й сетевой карты,
покупка сразу двух карточек обойдется в пределах 1000р
2. +Высокая производительность.
Максимум чем мы ограничены – это характеристики самого компьютера.
3. +Нет привязки к четкому железу.
Дает свободу по настройке нашего роутера
4. –Зависимость от компьютера.
Внешним фактором для этого роутера является ОС, которая не всегда работает стабильно.
5. –Постоянная работа компьютера.
После установки тихого кулера это вообще не проблема.
6. –Есть сложности в настройке.
Не каждый поймет и осилит, а тем более увидит в этом смысл
DD-WRT или OpenWRT?
OpenWRT крутая прошивка, но на x86 есть проблемы с загрузчиком.
(Не работала программная перезагрузка, т.е. только полное выключение виртуальной машины и заново ее включение.
После обновления VirtualBox до 4.3.4, вообще перестала запускаться.)
Проблем с DD-WRT тоже не получилось избежать, но она была всего одна и останавливаться на ней я не буду.
Начинаем:
Изначальная картина моих сетевых подключений
Для начала скачаем и установим VirtualBox, коль таковой
отсутствует, и архив, в котором присутствуют все необходимые программы и файлы.
Настраиваем (создаем) виртуальную машину. Не буду повторяться, как это сделать, можете прочитать в статье, только естественно в носителях указать наш образ прошивки скачанной раннее в архиве.
Первая настройка:
Первую настройку проще всего сделать через другую виртуальную машину с Гостевой ОС,
подключенную к роутеру по внутренней сети.
Настройку сети вы можете видеть на скришоте.
Запустите обе машины. Откройкте браузер в гостевой системе и
зайдите по адресу http://192.168.1.1/.
Если вы увидели следующую картинку, радуйтесь!
У вас получилось!
Тут достаточно просто ввести новый логин и пароль.
Смело нажимайте Change Password и после этого выключаем обе машины (роутер и ОС).
Настраиваем сеть:
1) Создаём новые интерфейсы.
В главном окне VirtualBox нажимаем комбинацию Ctrl+G.
Переходим Сеть->Виртуальные сети хоста. Создаем два
виртуальных адаптера и сразу в настройках ip поставим все в автомат:
2) Настраиваем сеть роутера.
Включаем все четыре сетевых адаптера.
Проверяем, чтобы везде тип адаптера был PCnet-FAST III.
Везде я разрешил неразборчивый режим.
В первом адаптере делаю сетевой мост с адаптером, в который у меня подведен интернет и
т.к. у меня идет привязка по MAC адресу, прописал точно такой же как у адаптера.
Второй адаптер делаем тип подключения Виртуальный адаптер хоста и
выбираем первый адаптер в имени.
Мак адрес для красоты я написал 000000000002
и в сетевых подключениях назвал подключение как 2) Router_02
Третий адаптер делаем по аналогии со вторым, только двойки
меняем на тройки.
Четвертый пока оставим неподключенным
А теперь договоримся:
Мы будем весь канал интернета перенаправлять на роутер и раздавать по виртуальным адаптерам.
Второй адаптер нам необходим для доступа в интернет именно этой (хостовой) машины,
а третий для раздачи сети по LAN. Иначе, если раздавать интернет, через который сидим, то
будут проблемы с маршрутизацией, как показала практика.
Заводим полностью интернет на роутер:
Отключаем в свойствах сетевого интерфейса интернета все службы, клиенты и протоколы,
кроме VirtualBox Bridged Networking Driver
Раздаем интернет по Lan:
Т.к. все четыре адаптера роутера у нас будут заняты, делаем сетевой мост средствами ОС.
Октлючаем всё в свойствах второй сетевой карты и уже потом объединяем в сетевой мост с 3) Router_03
Раздаем интернет по Wi-Fi:
Мне нравится программа MyPublicWiFi, которая тоже есть в архиве.
В принципе, вы можете выбрать любую другую. Скажу, что мне нравится многие другие аналоги, но для этой задачи она подходит идеально.
Вы ее один раз настроите и после этого она самостоятельно будет включать точку доступа.
После запуска точки доступа в сетевых подключениях
у вас появится еще один виртуальный адаптер Microsoft Virtual WiFi Miniport Adapter.
Все настройки IP ставим автоматически и добавляем в сетевой мост с четвертым адаптером роутера
Silent mod:
Скрытый запуск роутера.
Открываем с помощью procexp.exe свойства процесса роутера и копируем параметры запуска.
Редактируем файл StartRouterVirtualBox.VBS и заменяем параметры на свои.
Можно скрипт кинуть просто в автозагрузку.
Я предпочел другой вариант – Планировщик заданий
Создал задачу с названием «1) StartRouterVirtualBox», указал выполнять с наивысшими правами.
В триггерах создал условие при входе в систему и в действиях указал путь до скрипта.
Скрытый запуск программы MyPublicWiFi.
Создаем задачу «2) MyPublicWiFi».
Меняем учетную запись на «система» (если у вас Windows 8, то «Система») (написать ручками)
Делаем наивысшие права и делаем задачу скрытой.
В действиях указываем запуск программы,
а в триггере создаем «запуск при входе любого пользователя» с задержкой в 30 сек.
Настройка роутера:
Я не буду повторяться о том как настроить DD-WRT.
Настройку интернета и всей прошивки вы можете прочитать здесь и естественно гугл в помощь, а также видео, которое я записал.
Желаю всем успехов в экспериментах! До новых встреч!
Комментарии (30)
Chupakabra303
20.06.2018 14:46Заводил как-то Mikrotik CHR под VBox на удаленной машине (рабочая станция SCADA с доступом в сеть АСУ) за кучей NATов. Оттуда поднимал VPN к своему офисному маршрутизатору, и уже через туннель имел из офиса полный доступ к сети АСУ и SCADA станции.
Meklon
20.06.2018 15:03В бесплатном варианте там bandwidth зарезан?
Chupakabra303
20.06.2018 15:08Да, пользовался бесплатным, с ограничением на интерфейс 1Mbps. Но для моих задач «выше крыши» хватало.
safari2012
20.06.2018 17:46Вчера мне за 5мин. до начала матча Россия-Египет приспичило мне достать с полки неиспользуемый (но заранее настроенный) декодер IPTV от Ростелекома. Декодер шёл по акции вместе с пакетом интернет+тв за 300руб./50Мбит и нафиг не был нужен. Но я вспомнил, что РТК аннонсировал бесплатные HD-трансляции ЧМФ 2018.
Внезапно (с), выяснилось, что мой роутер (не так давно был перепрошит OpenWRT) by default, оказался без поддержки igmp мультикастинга. В результате, я почти весь первый тайм имел секс с настройкой роутера. Хорошо, что голы пошли именно во втором тайме :)
Я к чему это всё… в dd-wrt, насколько я помню, галочка включить поддержку igmp proxy доступна «из коробки».Renaissance
20.06.2018 19:23+1К слову, igmpproxy в OpenWrt включается одной командой установки opkg. Ну и разрешить igmp snooping на нужном интерфейсе.
А вот дальше начинается увлекательное приключение по отлову сетей из которых идет вещание через syslog и добавление их в altnet'ы.
Вообще интересно, как это реализовано одной галочкой в DD-WRT, ибо igmprpoxy там тот же самый, просто конфиг заполняется автоматически.Afrit
21.06.2018 02:43Udpxy и забыть igmpproxy как страшный сон. (плейлист придётся немного переделать)
hzs
20.06.2018 17:53А кто-нибудь, для простого домашнего использования, пробовал отечественную прошивку Wive-NG?
Мне визуально показалось, что эта прошивка на дешевом роутере уделывает по скорости дорогие и навороченные роутеры.
Но, правда, не даёт глубоко разбирать пакеты данных.
Bonio
20.06.2018 23:08Почему никто не вспоминает про pfsense? Для виртуального роутера эта система просто на порядок лучше, чем openwrt. Да и для физического тоже.
Meklon
21.06.2018 09:04А чем лучше? Просто интересно, я его никогда не щупал.
Bonio
21.06.2018 09:38Удобнее и мощнее. Буквально любое действие делается из web интерфейса, есть плагины. По количеству функций сравнима, наверное, с микротиком, или даже превосходит его. Имеет просто лучший, web интерфейс из всех, что я видел, который полностью избавляет от необходимости лезть в консоль. Но на любой дешевый роутер эту систему не поставишь, так как под капотом там полноценная FreeBSD.
Вот посмотрите только, как оно выглядит, информативно, красиво и настолько же функционально. Категорически советую попробовать.
Заголовок спойлераMeklon
21.06.2018 11:40Красиво, но у меня уже везде микротики. Буду иметь в виду.
DaemonGloom
21.06.2018 14:19pfsense/opnsense удобны, когда нужно организовать софтовую маршрутизацию с дополнительными фичами какими-либо. Например — отказоустойчивая маршрутизация с сохранением соединений при переключении на резерв и автоматичесим реплицированием конфигурации (CARP+pfsync+XMLRPC Sync). И встроенным haproxy. И squid. А ещё отследить попытки взлома (IPS). И при этом авторизовать пользователей в Active Directory.
Meklon
Прошу прощения, я пригласил этого пользователя из песочницы, а оказалось что сам пост автоматически публикуется. Получился легкий некропостинг. Исходник аж за 2013 год.
alexyr
Надеюсь, с тех пор он перешёл таки на OpenWRT
Meklon
DDWRT был весьма неплох. Хотя сейчас я бы Mikrotik виртуализировал.
DaemonGloom
С Микротиком это не так интересно — они сразу готовые рабочие образы распространяют (Mikrotik CHR).
Ну и к текущему моменту всё же проброс сетевых карт методами SR-IOV и/или pci passthrough более выгоден. Плюс это даст возможность управлять wifi сетями в самом виртуальном роутере.
Meklon
Ткни, что почитать на эту тему, если не трудно. Мне достаточно актуально по работе. Я так понимаю, что это прямой проброс железа карточки для виртуальной машины? А обычно это просто виртуализация средствами vt-d с софтовой обработкой на CPU?
DaemonGloom
Про SR-IOV от RedHat:
rhelblog.redhat.com/2016/05/23/sr-iov
redhatstackblog.redhat.com/2015/03/05/red-hat-enterprise-linux-openstack-platform-6-sr-iov-networking-part-i-understanding-the-basics
redhatstackblog.redhat.com/2015/04/29/red-hat-enterprise-linux-openstack-platform-6-sr-iov-networking-part-ii-walking-through-the-implementation
Pci Passthrough и технология VT-D — это как раз аппаратный проброс реального устройства в виртуальную машину. Требуется поддержка от процессора и материнской платы. Аналог AMD — IOMMU. При этом гостевая система считает, что к ней подключено полноценное pci устройство с соответствующей же производительностью. Помимо сети так ещё часто подключают видеокарты для игр/расчётов на виртуальной машине. Временами — raid контроллеры, когда гостю требуется полное управление дисковой подсистемой.
В простых ситуациях (и в этом посте) используют сетевой мост для связи виртуальной машины с реальным адаптером. При этом практически вся работа ложится на центральный процессор, что не очень хорошо сказывается на времени отклика при высоких нагрузках на систему.
Разница между SR-IOV и pci passthrough в том, что для первого метода требуется дополнительная поддержка конкретным устройством (сетевой картой, например). При втором методе пробросить можно что угодно (но тут уже зависит от жадности производителя — nvidia очень не любит проброс видеокарт и пытается заставить людей покупать карты серии quadro).
Meklon
а разве для гостя будет разница с физическим устройством? Или Nvidia детектит сам факт установки драйверов на виртуалке?
DaemonGloom
Да, именно факт установки драйверов на виртуалке. Причём одновременно используют несколько методов сразу.
Meklon
А у них это лицензией запрещено?
DaemonGloom
Официально я такого запрета в лицензионном соглашении не вижу. Но драйвера их этим занимаются, а модифицировать их запрещено. Без драйверов же использовать видеокарту не получится.
kvaps
Я бы сказал SR-IOV позволяет на одной сетевой карте создать несколько Virtual Function устройств и пробрасывать в виртуалку уже их, а не всю сетевую карту целиком.
В итоге они работают почти так же как macvlan, но силами сетевухи: отлавливая пакеты с определенным MAC-адрессом. Сделать виртуальный бридж на них не получится.
Meklon
То есть нарезать ресурсы реальной карты на несколько виртуальных машин, и при этом каждая будет почти на уровне bare-metal работать со всем этим?
kvaps
Именно так, сами VF, без включения IOMMU можно активировать и на хостовой машине, определяться они будут как отдельное PCI-устройство.
Технология IOMMU нужна как раз для того что бы осуществить этот проброс устройства непосредственно в виртуалку.
Meklon
Нашел схему
sashz
В KVM это обходится опцией сокрытия виртуализации для гостевой системы
alexyr
Однозначно неплох, если сравнивать со стоковой прошивкой. Но по сравнению с OpenWRT/LEDE, единственный его плюс — доступ к проприетарным драйверам.
BerliozNSK
Я с таким хоть и не сталкивался, но разве нет возможности в том же OpenWRT/LEDE собрать проприетарный модуль руками (нативным или кросс-компилятором — роли не играет) и поставить драйвер в систему явным образом (руками)?
Заголовочники то всяко доступны ИМХО
BerliozNSK
Ну не совсем некропостинг ИМХО.
Сама идея актуальна и по сей день. Особенно на тестинге, где одна физическая машина и куча виртуалок.
Я в 2017-м использовал подобную схему на тестинге:
— Хостовая OS debian jessie, ядро 2.6.32-vz, OpenVZ 6
— Внутри контейнеры OpenVZ+виртуалки KVM
Была задача, для которой надо было xtables-addons. Собираться на кастомном ядре данный аддон отказался. В итоге я поднял VM (стандартная jessie), которая служила шлюзом, тем самым решив проблемы со сборкой xtables-addons, и, попутно освободив хостовую ОС от задач шлюза.
P.S. Задача, по сути, та же, что и у автора, только заместо WRT был использован debian