Сказ о том, как я локальные сети объединял.
Имеется
1. Локальная сеть в квартире с Keenetic Viva KN-1910 во главе.
2. Локальная сеть на даче с Keenetic Extra KN-1711 во главе.
Цель объединения:
1. Возможность в квартире смотреть ТВ через приемник SML-482HD Base. Подключение должно осуществляться через провайдера на даче. Телевидение фактически бесплатное, но там 300 каналов, почти на всех каналах есть 7-ми дневный архив. В городе таких цен нет…
2. Еще на даче есть приемник-сервер Триколор GS-B527, подключенный к спутнику. Там тоже есть интересные каналы и несколько UHD каналов. Через клиента GS-C593 (GS-591) каналы можно смотреть без дополнительной оплаты.
3. Подключение из города к служебным роутерам провайдера на даче и к маршрутизатору соседа на даче (я беру у него резервный канал через Wi-Fi).
4. Спортивный интерес 😉
Если первый пункт и третий пункт удалось решить с помощью L2TP/IPsec, то приемники Триколор требуют, чтобы они был в одной локальной сети (для трансляции используется Multicast, который не удалось прокинуть между сетями). Ну и спортивный интерес…
Такое объединение описано в статье Настройка туннелей IPIP, GRE и EoIP https://help.keenetic.com/hc/ru/articles/115002715029-Настройка-туннелей-IPIP-GRE-и-EoIP.
Естественно хотелось, чтобы по умолчанию устройства выходили через свой роутер и IP получали через DHCP, но тут возникает проблема, так как DHCP запросы свободно ходят через канал и устройство может подцепиться к «чужому» роутеру.
И так. Глаза бояться, а руки делают (бьют в бубен).
Делал на основании форума https://forum.keenetic.com/topic/7031-%D0%B7%D0%B0%D0%BF%D1%80%D0%B5%D1%82-dhcp-%D0%B2-eoip/ (далее Форум), но там не очень последовательно и не всегда правильно.
1. Получаем у одного из провайдеров белый IP.
Достаточно белого IP на одном из роутеров.
Keenetic, на котором будет белый IP, должен быть подключен к провайдеру напрямую, а не через промежуточный роутер от провайдера. В последнем случае подключение тоже возможно, но придется делать публикацию сервера, а не всегда провайдер дает доступ к своему оборудованию.
Белый IP может быть на любой из сторон, так что выбираем провайдера с лучшими условиями по подключению и ежемесячной платой.
Мне подключение обошлось бесплатно, плачу 150 руб. в месяц. Выдали IP за 5 минут (вот за что я люблю небольших провайдеров!)
2. Делаем общее адресное пространство у маршрутизаторов
Устройства должны быть в одной подсети.
На Форуме один из авторов сделал «маршрутизатор 1 - раздает 192.168.0.1-192.168.0.254 255.255.254.0, а маршрутизатор 2 - 192.168.1.1-192.168.1.254 255.255.254.0».
Я сделал
- маршрутизатор 1 - 192.168.Х.1 с маской 255.255.255.0, раздает 99 адресов
- маршрутизатор 2 - 192.168.Х.101 с маской 255.255.255.0, раздает 99 адресов
- адреса 192.168.Х.201 - 192.168.Х.254 оставляем для статической адресации. В качестве шлюза на устройстве можно вручную прописать либо 192.168.Х.1 либо 192.168.Х.101, в зависимости от кого, в какой сети нужно присутствовать устройству.
X – ваше любимое число, которое не пересекается с подсетями провайдера, рабочими подсетями и подсетями соседей
3. Подключаем KeenDNS на обоих маршрутизаторах.
Нужен, чтобы добраться до конфигуратора в случае, если канал не работает.
Я поставил режим работы = «через облако», так как почему-то иногда доступ на маршрутизаторе с белым IP режим «авто» не всегда переключался в нужный режим.
Кроме того, основной провайдер с белым IP может сбойнуть и роутер переключится на резервного провайдера.
Терять доступ к Web интерфейсу не приятно…
4. Настаиваем канал.
Описано в статье Настройка туннелей IPIP, GRE и EoIP, но в последних версиях это можно делать через Web интерфейс через Интернет – Другие подключения – IP туннели.
Ставим компонент «Туннели EoIP» и настраиваем
На сервере (где белый IP)
На клиенте
В поле «Удаленная сторона» прописываем белый IP адрес.
ID интерфейса влияет на наименование интерфейса в CLI (оно может отличать от Название). В моем случае это будет EoIP0.
Включаем и радуемся объединенной сети.
По DHCP устройства переподключаются не сразу, а если переподключаются, то «родной» DHCP сервер отвечает в 90% случаев быстрее. Если подключились и канал быстрый, то устройства могут и не заметить, что они работают через канал через другого провайдера.
Но в моем случае радость была недолгой.
В какой момент я начал понимать, что не работает Speedtest и некоторые сайт (например, rbc.ru). Причем сайт keenetic.ru работал. Ping до сайтов проходил.
Пришлось отключить интерфейсы и перегрузить.
На Форуме вычитал, что виной тому MTU.
5. MTU.
Оказалось, что интерфейсу EoIP0 нужно было прописать MTU 1500 и после этого только включать в Bridge с домашний интерфейсом.
В 3.7.4 это не реализовано. Обещают в 3.9, т. е. не скоро.
Проблему можно, наверное, решить через CLI (отключить интерфейс от bridge, прописать MTU и включить снова), но это сложно и не всегда есть доступ к удаленному CLI.
Я поступил так.
- сохраняем конфигурацию в файл
- находим секцию interface EoIP0 и перед up добавляем строчку «ip mtu 1500»
- загружаем конфигурацию
Это нужно проделать на всех маршрутизаторах.
После этого нельзя исправлять настройку интерфейса через Web, иначе все слетит и надо будет повторить процедуру.
После исправления MTU запускаем интерфейс и наслаждаемся жизнью.
Все прекрасно, но иногда все-таки устройства подключаются не к тому роутеру.
Чтобы исправить это, нужно запретить DHCP трафик через канал.
Поскольку у нас интерфейсы объединены в бридж, то IP фильтрация не поможет.
Нужна фильтрация на 2-м уровне, а это может только ebtables из открытых пакетов…
Приступаем к следующей части танцев с бубном (к рукам подключаем ноги).
6. Выбираем маршрутизатор для OPKG.
Фильтрацию достаточно сделать на одном из маршрутизаторов.
Ставить лучше на флэшку – поэтому нужен маршрутизатор с USB.
Видимо надо выбирать более производительный маршрутизатор.
7. Ставим нужные компоненты Keenetic
- Протокол IPv6 (нужен зачем-то для Модули ядра подсистемы Netfilter)
- Файловая система Ext (чтобы читать флэшку)
- Сервер SSH (чтобы подключаться к командной строке OPKG через SSH 222, как все уважаемые люди)
- Поддержка открытых пакетов
- Модули ядра для поддержки файловых систем
- Модули ядра подсистемы Netfilter (как раз там, насколько я понимаю, есть поддержка ebtables)
- Модули ядра подсистемы Traffic Control – возможно не нужен
- Пакет расширения Xtables-addons для Netfilter – возможно не нужен
Возможно какие-то лишние, а может чего-то и забыл😉.
8. Ставим OPKG
Подробно описано в «OPKG» https://help.keenetic.com/hc/ru/articles/360000948719-OPKG и в «Установка системы пакетов репозитория Entware на USB-накопитель» https://help.keenetic.com/hc/ru/articles/360021214160.
Ставим на USB.
Можно поставить на встроенную память, но размера ее может не хватить (у меня инсталляция заняла 61,5МБ) и потом с ней какие-то проблемы.
9. Ставим ebtables.
Через BusyBox ставим ebtables
opkg install ebtables
9.1 Ставим mc (midnight commander).
Через BusyBox ставим MC, если не поставили на предыдущем этапе
opkg install mc
Потребуется для копирования и редактирования файлов).
10. Проверяем наличие необходимых модулей.
В BusyBox пишем
find /lib/modules
Нас интересуют модули (папка может быть другая)
/lib/modules/4.9-ndm-5/ebt_802_3.ko
/lib/modules/4.9-ndm-5/ebt_among.ko
/lib/modules/4.9-ndm-5/ebt_arp.ko
/lib/modules/4.9-ndm-5/ebt_arpreply.ko
/lib/modules/4.9-ndm-5/ebt_dnat.ko
/lib/modules/4.9-ndm-5/ebt_ip.ko
/lib/modules/4.9-ndm-5/ebt_ip6.ko
/lib/modules/4.9-ndm-5/ebt_limit.ko
/lib/modules/4.9-ndm-5/ebt_mark.ko
/lib/modules/4.9-ndm-5/ebt_mark_m.ko
/lib/modules/4.9-ndm-5/ebt_pkttype.ko
/lib/modules/4.9-ndm-5/ebt_redirect.ko
/lib/modules/4.9-ndm-5/ebt_snat.ko
/lib/modules/4.9-ndm-5/ebt_stp.ko
/lib/modules/4.9-ndm-5/ebt_vlan.ko
/lib/modules/4.9-ndm-5/ebtable_broute.ko
/lib/modules/4.9-ndm-5/ebtable_filter.ko
/lib/modules/4.9-ndm-5/ebtable_nat.ko
/lib/modules/4.9-ndm-5/ebtables.ko
Если их нет, то возможно не доставили какие компоненты в keenetic.
Доставляем.
У меня получилось добиться появления нужных модулей только через переустановку OPKG после установки нужных пакетов.
Возможно есть способ проще.
11. Узнаем имя интерфейса.
Это важно.
В CLI интерфейсы могут быть с большими и маленькими буквами.
В OPKG может быть по-другому.
Узнать это можно через команду ifconfig в BusyBox.
У меня он называется eoip0 – т. е. все маленькими буквами.
12. Готовим файл-скрипт с командами.
Можно запустить фильтр через команды вручную, но «магия» пропадает после перезагрузки.
Поэтому лучше через файл.
Я дал имя файлу Sebt. Главное, чтобы в начале была S, потом не важно (rc.unslung запускает все файлы на S при старте)
Содержимое файла
#!/bin/sh
insmod /lib/modules/4.9-ndm-5/ebtables.ko
insmod /lib/modules/4.9-ndm-5/ebtable_filter.ko
insmod /lib/modules/4.9-ndm-5/ebt_ip.ko
insmod /lib/modules/4.9-ndm-5/ebtable_nat.ko
ebtables -F
ebtables -A INPUT -i eoip0 -p ipv4 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP
ebtables -A INPUT -i eoip0 -p ipv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP
ebtables -A FORWARD -i eoip0 -p ipv4 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP
ebtables -A FORWARD -i eoip0 -p ipv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP
Для создания файла использовал Notepad++
Конец строк должен быть Unix (LF) (можно исправить через редактор в MC).
Команды insmod ставят модули (при повторном запуске будет ругаться, что модули уже есть, но это не страшно).
Команда ebtables -F чистит таблицу разрешений, чтобы можно было менять через повторный запуск скрипта (в противном случае таблица просто дополнится).
Ну а далее сами правила.
На форуме предлагают
ebtables -A INPUT -i eoip0 -p ipv4 --ip-proto udp --ip-dport 67:68 -j DROP
ebtables -A INPUT -i eoip0 -p ipv4 --ip-proto udp --ip-sport 67:68 -j DROP
ebtables -A FORWARD -i eoip0 -p ipv4 --ip-proto udp --ip-dport 67:68 -j DROP
ebtables -A FORWARD -i eoip0 -p ipv4 --ip-proto udp --ip-sport 67:68 -j DROP
Там описки (исправлены и выделены жирным). Кроме того, работать будет только первое и третье правило.
Можно сделать просто
ebtables -A INPUT -i eoip0 -p ipv4 --ip-proto udp --ip-dport 67:68 -j DROP
ebtables -A FORWARD -i eoip0 -p ipv4 --ip-proto udp --ip-dport 67:68 -j DROP
Мои правила, мне кажется, более правильные и показывают, сколько пакетов заблокировано от клиента и от сервера, и из какой сети.
В общем «gillyweed» могут быть разного происхождения – главное, чтобы работали.
13. Закидываем файл в папку /opt/etc/init.d
Я закидывал через Приложения – Диск и принтеры.
Если не дает закинуть в нужную папку сразу, то можно закинуть в home, а потом скопировать через mc.
14. Делаем разрешение на запуск.
Можно через команду chmod, а можно через mc (File- Chmod). Даем права execute.
Если все правильно, то перед именем файла появится знак *.
15. Запускаем Sebt
Переходим в папку /opt/etc/init.d и запускаем.
Не должно быть ошибок типа, что модули не найдены или что нет таблицы filter.
16. Проверяем работу правил.
- на смартфоне включаем и выключаем Wi-Fi
В BusyBox запускаем команду ebtables -L --Lc
Следим за циферками – они должны нарастать …
Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: ACCEPT
-p IPv4 -i eoip0 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP , pcnt = 0 -- bcnt = 0
-p IPv4 -i eoip0 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP , pcnt = 0 -- bcnt = 0
Bridge chain: FORWARD, entries: 2, policy: ACCEPT
-p IPv4 -i eoip0 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP , pcnt = 0 -- bcnt = 0
-p IPv4 -i eoip0 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP , pcnt = 1 -- bcnt = 328
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
Со временем цифры растут
Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: ACCEPT
-p IPv4 -i eoip0 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP , pcnt = 7 -- bcnt = 2296
-p IPv4 -i eoip0 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP , pcnt = 1 -- bcnt = 328
Bridge chain: FORWARD, entries: 2, policy: ACCEPT
-p IPv4 -i eoip0 --ip-proto udp --ip-sport 68 --ip-dport 67 -j DROP , pcnt = 35 -- bcnt = 11480
-p IPv4 -i eoip0 --ip-proto udp --ip-sport 67 --ip-dport 68 -j DROP , pcnt = 6 -- bcnt = 1968
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
17. Перегружаем роутер, чтобы убедиться, что все работает после загрузки.
Проверяем через ebtables -L –Lc
18. Настраиваем устройства, которые должны работать в «чужой» сети.
Настраиваем Ip руками.
Ip 192.168.Х.201 - 192.168.Х.254 (эти адреса не раздаются по DHCP)
Маска 255.255.255.0
Шлюз 192.168.Х.1 или 192.168.Х.101
Через какого провайдера пускать наружу, рулим на keenetic.
19. Наслаждаемся жизнью
У меня все работает отлично.
Нагрузка на Extra не превышает 80%, если даже смотришь UHD канал.
Устройства Триколор прекрасно видят друг друга.
Не удобно только то, что все устройства показываются в разделе Список устройств.
Понять, какие чужие, а какие свои, можно только по IP.
объединение сетей.docx