image

Введение:


По работе мне часто приходится работать с перепрошитыми роутерами на 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 тоже не получилось избежать, но она была всего одна и останавливаться на ней я не буду.



Начинаем:


image
Изначальная картина моих сетевых подключений



Для начала скачаем и установим VirtualBox, коль таковой
отсутствует, и архив, в котором присутствуют все необходимые программы и файлы.



Настраиваем (создаем) виртуальную машину. Не буду повторяться, как это сделать, можете прочитать в статье, только естественно в носителях указать наш образ прошивки скачанной раннее в архиве.



Первая настройка:


Первую настройку проще всего сделать через другую виртуальную машину с Гостевой ОС,
подключенную к роутеру по внутренней сети.
Настройку сети вы можете видеть на скришоте.



image

Запустите обе машины. Откройкте браузер в гостевой системе и
зайдите по адресу http://192.168.1.1/.



Если вы увидели следующую картинку, радуйтесь!
У вас получилось!



image

Тут достаточно просто ввести новый логин и пароль.
Смело нажимайте Change Password и после этого выключаем обе машины (роутер и ОС).



Настраиваем сеть:


1) Создаём новые интерфейсы.
В главном окне VirtualBox нажимаем комбинацию Ctrl+G.
Переходим Сеть->Виртуальные сети хоста. Создаем два
виртуальных адаптера и сразу в настройках ip поставим все в автомат:



image

2) Настраиваем сеть роутера.
Включаем все четыре сетевых адаптера.
Проверяем, чтобы везде тип адаптера был PCnet-FAST III.
Везде я разрешил неразборчивый режим.
В первом адаптере делаю сетевой мост с адаптером, в который у меня подведен интернет и
т.к. у меня идет привязка по MAC адресу, прописал точно такой же как у адаптера.



image

Второй адаптер делаем тип подключения Виртуальный адаптер хоста и
выбираем первый адаптер в имени.
Мак адрес для красоты я написал 000000000002
и в сетевых подключениях назвал подключение как 2) Router_02



image

Третий адаптер делаем по аналогии со вторым, только двойки
меняем на тройки.



image

Четвертый пока оставим неподключенным



image

А теперь договоримся:


Мы будем весь канал интернета перенаправлять на роутер и раздавать по виртуальным адаптерам.
Второй адаптер нам необходим для доступа в интернет именно этой (хостовой) машины,
а третий для раздачи сети по LAN. Иначе, если раздавать интернет, через который сидим, то
будут проблемы с маршрутизацией, как показала практика.



Заводим полностью интернет на роутер:


Отключаем в свойствах сетевого интерфейса интернета все службы, клиенты и протоколы,
кроме VirtualBox Bridged Networking Driver



image

Раздаем интернет по Lan:


Т.к. все четыре адаптера роутера у нас будут заняты, делаем сетевой мост средствами ОС.


Октлючаем всё в свойствах второй сетевой карты и уже потом объединяем в сетевой мост с 3) Router_03



image

Раздаем интернет по Wi-Fi:


Мне нравится программа MyPublicWiFi, которая тоже есть в архиве.
В принципе, вы можете выбрать любую другую. Скажу, что мне нравится многие другие аналоги, но для этой задачи она подходит идеально.
Вы ее один раз настроите и после этого она самостоятельно будет включать точку доступа.



image

После запуска точки доступа в сетевых подключениях
у вас появится еще один виртуальный адаптер Microsoft Virtual WiFi Miniport Adapter.
Все настройки IP ставим автоматически и добавляем в сетевой мост с четвертым адаптером роутера



image

Silent mod:


Скрытый запуск роутера.
Открываем с помощью procexp.exe свойства процесса роутера и копируем параметры запуска.
Редактируем файл StartRouterVirtualBox.VBS и заменяем параметры на свои.



image

Можно скрипт кинуть просто в автозагрузку.
Я предпочел другой вариант – Планировщик заданий
Создал задачу с названием «1) StartRouterVirtualBox», указал выполнять с наивысшими правами.
В триггерах создал условие при входе в систему и в действиях указал путь до скрипта.



Скрытый запуск программы MyPublicWiFi.
Создаем задачу «2) MyPublicWiFi».
Меняем учетную запись на «система» (если у вас Windows 8, то «Система») (написать ручками)
Делаем наивысшие права и делаем задачу скрытой.
В действиях указываем запуск программы,
а в триггере создаем «запуск при входе любого пользователя» с задержкой в 30 сек.



