DNSmasq для младших моделей Keenetic (у которых мало ROM и нет USB)

Для ЛЛ: Тут о роутерах Keenetic, Python и ChatGPT.

Как полноценно пользоваться VPN разделяя при помощи роутера трафик на тот, что должен идти напрямую и тот, что должен ходить через VPN туннель на основании доменного имени, т.е. адресе сайта, без необходимости постоянно лазить в админку и что-то там шаманить?

Можно воспользоваться готовыми решениями типа KVAS, xKeen, ADGh и т.п. или каким-нибудь облачным «Hosted Router». Но что если железо домашнего роутера подкачало, а открыв админку облачного роутера становится понятно, что ничего не понятно?

Так со мной и случилось. В моем распоряжении скромный роутер Keenetic Air, он хорош для своих задач, но у него на борту мало памяти и нет USB порта, из-за чего невозможно использование необходимых мне готовых решений на основе OPKG пакетов.

Но делать, что-то надо и мелькнула мысль - а почему бы не попробовать найти какое-то более-менее подходящее решение и подстроить его под себя?

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

Никогда не считал себя программистом, у меня есть лишь базовый опыт работы с командной строкой в Win и Unix системах, разве что когда-то давно я владел ZX Spectrum c его вариацией Basic...
С этим, безусловно «солидным» багажом я и решил попробовать.

Не обладая опытом программирования, пришлось обратиться за помощью к ChatGPT. Это был довольно занятный процесс, при всей мощи искусственного интеллекта, какой промт ему не напиши, он не выдаст результат на 100% соответствующий твоим ожиданиям и уж тем более готовое и полностью функционирующее решение, но тем не менее он помогает облегчить задачу тысячекратно.

Результатом такого совместного труда стал DNSmasq сервер на Python который выступая промежуточным звеном между конечным устройством (роутером или ПК) и публичным DNS сервером закидывает в роутер статические маршруты к указанным пользователем доменам, для перенаправления к ним траффика через VPN подключение.

Видео с демонстрацией:

Во избежание случайного возбуждения товарища майора для демонстрации выбран закрытый для российских IP-адресов ChatGPT, но какие домены добавлять в фильтр дело каждого ;)

Код доступен на GitHub.

Из основных проблем это низкая производительность и странная стабильность – может работать сутками, а может замереть через пару минут после запуска.

Скрипт скорее является «proof of concept» т.е. демонстрацией жизнеспособности задумки, работает на Windows и Unix в т.ч. на VPS.

Подытоживая. Думаю, что для непрограммиста получилось вполне неплохо ;)

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

Всем – Добра.