Я ненавижу рекламу, но постоянно на нее покупаюсь. Увидел в подъезде объявление МГТС - 500 мегабит за 500 рублей в месяц, настоящий IP, IPv6. Из минусов - всего лишь необходимость сверлить стену и вешать в квартире чужой роутер. Думаю надо брать - разберемся как-нибудь. (На самом деле нет, но об этом позже). Гигабитный роутер с WiFi 5G, без возможности модификации прошивки и установки софта (с вероятностью, но об этом еще позже). Задача - настроить VPN с другой сетью и прозрачное для клиентов использование ресурсов из луковой сети (The Onion Router aka TOR) с использованием своего сервера в локальной сети.
Думаю данная статья не потянет на полноценное руководство. Слишком разные возможности и потребности у людей - разное железо. Скорее некоторый указатель пути по которому можно пойти. Например для сервера можно использовать малину. Возможно даже с pi-hole. Я, например, поставил недорогой x86 сервер с распаянным на материнской плате процессором, поставил ubuntu и использую его в том числе как файловый, home assistant, веб и сервер приложений.
В общем я хотел, чтобы была возможность использовать WiFi интерфейс роутера, а также, чтобы клиенты локальной сети получили прозрачный доступ к некоторым внешним ресурсам без дополнительной настройки на стороне клиента. И не хотелось понапрасну пропускать весь трафик через сторонний сервер - хотелось, чтобы обычный интернет трафик шел напрямую на роутер, а специальный обрабатывался сервером. Решил, что отключу на маршрутизаторе 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
- Сервер - 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 - сохранение и восстановление правил iptables
- tor
- dnsmasq - DNS + DHCP сервер
- dnscrypt-proxy - DoH DNS клиент
- systemd + netplan.io - были установлены по умолчанию и используются для настройки сети
- wireguard - vpn
Для включения маршрутизации установливаем параметры ядра:
```
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
```
Настроиваем iptables - для таблицы filter установливаем default policy ACCEPT для цепочек INPUT и FORWARD -
/etc/iptables/rules.v4. И перезагружаем правила `netfilter-persistent start` или `iptables-restore < /etc/iptables/rules.v4`.
Настройки dnsmasq
Для анонса маршрутов используется DHCP опция
classless-static-route и
microsoft-classless-static-route - 249 (на всякий случай). В принципе можно было бы попробовать и не отключать DHCP сервер на роутере, а просто анонсировать дополнительные маршруты. Проблема возникла на телефоне Android Xiaomi Mi 9T. Он не использовал маршруты с DHCP, использовал только один маршрут по умолчанию. Не уверен, что на всех андроидах есть такая проблема. Пришлось для андроидов сделать специальные настройки и перенаправлять весь трафик от андроид клиентов на сервер.
Для примения настроек запускаем `
dnsmasq_reconfig.sh` - более подробно описано в разделе "Обновление конфигурации".
Настройки tor
Частный диапазон адресов из которых будут назначаться IP для серверов к которым мы будем ходить через tor -
VirtualAddrNetworkСписок доменов которые мы будем резолвить через tor и которые будут иметь адреса из нашего частного диапазона (см.
VirtualAddrNetwork) - AutomapHostsSuffixes - настраивается скриптом
dnsmasq_reconfig.sh и сохраняется в файл /etc/tor/hosts_suffixes.cfg.
DoH
Примечание: я немного изменил способ запуска dnscrypt-proxy потому что мне показалось, что он не работает. В настройках по умолчанию он запускается через systemd.socket - то есть порт слушает systemd и запускает dnscrypt-proxy когда нужно, а я его запускаю напрямую. Не думаю что это нужно. Для смены порта в конфигурации по умолчанию - когда dnscrypt активируется через systemd.socket надо выполнить `systemctl edit dnscrypt-proxy.socket` и установить
```
ListenStream=127.0.0.1:9153
ListenDatagram=127.0.0.1:9153
```
Обновление конфигурации
Запускаем скрипт
dnsmasq_reconfig.sh, который сгеренрирует файлы настройки для dnsmasq (/etc/dnsmasq.d/ lan_hosts.cfg.i, resolv.conf.i), tor (/etc/tor/hosts_suffixes.cfg) и
все перезапустит для обновления конфигурации.
Для сброса DNS кэша:
На клиентском линуксе с systemd-resolve запускаем `sudo systemd-resolve --flush-caches`
На клиенте с windows запускаем `ipconfig /flushdns` в командной строке с правами администратора.
В google chrome открываем страничку `chrome://net-internals/#dns`, сбрасываем кэш браузера.
Плач Ярославны
Ну и напоследок напишу почему всё это оказалось ненужным
во-первых в какой-то момент МГТС отобрала настоящий IP и посадила всех за NAT. Почему-то в этот момент отвалился корпоративный VPN и в службе поддержки порекомендовали подключить выделенный IP
во-вторых после подключения выделенного IP перестал работать IPv6. Служба поддержки сообщила, что МГТС в принципе никогда и не поддерживала IPv6. Ну то есть он какбы работает, но его работу не гарантируют. На форумах есть объяснение на эту тему - типа выделяют статический IP, но IPv6 статический выделить не могут и чтобы никого не смущать при подключении статического IP тупо обрубают v6.
в-третьих тех поддержка МГТС ужасна. Повысили тариф на 100 рубей. Сначала у меня был роутер sercomm rv6699 - вроде все более-менее работало. И это был не самый плохой вариант - там был доступ к iptables. Говорят его даже можно перепрошить. Был косяк - к внешнему IP адресу нельзя было достучаться из локальной сети по http и https - но это решалось удалениеми 2 правил iptables. Но потом я решил назначить фиксированный канал сети WiFi 5G. Канал не назначился - начал прыгать, я обратился в техподдержку и мне заменили роутер на ZTE ZXHN F680. И это оказалось полным концом. Он не пробрасывал DHCP пакеты из локальной сети в WiFi. Мою схему я использовать уже не мог. Техподдержкой был послан с заключением "в конфигурации по умолчанию странички грузятся, все остальное не наши проблемы". Думал может попробую использовать DNS от роутера, но там совсем шлак. Максимум можно настроить - 10 статических адресов в локальной сети. Статические и динамические адреса должны быть в одном диапазоне.
в-четрвертых у МГТС есть полный доступ к вашему роутеру. А иметь третье лицо, а вернее даже целую компанию в своей локальной сети - это как-то даже негигиенично. Ну то есть ты как бы перед ними голый. И они тебе такие - чувак - не смущайся, мы не смотрим.
Вывод - можно и МГТС, но отключать WiFi и переводить роутер в режим моста (не факт, что это можно сделать, не факт, что это не слетит после принудидтельного обновления, не факт, что это не запретят).
Говорят, что роутер Sercomm RV6699 v4
можно перепрошить. Хотел попробовать, но не могу - у меня этого роутера больше нет - мне его заменили на ZTE ZXHN F680.
Комментариев нет:
Отправить комментарий