Я ненавижу рекламу, но постоянно на нее покупаюсь. Увидел в подъезде объявление МГТС - GPON 500 мегабит за 500 рублей в месяц, настоящий IP, IPv6. Из минусов - всего лишь необходимость сверлить стену и вешать в квартире чужой роутер. Думаю надо брать - разберемся как-нибудь. (На самом деле нет, но об этом позже). Гигабитный роутер с WiFi 802.11ас (5ГГц), но без возможности модификации прошивки, установки софта и с минимальными возможностями настройки через веб-интерфейс. Задача - настроить VPN с другой сетью и прозрачное для клиентов использование ресурсов из луковой сети (The Onion Router aka TOR) с использованием своего сервера в локальной сети.
Думаю данная статья не потянет на полноценное руководство. Слишком разные возможности и потребности у людей - разное железо. Скорее некоторый указатель пути по которому можно пойти. Например для сервера можно использовать популярную малину. Возможно даже с pi-hole. Я, например, поставил недорогой x86 сервер с распаянным на материнской плате процессором, поставил ubuntu и использую его, в том числе как файловый, home assistant, веб и сервер приложений.
В общем я хотел, чтобы была возможность использовать WiFi интерфейсы роутера, а также, чтобы клиенты локальной сети получили прозрачный доступ к некоторым ресурсам через vpn или tor без дополнительной настройки на стороне клиента. И не хотелось понапрасну пропускать весь трафик через сторонний сервер - хотелось, чтобы обычный интернет трафик шел напрямую на роутер, а специальный (tor, vpn) обрабатывался сервером. Решил, что отключу на маршрутизаторе DHCP и DNS server, поставлю DHCP на свой сервер, который будет анонсировать правильные маршруты по DHCP и на котором будет крутиться dns, vpn и tor daemon. С vpn все понятно - если другая локальная сеть имеет другие адреса, то достаточно просто настроить маршрутизацию. Для прозрачного доступа к ресурсам через луковый маршрутизатор решил использовать связку dnsmasq + tor.VirtualAddrNetwork + tor.DNS. Настраиваем dnsmasq для предопределенных доменов из списка, чтобы для их разрешения он использовал tor. После этого домены из луковой сети будут иметь специфичные адреса из специального выделенного диапазона частных адресов и можно использовать обычные правила маршрутизации для перенаправления этого трафика в tor.TransPort с использованием правил iptables. Для соединения локальных сетей по vpn использовал wireguard. В другой локалке стоит обычный роутер пока с прошивкой padavan + entware.
Ключевые параметры моей конфигурации:
Локальная сеть - 192.168.2.0/24. У роутера статический белый IP
Другая локальная сеть (доступ к которой получаем через vpn) - 192.168.3.0/24
Роутер - 192.168.2.1
Сервер ubuntu - 192.168.2.4, имя ethernet интерфейс - enp1s0
-
tor
private network (VirtualAddrNetwork) - 10.254.0.0/16
dns server (DNSPort) - 127.0.0.1:9053
transparent proxy address (TransPort) - 0.0.0.0:9040
dnscrypt-proxy (DoH) address - 127.0.0.1:9153
-
wireguard device network (частный диапазон IP адресов из которого назначаются адреса wireguard интерфейсам) - 10.253.1.0/24
сервер wireguard address - 10.253.1.2
android клиент - 10.253.1.10
vpn сервер другой локалки - 10.253.1.3
Сервер
Мой сервер - обычный x86 с Ubuntu 20.04 LTS.
Установливаем пакеты (apt install <packet>
):
iptables-persistent
- сохранение и восстановление правил iptablestor
dnsmasq
- DNS + DHCP серверdnscrypt-proxy
- DoH DNS клиентsystemd + netplan.io
- были установлены по умолчанию и используются для настройки сетевого интерфейсаwireguard
- vpn
Настраиваем статический сетевой интерфейс - /etc/netplan/eth0-static.yaml и запускаем netplan apply
для применения изменений.
Для включения маршрутизации установливаем параметры ядра:
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
и правим файл /etc/sysctl.conf для сохранения изменений после перезагрузки.
Настроиваем iptables - для таблицы filter установливаем default policy ACCEPT для цепочек INPUT и FORWARD - /etc/iptables/rules.v4. И перезагружаем правила netfilter-persistent start
или iptables-restore < /etc/iptables/rules.v4
.
Настройки dnsmasq
В /etc/default/dnsmasq добавляем опцию для игнорирования файлов с расширением *.i.
Локальные устройства прописываем в /etc/dnsmasq.d/src/lan_hosts.csv.i для задания фиксированных IP адресов.
Домены для доступа к которым будем использовать tor прописываем в /etc/dnsmasq.d/src/dns_tor_domains.txt.i
Настраиваем опции DNS - маршруты, адрес маршрутизатора, dns сервер - /etc/dnsmasq.d/dhcp.conf.
Для анонса маршрутов используется DHCP опция classless-static-route и microsoft-classless-static-route - 249 (на всякий случай). В принципе можно было бы попробовать и не отключать DHCP сервер на роутере, а просто анонсировать дополнительные маршруты. Проблема возникла на телефоне Android Xiaomi Mi 9T. Он не использовал маршруты с DHCP, использовал только один маршрут по умолчанию. Не уверен, что на всех андроидах есть такая проблема. Пришлось для андроидов сделать специальные настройки и перенаправлять весь трафик от андроид клиентов на сервер.
Специальные настройки для android - нет маршрутов, сервер используется в качестве основного маршрутизатора.
Для примения настроек запускаем `dnsmasq_reconfig.sh` - более подробно описано в разделе "Обновление конфигурации".
Настройки tor
Файл /etc/tor/torrc:
Порт для socks5 proxy - SocksPort
Запрещаем выходные ноды в некоторых странах - ExcludeExitNodes
Порт для transparent proxy - TransPort
Порт DNS - DNSPort
Частный диапазон адресов из которых будут назначаться IP для серверов к которым мы будем ходить через tor - VirtualAddrNetwork
Список доменов которые мы будем резолвить через tor и которые будут иметь адреса из нашего частного диапазона (см. VirtualAddrNetwork) - AutomapHostsSuffixes - настраивается скриптом dnsmasq_reconfig.sh и сохраняется в файл /etc/tor/hosts_suffixes.cfg.
DoH
DNS over HTTPS - это протокол для выполнения разрешения DNS по протоколу HTTPS. Для меня целью его использование является защита от подмены DNS провайдером.
Для реализации используем dnscrypt-proxy. Для установки выполняем apt install dnscrypt-proxy
.
Конфигурация /etc/dnscrypt-proxy/dnscrypt-proxy.toml:
Примечание: я немного изменил способ запуска dnscrypt-proxy потому что мне показалось, что он у меня не работал. В настройках по умолчанию он запускается через systemd.socket - то есть порт слушает systemd и запускает dnscrypt-proxy когда нужно. Я изменил конфигурацию. В моей конфигурации я запускаю dnscrypt-proxy напрямую. Порт слушает dnscrypt-proxy. Не думаю что это нужно. Для смены порта в конфигурации по умолчанию - когда dnscrypt активируется через systemd.socket надо выполнить systemctl edit dnscrypt-proxy.socket
и установить
ListenStream=127.0.0.1:9153
ListenDatagram=127.0.0.1:9153
Должен появиться файл /etc/systemd/system/dnscrypt-proxy.socket.d/override.conf
Обновление конфигурации
Добавляем домен на который хотим ходить через tor в файл /etc/dnsmasq.d/src/dns_tor_domains.txt.i
Добавляем статический адрес устройства локальной сети в файл /etc/dnsmasq.d/src/lan_hosts.csv.i
Запускаем скрипт dnsmasq_reconfig.sh, который сгеренрирует файлы настройки для dnsmasq (/etc/dnsmasq.d/ lan_hosts.cfg.i, resolv.conf.i), tor (/etc/tor/hosts_suffixes.cfg) и все перезапустит для обновления конфигурации.
Cброс DNS кэша
Допустим вы зашли на сайт напрямую, но посмотрели и решили, что стоит зайти через tor. Просто обновить конфигурацию недостаточно - происходить кэширование DNS адресов в разных местах. Поэтому после обновления конфигурации кэши надо сбросить.
На клиенте с линуксом с systemd-resolve запускаем sudo systemd-resolve --flush-caches
.
На клиенте с windows запускаем ipconfig /flushdns
в командной строке с правами администратора.
В google chrome открываем страничку chrome://net-internals/#dns
и сбрасываем кэш браузера.
Настройка Wireguard VPN
Про настройку wireguard я написал в отдельной статье.
Плач Ярославны
Ну и напоследок напишу почему всё это оказалось ненужным
Во-первых в какой-то момент МГТС отобрала настоящий IP и посадила всех за NAT. Почему-то в этот момент отвалился корпоративный VPN и в службе поддержки порекомендовали подключить выделенный IP.
Во-вторых после подключения выделенного IP перестал работать IPv6. Служба поддержки сообщила, что МГТС в принципе никогда и не поддерживал IPv6. Ну то есть IPv6 как-бы работает, но его работу не гарантируют. На форумах есть объяснение на эту тему - типа выделяют статический IP, но IPv6 статический выделить не могут и чтобы никого не смущать при подключении статического IP тупо обрубают v6.
Повысили тариф на 100 рубей, но это меньшее из зол, даже не в счет.
В-третьих тех поддержка МГТС ужасна. Сначала у меня был роутер sercomm rv6699 - вроде все более-менее работало. И это был не самый плохой вариант - там был telnet и доступ к iptables. Говорят его даже можно перепрошить. Был косяк - к внешнему IP адресу нельзя было достучаться из локальной сети по http и https - но это решалось удалениеми двух правил iptables. Но потом я решил назначить фиксированный канал сети WiFi 5ГГц. Канал не назначился - начал прыгать, я обратился в техподдержку и мне заменили роутер на ZTE ZXHN F680. И это оказалось полным концом. Он не пробрасывал DHCP пакеты из локальной сети в WiFi. Мою схему я использовать уже не мог. Техподдержкой был послан с заключением "в конфигурации по умолчанию странички грузятся, все остальное не наши проблемы". Думал может попробую использовать DNS от роутера, но там совсем шлак. Максимум можно настроить - 10 статических адресов в локальной сети. Статические и динамические адреса должны быть в одном диапазоне. В общем WiFi роутера не используется.
В-четрвертых у МГТС есть полный доступ к вашему роутеру. А иметь третье лицо, а вернее даже целую компанию в своей локальной сети - это как-то даже негигиенично.
Вывод - можно и МГТС, но отключать WiFi и переводить роутер в режим моста (не факт, что это можно сделать, не факт, что это не слетит после неотключаемого автообновления, не факт, что это не запретят).
Говорят, что роутер Sercomm RV6699 v4 можно перепрошить. Хотел попробовать, но не могу - у меня этого роутера больше нет - мне его заменили на ZTE ZXHN F680.
Еще говорят, что можно купить коробочку мене чем за 1.5 тыс. рублей и она будет работать бриджом - думаю это хороший вариант.
Комментарии (20)
lokkiuni
07.01.2022 22:34+4На сколько я знаю, к МГТСовскому GPON есть оптические модули (SFP), соответственно можно подключить к любому своему железу (управляемому свичу или роутеру типа микротика) и не страдать подобным образом.
Опять же, если есть возможность проброса портов, то я бы просто поставил ещё один роутер, особенно при учёте что мгтс-овский роутер неподконтрольный
ClearAirTurbulence
08.01.2022 00:03+2Нельзя просто так взять и воткнуть гпон в сфп-модуль. А так да, я бы просто поставил перед московским роутером какой-нибудь микротик. Особенно если можно мтс в бридж...
Stesh
08.01.2022 00:13+4к МГТСовскому GPON есть оптические модули (SFP),
К сожалению, onu в sfp-формате та еще боль, начиная с цены и сложности подружить его с провайдером и заканчивая стабильностью работы и склоностью к перегреву.
Самое практичное решение - это провайдерский максимально тупой терминал, который включен в режим бриджа, за которым включается клиентский что-угодно-супер-роутер.
И за коробочку за 1.5к рублей говорят вполне правильно - сами терминалы дешевые, за счет работы в бридже нагрузка на проц небольшая, минимум обработки трафика - отсюда стабильность. Только вот модель onu лучше согласовать с провайдером, на голове может быть банальный вендорлок.
Zolg
08.01.2022 10:54+2Не обязательно sfp: нужен просто бридж между gpon и ethernet. Это может быть и штатный провайдерский роутер, переведенный в режим моста (не всегда возможно) и непровайдерская железка с бОльшим контролем с вашей стороны (и меньшим со стороны провайдера).
И форм фактор sfp-модуля для такой железки не самый удачный: в случае с gpon это не просто тупой конвертер физики, а полноценный onu, впихнутый в габариты sfp-модуля. Греются они как котлы в аду. Ну и выбор soho-роутеров с портом sfp достаточно ограничен.
ShadowMaster
07.01.2022 23:38+4В такой же ситуации за провайдерским роутером поставил свой, предварительно отключив на нем все, кроме LAN.
loginsin
08.01.2022 01:09+2DMZ там нормально работает. Можно отключить все wifi, dhcp и что там еще есть, назначить DMZ на конкретный внутренний (по отношению к mgts роутеру) ip, и этот ip выдать своему x86 серверу. Схема прекрасно работает уже кучу лет.
Timnet
08.01.2022 03:58С таким конфигом будут пляски с бубном если захочется SIP, Телевизионные каналы, VPN.
Самый простой и дешёвый способ это, как писали выше, сконфигурировать МГТС-роутер в бридж, отключить всё остальное и использовать свой роутер за ним. Самый "правильный" на мой взгляд, использовать SFP модуль. Благо информации по подключению таким способом уже много накопилось в рунете.
loginsin
08.01.2022 04:24F660 не смог я в бридж занастроить. А с впн (и внутрь, и наружу, и GRE, и разные другие всякие) и SIP - проблем нет: весь трафик, включая ARP транслируется прям как есть в порт сетевой карты (ну IP свапается с публичного во внутренний).
SFP вызовет куда больше плясок с бубнами и финансами, чем установка галочки в админке.
sergeysakirkin
08.01.2022 08:39В момент заключения дошовора, пишите модем - в режим бриджа. Wifi - выключить.
И собственно все. Ставите ваш роутер %VendorName% и получаете нормальное решение. Без превомоганий и танцев с бубном.
BigD
08.01.2022 10:13МГТС этого не делает. Сам делаешь, если умеешь, модем подходящей модели и есть админский пароль.
NikaLapka
08.01.2022 11:07Интересно, но разочаровывает. Предположу:
Во-первых, если провайдер осуществляет подключение ethernet кабелем, то вы должны брать от него только pppoe\l2tp, всё остальное в drop, если gpon то роутер в bridge.
Во-вторых, перед прочтением, я подумал, что возможно статья про маршрутизацию или про то как взяли старую приставку, купили б\у роутер за 200 руб, залили линукс и сделали см выше.. но "свой х86 сервер".. хм, при таком подходе раскрывается масса возможностей, вплоть до установки vmware esxi с debian, mikrotik chr, ... .
В-третьих, "засовывание" всего трафика в туннель, не работает если 3\4 времени вы смотрите котиков на ютубе. Так ли нужен DoH, если можно просто поменять маршрутизацию к 8.8.8.8?
"отобрала настоящий IP и посадила всех за NAT" не важно какой NAT лишь бы он работал, а не был предлогом купить "реальный IP адрес". Например, вдруг иногда все соединения начинают иметь срок жизни не более 4-6 часов... или вдруг появляется ограничение на скорость 1го соединения, ограничение на количество p/s...
"В-третьих тех поддержка МГТС ужасна" от правильно постановки неисправности - зависит мотивация службы поддержки, например, ваша клетка с голубями не работает, я открываю сайт первого канала, чтобы в обед посмотреть обращение Великого, а он не грузится!
pinoquinho Автор
09.01.2022 01:45+1Технология подключения - GPON. Основываясь на своем опыте скажу, что да - самый правильный вариант - перевести роутер МГТС в режим бриджа и забыть. Правда говорят с этим могут возникнуть проблемы. Можно использовать и SFP, но его надо купить, настроить и это надо иметь соответствующий маршрутизатор. Я сам не проверял, но на 4pda говорят, что можно купить модем Huawei HG8310M за примерно 1400 рублей - там вход GPON, выход LAN и он работает в режиме бриджа. Да, в принципе, на авито можно купить тот же sercomm rv6699 или что-то похожее за 1000 рублей и перепрошить.
fk01
09.01.2022 14:50Не уловил момент с DNS: ведь dnsmasq не является полноценным рекурсивным резолвером и полагается на провайдерский. А порт 9053 в конфигурации dnsmasq не просматривается. :-/
Я использую в аналогичных случаях unbound. Он полностью и сам от начала до конца рекурсивно резолвит адрес обращаясь к конкретным неймсерверам ответственным за конкретный домен. Это спасает от подмены со стороны провайдера (DNSSEC он тоже умеет), но не спасает от подслушивания и подглядывания. Хотя последние версии вроде с DoH и DNSCrypt научились работать.
Проблема с DoH, что подслушивать и подглядывать начинает тот кто предоставляет такой сервис, и что в случае любых проблем со связностью в интернете всё перестаёт работать. Рекурсивный сервер всё же способен в какой-то мере пережить отключение РФ от интернета и подобные вещи.
pinoquinho Автор
09.01.2022 15:17В моей конфигурации dnsmasq полагается на DoH (dnscrypt-proxy) для разрешения обычных имен и на tor для разрешения имен, внесенных в специальный список. В этой схеме DoH особо не нужен - можно было вполне положиться на DNS, который поставляет провайдер. Всё-таки задача - не предоставление абсолютной анонимности, а предоставление клиентам локальной сети прозрачного доступа к ресурсам из специального списка.
LeshaRB
Из минусов - всего лишь необходимость сверлить стену и вешать в квартире чужой роутер.
Про стену я не знаю вашу планировку, меня интересует, почему нельзя испльзовать свой роутер?
Night_Snake
"я предполагаю"
потому что МГТС использует GPON для подключения абонентов, т.е. на клиентской стороне должно быть авторизированное устройство
Taywox
Это приоритарная технология ? Насколько помню нет, так почему я не могу свое устройство с оптическим портом поставить?
Было несколько провайдеров и со всякими adsl и т.д. не было ещё только с оптикой сразу в квартиру, сейчас один из известных и я не у 1 не брал их бесполезное, ненужное оборудование за 300% стоимости и им я управлять или прошить не могу как хочу, я приобретал то что нужно мне и отчасти совместимое с требованиями провайдера, если они сильно не зарезаны или это не какие то кривые реализации протоколов (от таких провайдеров отказываюсь сразу) проблем не было пока ещё!
Night_Snake
Протокол общения "головы" с терминалом в квартире - да, может быть проприетарным, и "просто устройство с оптическим портом" не поставить.
В лучшем случае, спасёт ONU в форм-факторе SFP, который будет а-ля "роутер в роутере". Но там свои проблемы - тепловыделение, совместимость и т.д.
А так конечно да, если есть альтернатива - plan ethernet (т.е. витуха от провайдера) может быть удобнее. Но это если она есть, а так бывает не всегда.
K_MAPKC
В Gpon используют централизованно управляемые роутеры, они же модемы. Из плюсов - такое решение не требует размещения в доме активного оборудования и если у вас в квартире всё подпинано к ИБП, то в случае отключения света интернет не пропадёт.
В целом можно попросить оператора перевести модем в режим моста и поставить свой роутер за него.