Думаю, всем хорошо знакомы последствия бездумного и агрессивного натягивания поводка в сфере доступа к информации (естественно, в праведном порыве защитить спокойствие граждан), помноженного на привычку "стоять по стойке" и/или непрофессионализм отечественных операторов. До определённого момента, как и многих, меня выручал TOR-браузер, хотя порой скорость работы этой сети вызывала приступы ностальгической грусти по временам диалапа на моей старенькой релейной АТC (гори в аду, donpac). К тому же это решение имело крайне сомнительное удобство использования локально, и ещё меньшее - за пределами ПК. А хотелось получить комплексное и "прозрачное" решение для всей домашней сети, обрабатывающее только необходимые направления и не затрагивающее остальной трафик. Ну что ж, попробуем..
На всякий случай, если не понятно из названия статьи: описываемое решение подразумевает наличие настроенного и работающего VPN-интерфейса в роутере с прошивкой OpenWRT!
В ходе постановки и формализации задачи было сформулировано три тезиса:
Второй пункт был успешно реализован на базе крайне приятного по цене VPS. За скромный 1€ в месяц я получил 1 ядро, 1ГБ памяти, 20ГБ SSD-хранилища, гигабитный линк со статическим публичным IPv4 (лимит 2TB в месяц) и полную свободу действий. В итоге я преобрёл не только полезный и интересный опыт, но и собственный мультипротокольный VPN-сервер, WEB-сервер для своих скриптовых поделок, и сервер-маршрутизатор для популярной win-утилиты удалённого администрирования. Покупка/настройка всего этого великолепия может стать темой для отдельной статьи, т.к. для меня это было настоящее приключение, особенно с учётом моих крайне ограниченных познаний в *nix-системах :) Если тема интересна - пишите, попробую собрать весь процесс в подобие инструкции.
Третий пункт, собственно, и есть тема моего сегодняшнего графоманского приступа.
Поиск привёл меня к этой статье, из которой я почерпнул бОльшую часть необходимой теории. Дальнейшее гугление выдало ещё этот проект, из которого с минимальными изменениями был позаимствован AWK-парсер списка узлов, а так же некоторые концептуальные моменты в компоновке будущего скрипта. Далее пришло осознание, что я хочу получить максимально простой в установке и обслуживании продукт, состоящий из минимального числа элементов. Ну а затем - вспышка креатива, куча новой полезной (и не очень) информации, несколько итераций полной (реально, почти 100%-ой) переработки концепции и, наконец, вожделенный результат!
Хотя в итоге моё решение довольно далеко ушло от имеющихся примеров, технические особенности реализации описывать здесь я не буду, т.к. для человека "в теме" все ключевые моменты вполне доступно описаны по указанным выше ссылкам, а для остальных - просто незачем. Для особо интересующихся я постарался оставлять в скрипте комментарии, позволяющие понять его структурную логику. Ну а вообще, если на вашем домашнем роутере установлен OpenWRT, значит вам вполне хватит имеющихся знаний для использования моего решения и без понимания тонкостей его работы :) Далее я перечислю и опишу только базовые моменты, итак..
Особенности:
В дальнейшем статья будет дополнятся по необходимости (если это вообще окажется кому-то интересным и будут возникать вопросы). Сам скрипт, вероятнее всего, переедет на github. Ну а пока, выкладываю по-старинке :)
СКАЧАТЬ
ОБСУДИТЬ В TELEGRAM
ПОКОРМИТЬ КАПИБАРУ :)
На всякий случай, если не понятно из названия статьи: описываемое решение подразумевает наличие настроенного и работающего VPN-интерфейса в роутере с прошивкой OpenWRT!
В ходе постановки и формализации задачи было сформулировано три тезиса:
- для организации прозрачного доступа всех устройств домашней сети, необходима гибкая и хорошо документированная платформа в качестве маршрутизатора;
- "выходная точка" может быть только платной, т.к. никакие публичные VPN и прокси не обеспечивают должный уровень скорости и надёжности;
- разработать собственное решение "с нуля" я вряд ли смогу ввиду практически нулевого опыта в вопросах маршрутизации на *nix, а значит предстоит найти похожие проекты и отталкиваться от них.
Второй пункт был успешно реализован на базе крайне приятного по цене VPS. За скромный 1€ в месяц я получил 1 ядро, 1ГБ памяти, 20ГБ SSD-хранилища, гигабитный линк со статическим публичным IPv4 (лимит 2TB в месяц) и полную свободу действий. В итоге я преобрёл не только полезный и интересный опыт, но и собственный мультипротокольный VPN-сервер, WEB-сервер для своих скриптовых поделок, и сервер-маршрутизатор для популярной win-утилиты удалённого администрирования. Покупка/настройка всего этого великолепия может стать темой для отдельной статьи, т.к. для меня это было настоящее приключение, особенно с учётом моих крайне ограниченных познаний в *nix-системах :) Если тема интересна - пишите, попробую собрать весь процесс в подобие инструкции.
Третий пункт, собственно, и есть тема моего сегодняшнего графоманского приступа.
Поиск привёл меня к этой статье, из которой я почерпнул бОльшую часть необходимой теории. Дальнейшее гугление выдало ещё этот проект, из которого с минимальными изменениями был позаимствован AWK-парсер списка узлов, а так же некоторые концептуальные моменты в компоновке будущего скрипта. Далее пришло осознание, что я хочу получить максимально простой в установке и обслуживании продукт, состоящий из минимального числа элементов. Ну а затем - вспышка креатива, куча новой полезной (и не очень) информации, несколько итераций полной (реально, почти 100%-ой) переработки концепции и, наконец, вожделенный результат!
Хотя в итоге моё решение довольно далеко ушло от имеющихся примеров, технические особенности реализации описывать здесь я не буду, т.к. для человека "в теме" все ключевые моменты вполне доступно описаны по указанным выше ссылкам, а для остальных - просто незачем. Для особо интересующихся я постарался оставлять в скрипте комментарии, позволяющие понять его структурную логику. Ну а вообще, если на вашем домашнем роутере установлен OpenWRT, значит вам вполне хватит имеющихся знаний для использования моего решения и без понимания тонкостей его работы :) Далее я перечислю и опишу только базовые моменты, итак..
Особенности:
- все настройки с подробным описанием находятся в самом начале скрипта (раздел "Настройки пользователя"). Наиболее важный параметр, требующий указания - имя VPN-интерфейса. Это именно то имя, которое вводится при его создании в интерфейсе роутера (т.е. без автоматического протокольного суффикса), например в моём случае - "vpn" :)
- скрипт все активно обновляемые данные (списки) скачивает/пересоздаёт при загрузке роутера и/или по расписанию автоматически, и хранит их во временной памяти (чтобы не "запиливать" флешку);
- во время инициализации выполняется автоматическая установка требуемых утилит (awk, ipset, wget, idn, dnsmasq-full), учитывайте необходимое свободное место.
- автоматическое, в т.ч. по расписанию, создание оптимизированного (без дубликатов, сгруппированного по указанным параметрам) списка узлов по данным antizapret.info;
- обработка пользовательского списка узлов;
- перенаправление трафика к узлам из списка в VPN-интерфейс;
- перенеправление DNS-запросов имён из списка на альтернативный DNS-сервер через общий канал, либо перенаправление всего DNS-трафика на альтернативный DNS-сервер через VPN-интерфейс (обход перехвата и подмены запросов провайдером).
- убедиться, что в роутере установлен (если нет - установить) пакет iptables-mod-conntrack-extra;
- скопировать файл скрипта любым способом в хранилище роутера, в общем случае - это папка "/etc". Для аккуратности можно (но не обязательно) создать подпапку;
- запустить скрипт с параметром "install" и дождаться завершения установки/обновления. Кстати, можно не заморачиваться с правами файла, проще сразу выполнить "sh /путь_к_скрипту/имя_скрипта install";
- при перемещении, переименовании или изменении настроек скрипта - необходимо выполнить его повторную установку.
В дальнейшем статья будет дополнятся по необходимости (если это вообще окажется кому-то интересным и будут возникать вопросы). Сам скрипт, вероятнее всего, переедет на github. Ну а пока, выкладываю по-старинке :)
ОБНОВЛЕНИЯ:
26/10/18
- реализована корректная работа скрипта при его установке с относительным путём.
21/06/19
- реализовано корректное определение имени виртуального устройства для VPN-интерфейсов без суффикса в названии;
- принудительно отключена проверка сертификата при скачивании списка блокировок;
- в шапку скрипта добавлено упоминание о необходимости модуля iptables-mod-conntrack-extra (оказывается, в сборках по умолчанию его нет).
СКАЧАТЬ
ОБСУДИТЬ В TELEGRAM
ПОКОРМИТЬ КАПИБАРУ :)