Настройка роутера:


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



Все файлы и видео.



Желаю всем успехов в экспериментах! До новых встреч!


Комментарии (30)


  1. Meklon
    20.06.2018 11:29

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


    1. alexyr
      20.06.2018 11:49

      Надеюсь, с тех пор он перешёл таки на OpenWRT


      1. Meklon
        20.06.2018 11:54

        DDWRT был весьма неплох. Хотя сейчас я бы Mikrotik виртуализировал.


        1. DaemonGloom
          20.06.2018 12:25
          +1

          С Микротиком это не так интересно — они сразу готовые рабочие образы распространяют (Mikrotik CHR).
          Ну и к текущему моменту всё же проброс сетевых карт методами SR-IOV и/или pci passthrough более выгоден. Плюс это даст возможность управлять wifi сетями в самом виртуальном роутере.


          1. Meklon
            20.06.2018 12:56

            Ткни, что почитать на эту тему, если не трудно. Мне достаточно актуально по работе. Я так понимаю, что это прямой проброс железа карточки для виртуальной машины? А обычно это просто виртуализация средствами vt-d с софтовой обработкой на CPU?


            1. DaemonGloom
              20.06.2018 13:52

              Про 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).


              1. Meklon
                20.06.2018 14:16

                а разве для гостя будет разница с физическим устройством? Или Nvidia детектит сам факт установки драйверов на виртуалке?


                1. DaemonGloom
                  20.06.2018 14:32

                  Да, именно факт установки драйверов на виртуалке. Причём одновременно используют несколько методов сразу.


                  1. Meklon
                    20.06.2018 14:37

                    А у них это лицензией запрещено?


                    1. DaemonGloom
                      21.06.2018 06:51

                      Официально я такого запрета в лицензионном соглашении не вижу. Но драйвера их этим занимаются, а модифицировать их запрещено. Без драйверов же использовать видеокарту не получится.


              1. kvaps
                20.06.2018 14:23

                Я бы сказал SR-IOV позволяет на одной сетевой карте создать несколько Virtual Function устройств и пробрасывать в виртуалку уже их, а не всю сетевую карту целиком.
                В итоге они работают почти так же как macvlan, но силами сетевухи: отлавливая пакеты с определенным MAC-адрессом. Сделать виртуальный бридж на них не получится.


                1. Meklon
                  20.06.2018 14:26

                  То есть нарезать ресурсы реальной карты на несколько виртуальных машин, и при этом каждая будет почти на уровне bare-metal работать со всем этим?


                  1. kvaps
                    20.06.2018 14:30

                    Именно так, сами VF, без включения IOMMU можно активировать и на хостовой машине, определяться они будут как отдельное PCI-устройство.
                    Технология IOMMU нужна как раз для того что бы осуществить этот проброс устройства непосредственно в виртуалку.


                    1. Meklon
                      20.06.2018 14:36

                      image
                      Нашел схему


              1. sashz
                21.06.2018 08:55

                nvidia очень не любит проброс видеокарт и пытается заставить людей покупать карты серии quadro


                В KVM это обходится опцией сокрытия виртуализации для гостевой системы


        1. alexyr
          20.06.2018 14:52
          +1

          Однозначно неплох, если сравнивать со стоковой прошивкой. Но по сравнению с OpenWRT/LEDE, единственный его плюс — доступ к проприетарным драйверам.


          1. BerliozNSK
            20.06.2018 15:12

            Я с таким хоть и не сталкивался, но разве нет возможности в том же OpenWRT/LEDE собрать проприетарный модуль руками (нативным или кросс-компилятором — роли не играет) и поставить драйвер в систему явным образом (руками)?
            Заголовочники то всяко доступны ИМХО


    1. BerliozNSK
      20.06.2018 13:53

      Ну не совсем некропостинг ИМХО.
      Сама идея актуальна и по сей день. Особенно на тестинге, где одна физическая машина и куча виртуалок.

      Я в 2017-м использовал подобную схему на тестинге:
      — Хостовая OS debian jessie, ядро 2.6.32-vz, OpenVZ 6
      — Внутри контейнеры OpenVZ+виртуалки KVM

      Была задача, для которой надо было xtables-addons. Собираться на кастомном ядре данный аддон отказался. В итоге я поднял VM (стандартная jessie), которая служила шлюзом, тем самым решив проблемы со сборкой xtables-addons, и, попутно освободив хостовую ОС от задач шлюза.

      P.S. Задача, по сути, та же, что и у автора, только заместо WRT был использован debian


  1. Chupakabra303
    20.06.2018 14:46

    Заводил как-то Mikrotik CHR под VBox на удаленной машине (рабочая станция SCADA с доступом в сеть АСУ) за кучей NATов. Оттуда поднимал VPN к своему офисному маршрутизатору, и уже через туннель имел из офиса полный доступ к сети АСУ и SCADA станции.


    1. Meklon
      20.06.2018 15:03

      В бесплатном варианте там bandwidth зарезан?


      1. Chupakabra303
        20.06.2018 15:08

        Да, пользовался бесплатным, с ограничением на интерфейс 1Mbps. Но для моих задач «выше крыши» хватало.


  1. safari2012
    20.06.2018 17:46

    Вчера мне за 5мин. до начала матча Россия-Египет приспичило мне достать с полки неиспользуемый (но заранее настроенный) декодер IPTV от Ростелекома. Декодер шёл по акции вместе с пакетом интернет+тв за 300руб./50Мбит и нафиг не был нужен. Но я вспомнил, что РТК аннонсировал бесплатные HD-трансляции ЧМФ 2018.
    Внезапно (с), выяснилось, что мой роутер (не так давно был перепрошит OpenWRT) by default, оказался без поддержки igmp мультикастинга. В результате, я почти весь первый тайм имел секс с настройкой роутера. Хорошо, что голы пошли именно во втором тайме :)
    Я к чему это всё… в dd-wrt, насколько я помню, галочка включить поддержку igmp proxy доступна «из коробки».


    1. Renaissance
      20.06.2018 19:23
      +1

      К слову, igmpproxy в OpenWrt включается одной командой установки opkg. Ну и разрешить igmp snooping на нужном интерфейсе.
      А вот дальше начинается увлекательное приключение по отлову сетей из которых идет вещание через syslog и добавление их в altnet'ы.

      Вообще интересно, как это реализовано одной галочкой в DD-WRT, ибо igmprpoxy там тот же самый, просто конфиг заполняется автоматически.


      1. Afrit
        21.06.2018 02:43

        Udpxy и забыть igmpproxy как страшный сон. (плейлист придётся немного переделать)


  1. hzs
    20.06.2018 17:53

    А кто-нибудь, для простого домашнего использования, пробовал отечественную прошивку Wive-NG?
    Мне визуально показалось, что эта прошивка на дешевом роутере уделывает по скорости дорогие и навороченные роутеры.
    Но, правда, не даёт глубоко разбирать пакеты данных.


  1. Bonio
    20.06.2018 23:08

    Почему никто не вспоминает про pfsense? Для виртуального роутера эта система просто на порядок лучше, чем openwrt. Да и для физического тоже.


    1. Meklon
      21.06.2018 09:04

      А чем лучше? Просто интересно, я его никогда не щупал.


      1. Bonio
        21.06.2018 09:38

        Удобнее и мощнее. Буквально любое действие делается из web интерфейса, есть плагины. По количеству функций сравнима, наверное, с микротиком, или даже превосходит его. Имеет просто лучший, web интерфейс из всех, что я видел, который полностью избавляет от необходимости лезть в консоль. Но на любой дешевый роутер эту систему не поставишь, так как под капотом там полноценная FreeBSD.
        Вот посмотрите только, как оно выглядит, информативно, красиво и настолько же функционально. Категорически советую попробовать.

        Заголовок спойлера
        image


        1. Meklon
          21.06.2018 11:40

          Красиво, но у меня уже везде микротики. Буду иметь в виду.


          1. DaemonGloom
            21.06.2018 14:19

            pfsense/opnsense удобны, когда нужно организовать софтовую маршрутизацию с дополнительными фичами какими-либо. Например — отказоустойчивая маршрутизация с сохранением соединений при переключении на резерв и автоматичесим реплицированием конфигурации (CARP+pfsync+XMLRPC Sync). И встроенным haproxy. И squid. А ещё отследить попытки взлома (IPS). И при этом авторизовать пользователей в Active Directory.