Jump to content

ipset-dns для выборочного роутинга


Recommended Posts

Подскажите, пожалуйста, где я ошибаюсь. Уже весь мозг сломал себе. Есть два рабочих подключения vpn wireguard. Настроен ipset-dns по методу из первого. Все прекрасно работает. Пытаюсь добавить второе подключение (нужно для одного из приложений)

Последовательность действий.

 1. Разархивирую скаченный архив

2. Вношу свои данные в файл myset.conf

3. Все 5 файлов, которые были в архиве, переношу в роутер - в папку opt/etc

4. В ssh терминале вхожу в данную папку (cd /opt/etc) и пробую запустить скрипт makefile.

Пробую команды

- make

-make start

-makefile start

 И...ничего  не происходит. Или я на каком-то этапе что-то не так делаю или я уже даже не знаю. Огромная просьба помочь, кто знает. Заранее спасибо!

Link to comment
Share on other sites

  • 2 weeks later...
В 26.04.2024 в 15:36, zako сказал:

Подскажите, пожалуйста, алгоритм действий. Куда нужно поместить эти файлы, нужно ли их распаковывать и как запустить Makefile. 

Там просто набор дубликатов скриптов исходного решения с чуть подправленными именами. Если очень хочется, можно просто положить рядом с оригинальными. 
Как мне кажется, не оптимальный вариант, проще прописать несколько вариантов ВПН сразу в исходные скрипты и запускать по копии ipset-dns на своём порту для каждого.

На коленке набросал для маршрутов через мои WG и ss-redir, вроде работает, но прошу отнестись с осторожностью:
 

Скрытый текст

тупо задваиваем конфиг  

cat /opt/etc/bypass.conf

DNS_1=1.1.1.1
SET_NAME_1=bypass_1
VPN_NAME_1=nwg0
VPN_SUBNET_1=172.16.0.2/24
DNS_2=8.8.8.8
SET_NAME_2=bypass_2
VPN_NAME_2=br0
VPN_OUTPORT_2=1082

поднимаем два экземпляра ipset-dns, каждый по своему ipset 

cat /opt/etc/init.d/S52ipset-dns

#!/bin/sh

PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

. /opt/etc/bypass.conf

if [ "$1" = "start" ]; then
    ipset create $SET_NAME_1 hash:ip timeout 86400
    ipset add $SET_NAME_1 $DNS_1
    ip rule add fwmark 1001 table 1001
    ipset-dns $SET_NAME_1 $SET_NAME_1 0.0.0.0:5353 $DNS_1
#
    ipset create $SET_NAME_2 hash:ip timeout 86400
    ipset add $SET_NAME_2 $DNS_2
    ip rule add fwmark 1002 table 1002
    ipset-dns $SET_NAME_2 $SET_NAME_2 0.0.0.0:5454 $DNS_2
fi

Добавляем маршруты при переподнятии интерфейса. На самом деле маршруты для ss-redir в этом примере не будут пересоздаваться, т.к. это прокси, а не интерфейс, и это надо привязывать или к процессу или к факту соединения, но для примера сойдёт, т.к. маршруты добавятся при старте роутера. 

 cat /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh

#!/bin/sh

. /opt/etc/bypass.conf

[ "$1" == "hook" ] || exit 0
[ "${connected}-${link}-${up}" == "yes-up-up" ] || exit 0
# do not need route to ss, usinng proxy instead
[ "$system_name" == "br0" ] && exit 0

if [ "$system_name" == "$VPN_NAME_1" ] &&
   [ -n "$(ipset --quiet list $SET_NAME_1)" ] &&
   [ -z "$(ip route list table 1001)" ]; then
    ip route add default dev $system_name table 1001
fi

if [ "$system_name" == "$VPN_NAME_2" ] &&
   [ -n "$(ipset --quiet list $SET_NAME_2)" ] &&
   [ -z "$(ip route list table 1002)" ]; then
    ip route add default dev $system_name table 1002
fi

и создаём правила, если их нет

cat /opt/etc/ndm/netfilter.d/010-bypass-netfilter.sh

#!/bin/sh

. /opt/etc/bypass.conf

[ "$type" == "ip6tables" ] && exit
[ "$table" != "mangle" ] && exit

if [ -n "$(ip link list | grep $VPN_NAME_1)" ] &&
   [ -n "$(ipset --quiet list $SET_NAME_1)" ] &&
   [ -z "$(iptables-save | grep  $SET_NAME_1)" ]; then
     iptables -w -t mangle -A PREROUTING ! -s $VPN_SUBNET_1 -m conntrack --ctstate NEW -m set --match-set $SET_NAME_1 dst -j CONNMARK --set-mark 1001
     iptables -w -t mangle -A PREROUTING ! -s $VPN_SUBNET_1 -m set --match-set $SET_NAME_1 dst -j CONNMARK --restore-mark
fi
# Shadowsocks
if [ -n "$(ipset --quiet list $SET_NAME_2)" ] &&
   [ -z "$(iptables-save | grep  $SET_NAME_2)" ]; then
     iptables -I PREROUTING -w -t nat -i $VPN_NAME_2 -p tcp -m set --match-set $SET_NAME_2 dst -j REDIRECT --to-port $VPN_OUTPORT_2
     iptables -I PREROUTING -w -t nat -i $VPN_NAME_2 -p udp -m set --match-set $SET_NAME_2 dst -j REDIRECT --to-port $VPN_OUTPORT_2
fi


 

  • Thanks 1
Link to comment
Share on other sites

@Alex T Спасибо! Вечером буду пробовать настроить. Уточню еще такой момент.

А я правильно понимаю, что если у меня два подключения WG, то нужно по аналогии поменять так:

1) В bypass.conf:

22 часа назад, Alex T сказал:
VPN_OUTPORT_2=1082

Тут вместо этой строки вставляю свои данные 2го подключения: 

VPN_SUBNET_2=x.x.x.x/x

2) А в 010-bypass-netfilter.sh

22 часа назад, Alex T сказал:
# Shadowsocks
if [ -n "$(ipset --quiet list $SET_NAME_2)" ] &&
   [ -z "$(iptables-save | grep  $SET_NAME_2)" ]; then
     iptables -I PREROUTING -w -t nat -i $VPN_NAME_2 -p tcp -m set --match-set $SET_NAME_2 dst -j REDIRECT --to-port $VPN_OUTPORT_2
     iptables -I PREROUTING -w -t nat -i $VPN_NAME_2 -p udp -m set --match-set $SET_NAME_2 dst -j REDIRECT --to-port $VPN_OUTPORT_2
fi

 

Нужно будет немного исправить так (добавить еще строку [ -n "$(ip link list | grep $VPN_NAME_2)" ] &&) ?

if [ -n "$(ip link list | grep $VPN_NAME_2)" ] &&
   [ -n "$(ipset --quiet list $SET_NAME_2)" ] &&
   [ -z "$(iptables-save | grep  $SET_NAME_2)" ]; then
     iptables -I PREROUTING -w -t nat -i $VPN_NAME_2 -p tcp -m set --match-set $SET_NAME_2 dst -j REDIRECT --to-port $VPN_OUTPORT_2
     iptables -I PREROUTING -w -t nat -i $VPN_NAME_2 -p udp -m set --match-set $SET_NAME_2 dst -j REDIRECT --to-port $VPN_OUTPORT_2
fi

 

Link to comment
Share on other sites

5 минут назад, zako сказал:

то нужно по аналогии поменять так

1. Да.

2.Проще даже скопировать блок для первого  vpn и подправить _1 на _2 в переменных, и номер таблицы.

 Если уж править пример, то гораздо важнее поправить создаваемые правила iptables, в случае shadowsocks там идёт не пометка пакетов, а переадресация их на порт прокси. А для WG нужно будет --set-mark 1002. (ну или ваша таблица)
 

Скрытый текст

[ -n "$(ip link list | grep $VPN_NAME_1)" ] && в данном случае, одно из условий, выполнение которого требуется, чтобы добавить правила, а именно - что в списке интерфейсов вообще есть подстрока, которую мы обозначили переменной $VPN_NAME_1 (ну или _2)

[ -n - вот это вот, проверка на то, что команда вернула непустой ответ

[ -z  - поверка на пустой

Все три условия просто уменьшают шанс лишнего добавления или задвоения правил. Чтобы скрипт не тратил время на попытки добавить правила на несуществующий VPN и не сыпал ошибками в логи. 

Самое важное условие здесь [ -z "$(iptables-save | grep  $SET_NAME_2)" ] - оно разрешает добавить правила, только если ЕЩЁ нет правил работающих с нашим $SET_NAME_2

При этом, как часто бывает в  "наколеночных" скриптах, такое условие, может мешать, если уже существуют правила не укладывающиеся в логику скрипта. Или есть наборы, имена которых входят друг в друга(например set_1 и set_12)

 

  • Thanks 1
Link to comment
Share on other sites

  • 3 weeks later...
Posted (edited)
В 08.04.2024 в 21:14, Drafted сказал:
port=5353

советую перенести на другой порт dnsmasq

этот совет касается и пользователей ipset-dns

потому что на этом порту живет

~ # netstat -nlpu | grep :5353
udp    0    0 0.0.0.0:5353      0.0.0.0:*       658/avahi-daemon

если используется smb и/или mdns
Edited by Denis P
  • Thanks 2
  • Upvote 1
Link to comment
Share on other sites

Posted (edited)
1 час назад, Denis P сказал:

советую перенести на другой порт dnsmasq

этот совет касается и пользователей ipset-dns

потому что на этом порту живет

~ # netstat -nlpu | grep :5353
udp    0    0 0.0.0.0:5353      0.0.0.0:*       658/avahi-daemon

если используется smb и/или mdns

Большое спасибо за подсказку! Теперь понятно откуда ноги Race Condition растут в обоих решениях при старте. 

Обновил инструкцию с решением через dnsmasq.

Edited by Drafted
  • Thanks 1
Link to comment
Share on other sites

  • 2 weeks later...

Добрый день. Установил opkg на локальное хранилище по инструкции - https://help.keenetic.com/hc/ru/articles/360021888880-Установка-OPKG-Entware-на-встроенную-память-роутера

Установил ipset-dns, по инструкции из данного топика, но почему-то все равно не работает.

Добавленные адреса в Сетевые правила → Интернет фильтры → Настройка DNS не резолвятся совсем. В логе постоянные ошибки : [0659] failed to connect to server [6] 2a02:6b8::feed:ff#1253: network unreachable.

Единственное, что пошло не так, это нахождение имени интерфейса VPN, в консоли нашел вот это описание интерфейса:
index: 0
interface-name: Wireguard0
type: Wireguard
description: Keenetic-WG

Соответственно в /opt/etc/bypass.conf прописал так:
DNS=1.1.1.1
SET_NAME=bypass
VPN_NAME=Wireguard0
VPN_SUBNET=10.8.0.0/24

Что я сделал не так? Куда посмотреть? Что проверить? В маршрутах сейчас пусто, свои кастомные удалил.

Link to comment
Share on other sites

3 часа назад, Fantasque сказал:

 

Соответственно в /opt/etc/bypass.conf прописал так:
DNS=1.1.1.1
SET_NAME=bypass
VPN_NAME=Wireguard0
VPN_SUBNET=10.8.0.0/24

НУ имя интерфейса можно посмотреть командой  ip addr, у меня WG интерфейс отображается как  nwg1

Link to comment
Share on other sites

30 minutes ago, Андрей Волосков said:

НУ имя интерфейса можно один раз посмотреть   IP-адрес, у меня интерфейс WG отображается как nwg1

Да, прошу прощения. Вводил команды не в той консоли.

Нашел имя интерфейса - nwg0, прописал в конфиге. Рестартанул - /opt/etc/init.d/S52ipset-dns restart, перезагрузил роутер. Чудо не произошло, в логах все также ошибки:
image.png.f491d4109aa3aa6943cb0e17bfac317c.png

Link to comment
Share on other sites

51 minutes ago, Андрей Волосков said:

IPV6 отключите

Отключил, даже удалил как компонент, ошибки ушли, но функционал ipset-dns так и не заработал. Что еще можно проверить?

Link to comment
Share on other sites

1 час назад, Ape сказал:

@Drafted через UI'ку адреса не удалить. Только через терминал ipset редактировать?

Удаляйте, кто Вам мешает, там есть значок удаления... и редактирования

Link to comment
Share on other sites

19 часов назад, Андрей Волосков сказал:

Удаляйте, кто Вам мешает, там есть значок удаления... и редактирования

В UI он то удаляется, но по факту маршрут через VPN остается висеть

  • Upvote 1
Link to comment
Share on other sites

  • 1 month later...

Так как "ndm/ifstatechanged.d (obsoleted since 4.0, kept only for backward compatibility)", то, думаю, лишь вопрос времени когда скрипты в этом хуке перестанут работать.

Теперь предлагается использовать "ndm/iflayerchanged.d (new and primary from 4.0)", соответственно скрипт
 010-bypass-table.sh можно перенести в /opt/etc/ndm/iflayerchanged.d внеся минимальные изменения:
 

#!/bin/sh

. /opt/etc/bypass.conf

[ "$1" == "hook" ] || exit 0
[ "$system_name" == "$VPN_NAME" ] || exit 0
[ ! -z "$(ipset --quiet list bypass)" ] || exit 0
[ "${layer}-${level}" == "link-running" ] || exit 0

if [ -z "$(ip route list table 1001)" ]; then
    ip route add default dev $system_name table 1001
fi

 

  • Thanks 5
  • Upvote 1
Link to comment
Share on other sites

Приветствую. Для текущей версии 4.2 beta 1 все остается актуальным из заглавного поста?
И версия пакета та же ipset-dns-keenetic_0.2-1_all или что-то изменилось - обновилось?

Link to comment
Share on other sites

19 часов назад, Keaf сказал:

Подскажите, как в конфиге прописать несколько DNS адресов?

Что значит несколько DNS адресов? Upstream DNS server? Или Вы хотите сделать отдельный резолвер с другой таблицей для заворачивания в другой тоннель?

Link to comment
Share on other sites

у меня во время установки это вылезло, это норм или что-то не так делаю?

Opkg::Manager: invalid initrc "/opt/etc/initrc": no such file or directory, trying /opt/etc/init.d/.


Авг 2 03:46:08
ndm
Event::Forwarder: unable to send "Event::Type::DbKey" to "Opkg::Manager" for 30 seconds.
Авг 2 03:46:08
ndm
Event::Forwarder: "Opkg task queue" (1493) backtrace:
Авг 2 03:46:08
ndm
Event::Forwarder: futex_wait_queue_me()+0xf0
Авг 2 03:46:08
ndm
Event::Forwarder: futex_wait()+0x154
Авг 2 03:46:08
ndm
Event::Forwarder: do_futex()+0x144
Авг 2 03:46:08
ndm
Event::Forwarder: SyS_futex()+0xf4
Авг 2 03:46:08
ndm
Event::Forwarder: syscall_common()+0x34
Авг 2 03:46:08
ndm
Event::Forwarder: <unknown>()+0x0
Авг 2 03:46:08
ndm
Event::Forwarder: __cp_end()+0x0
Авг 2 03:46:08
ndm
Event::Forwarder: __syscall_cp_c()+0x88
Авг 2 03:46:08
ndm
Event::Forwarder: __timedwait_cp()+0x1bc
Авг 2 03:46:08
ndm
Event::Forwarder: __pthread_cond_timedwait_time64()+0x144
Авг 2 03:46:08
ndm
Event::Forwarder: Condition::Wait(long) const+0x11c
Авг 2 03:46:08
ndm
Event::Forwarder: Io::Process::Wait(long, bool&, bool&)+0x208
Авг 2 03:46:08
ndm
Event::Forwarder: Opkg::(anonymous namespace)::Init_::Run()+0x1ed8
Авг 2 03:46:08
ndm
Event::Forwarder: Task::Thread::Run_()+0x208
Авг 2 03:46:08
ndm
Event::Forwarder: Task::Thread::Run()+0x38
Авг 2 03:46:08
ndm
Event::Forwarder: Thread::StartRoutine_(void*)+0x420
Авг 2 03:46:08
ndm
Event::Forwarder: start()+0x98
Авг 2 03:46:08
ndm
Event::Forwarder: __clone()+0x6c
Авг 2 03:46:15
ndm
Opkg::Manager: /tmp/mnt/4380c772-4fcc-4d7a-b7bb-ac769f010c9d initialized.
Авг 2 03:46:15
ndm
Opkg::Manager: invalid initrc "/opt/etc/initrc": no such file or directory, trying /opt/etc/init.d/.
Авг 2 03:46:15
installer
[1/5] Начало установки системы пакетов "Entware"...

 

Edited by Evil_Raven
Link to comment
Share on other sites

Захожу в "Профили DNS", прописываю pbs.twimg.com, но картинка по ссылке не открывается: https://pbs.twimg.com/media/GTmBD5-boAAASMU?format=jpg.

А вот если через маршрутизацию прописать 199.232.40.159, то всё работает. Большая часть сайтов открывается нормально, но с некоторыми возникают такие проблемы.

image.png.d73188b55fc0f1d5ecdcb5474db132e0.pngimage.png.b1be334ed740d0037a2240ed5a722b32.png

Edited by Evil_Raven
Link to comment
Share on other sites

В 08.04.2024 в 21:14, Drafted сказал:

Добавляем нужные хосты в разделе Интернет-фильтры -> Настройка DNS, указывая адрес сервера DNS: 192.168.1.1:5300

chrome_2024-05-27_13-48-07.png.22586109ce6e136473c6ce6ca1fa8b52.png

 

А как удалить этот роутинг без переустановки всего?
При удалении правила само правило из интерфейса удаляется, но трафик не перестает ходить через DNS 192.168.1.1:5300
Ребут также не помог 

Link to comment
Share on other sites

1 час назад, South_butovo сказал:

А как удалить этот роутинг без переустановки всего?
При удалении правила само правило из интерфейса удаляется, но трафик не перестает ходить через DNS 192.168.1.1:5300
Ребут также не помог 

Просто удаляете хост и полностью перезагружаете роутер.

1 час назад, South_butovo сказал:

Ребут также не помог

Значит где-то остался, либо другой домен резолвится на те же IP адреса.

Link to comment
Share on other sites

В 08.04.2024 в 21:14, Drafted сказал:

В него вставляем содержимое, отредактировав VPN_NAME и VPN_SUBNET (можно подсмотреть командой: ip addr):

VPN_NAME=nwg0
VPN_SUBNET=10.77.77.0/24

Столкнулся со сложностью.
Я использую ВПН по протоколу IKEv2 и он не светится в списках интерфейсов ip addr.
Это можно как-то обойти?

причем WG светится как nwg1

Edited by South_butovo
Link to comment
Share on other sites

В 08.04.2024 в 21:14, Drafted сказал:

Если кому интересно вот инструкция:

Сносим opkg и ставим заново на всякий случай. Я устанавливаю во внутреннюю память роутера. Все нужные пакеты занимают около 7мб.

После установки opkg заходим по SSH в Entware. Для этого в командной строке:

ssh root@192.168.1.1 -p 222

Устанавливаем пакеты:

opkg update && opkg install ipset iptables dnsmasq

Создаем файл конфигурации:

vi /opt/etc/bypass.conf

В него вставляем содержимое, отредактировав VPN_NAME и VPN_SUBNET (можно подсмотреть командой: ip addr):

VPN_NAME=nwg0
VPN_SUBNET=10.77.77.0/24

Даем права на запуск:

chmod +x /opt/etc/bypass.conf

Создаем скрипт запуска:

vi /opt/etc/init.d/S52ipset-bypass

В него вставляем содержимое:

#!/bin/sh

PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

. /opt/etc/bypass.conf

if [ "$1" = "start" ]; then
    ipset create bypass hash:ip
    ip rule add fwmark 1001 table 1001
fi

Даем права на запуск:

chmod +x /opt/etc/init.d/S52ipset-bypass

Создаем хук ifstatechanged.d:

vi /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh

В него вставляем содержимое:

#!/bin/sh

. /opt/etc/bypass.conf

[ "$1" == "hook" ] || exit 0
[ "$system_name" == "$VPN_NAME" ] || exit 0
[ ! -z "$(ipset --quiet list bypass)" ] || exit 0
[ "${connected}-${link}-${up}" == "yes-up-up" ] || exit 0

if [ -z "$(ip route list table 1001)" ]; then
    ip route add default dev $system_name table 1001
fi

Даем права на запуск:

chmod +x /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh

Создаем хук netfilter.d:

vi /opt/etc/ndm/netfilter.d/010-bypass-table.sh

В него вставляем содержимое:

#!/bin/sh

. /opt/etc/bypass.conf

[ "$type" == "ip6tables" ] && exit
[ "$table" != "mangle" ] && exit
[ -z "$(ip link list | grep $VPN_NAME)" ] && exit
[ -z "$(ipset --quiet list bypass)" ] && exit

if [ -z "$(iptables-save | grep bypass)" ]; then
     iptables -w -t mangle -A PREROUTING ! -s $VPN_SUBNET -m conntrack --ctstate NEW -m set --match-set bypass dst -j CONNMARK --set-mark 1001
     iptables -w -t mangle -A PREROUTING ! -s $VPN_SUBNET -m set --match-set bypass dst -j CONNMARK --restore-mark
fi

Даем права на запуск:

chmod +x /opt/etc/ndm/netfilter.d/010-bypass-table.sh

Правим конфиг dnsmasq.conf:

vi /opt/etc/dnsmasq.conf

В него вставляем новый конфиг, заменяя старый. Адрес в server можно поменять на предпочтительный DNS сервер, например 1.1.1.1 или 9.9.9.9.

user=nobody
pid-file=/var/run/opt-dnsmasq.pid
port=5300

min-port=4096
cache-size=1536

bogus-priv
no-negcache
no-resolv
no-poll
no-hosts
clear-on-reload

server=8.8.8.8
ipset=/#/bypass

Если вы используете прошивочный DoT или DoH, то можно указать его, чтобы DNS запросы к перенаправленным хостам также шифровались. Подсмотреть адреса и порты локальных резолверов можно командой cat /tmp/ndnproxymain.stat Все что с портами 405***  это DoH/DoT серверы кинетика. Выбираем любой. Адрес с портом указываем так:

server=127.0.0.1#40500

Готово! Перезапускаем роутер.

Добавляем нужные хосты в разделе Интернет-фильтры -> Настройка DNS, указывая адрес сервера DNS: 192.168.1.1:5300

chrome_2024-05-27_13-48-07.png.22586109ce6e136473c6ce6ca1fa8b52.png

Если @Александр Рыжов сделает из этого пакет, то будет вообще сказка)

Повторюсь - это решение, за счет встроенного кеширования dnsmasq, работает намного стабильнее и быстрее в плане резолвинга, чем при использовании ipset-dns.

Лучшая инструкция, завелось. Я бы еще добавил, почему то, что "#!/bin/sh" криво копируются в vi, пришлось дописывать руками, попутно изучая vi :) ) что нужно поставить ip роутера на 192.168.2.1 (я кинул новый роутер keenetic к роутеру по ethernet в квартире, которую арендую, чтобы на нем уже поднять эту приблуду) и добавить если хочешь включать youtube, то добавить googlevideo.com.

Link to comment
Share on other sites

Дайте направление куда еще мыслить, настроил все как в первом посту. Если прописываю статичный маршрут через впн, все работает, через домен отказывается, трафик так же идет через провайдера. Куда и что еще смотреть не знаю.

 image.png.0849cb8e0491cf65c277ba76544c02c7.png  image.png.159b4681fe2237d618a3367348a097e1.png

image.png.dc868b88cff00e51d69ba047049f8720.png

 

image.png.adefb016f8003c4b801a3914e91bb84b.png

Что то упускаю видимо но могу понять что. В системном журнале я должен видеть хоть что то? 

Заранее спасибо за любую помощь)

  • Upvote 1
Link to comment
Share on other sites

4 часа назад, Gorod_Besov сказал:

Что то упускаю видимо но могу понять что. В системном журнале я должен видеть хоть что то? 

Заранее спасибо за любую помощь

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

и  с учетом этого комента

так как первое решние у меня не работало, я заподозрил что провайдер перехватывает DNS каким то образом
и настроил через doh
у меня вышло так
server=127.0.0.1#40510

ps что бы снести opkg
image.thumb.png.32d68618d3df3c18812846b312a372ae.png

  • Thanks 1
Link to comment
Share on other sites

В 09.04.2024 в 01:14, Drafted сказал:

Если кому интересно вот инструкция:

Сносим opkg и ставим заново на всякий случай. Я устанавливаю во внутреннюю память роутера. Все нужные пакеты занимают около 7мб.

После установки opkg заходим по SSH в Entware. Для этого в командной строке:

ssh root@192.168.1.1 -p 222

Устанавливаем пакеты:

opkg update && opkg install ipset iptables dnsmasq

Создаем файл конфигурации:

vi /opt/etc/bypass.conf

В него вставляем содержимое, отредактировав VPN_NAME и VPN_SUBNET (можно подсмотреть командой: ip addr):

VPN_NAME=nwg0
VPN_SUBNET=10.77.77.0/24

Даем права на запуск:

chmod +x /opt/etc/bypass.conf

Создаем скрипт запуска:

vi /opt/etc/init.d/S52ipset-bypass

В него вставляем содержимое:

#!/bin/sh

PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

. /opt/etc/bypass.conf

if [ "$1" = "start" ]; then
    ipset create bypass hash:ip
    ip rule add fwmark 1001 table 1001
fi

Даем права на запуск:

chmod +x /opt/etc/init.d/S52ipset-bypass

Создаем хук ifstatechanged.d:

vi /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh

В него вставляем содержимое:

#!/bin/sh

. /opt/etc/bypass.conf

[ "$1" == "hook" ] || exit 0
[ "$system_name" == "$VPN_NAME" ] || exit 0
[ ! -z "$(ipset --quiet list bypass)" ] || exit 0
[ "${connected}-${link}-${up}" == "yes-up-up" ] || exit 0

if [ -z "$(ip route list table 1001)" ]; then
    ip route add default dev $system_name table 1001
fi

Даем права на запуск:

chmod +x /opt/etc/ndm/ifstatechanged.d/010-bypass-table.sh

Создаем хук netfilter.d:

vi /opt/etc/ndm/netfilter.d/010-bypass-table.sh

В него вставляем содержимое:

#!/bin/sh

. /opt/etc/bypass.conf

[ "$type" == "ip6tables" ] && exit
[ "$table" != "mangle" ] && exit
[ -z "$(ip link list | grep $VPN_NAME)" ] && exit
[ -z "$(ipset --quiet list bypass)" ] && exit

if [ -z "$(iptables-save | grep bypass)" ]; then
     iptables -w -t mangle -A PREROUTING ! -s $VPN_SUBNET -m conntrack --ctstate NEW -m set --match-set bypass dst -j CONNMARK --set-mark 1001
     iptables -w -t mangle -A PREROUTING ! -s $VPN_SUBNET -m set --match-set bypass dst -j CONNMARK --restore-mark
fi

Даем права на запуск:

chmod +x /opt/etc/ndm/netfilter.d/010-bypass-table.sh

Правим конфиг dnsmasq.conf:

vi /opt/etc/dnsmasq.conf

В него вставляем новый конфиг, заменяя старый. Адрес в server можно поменять на предпочтительный DNS сервер, например 1.1.1.1 или 9.9.9.9.

user=nobody
pid-file=/var/run/opt-dnsmasq.pid
port=5300

min-port=4096
cache-size=1536

bogus-priv
no-negcache
no-resolv
no-poll
no-hosts
clear-on-reload

server=8.8.8.8
ipset=/#/bypass

Если вы используете прошивочный DoT или DoH, то можно указать его, чтобы DNS запросы к перенаправленным хостам также шифровались. Подсмотреть адреса и порты локальных резолверов можно командой cat /tmp/ndnproxymain.stat Все что с портами 405***  это DoH/DoT серверы кинетика. Выбираем любой. Адрес с портом указываем так:

server=127.0.0.1#40500

Готово! Перезапускаем роутер.

Добавляем нужные хосты в разделе Интернет-фильтры -> Настройка DNS, указывая адрес сервера DNS: 192.168.1.1:5300

chrome_2024-05-27_13-48-07.png.22586109ce6e136473c6ce6ca1fa8b52.png

Если @Александр Рыжов сделает из этого пакет, то будет вообще сказка)

Повторюсь - это решение, за счет встроенного кеширования dnsmasq, работает намного стабильнее и быстрее в плане резолвинга, чем при использовании ipset-dns.

Пробовал ваш метод, но он почему то не работает, делал точно по инструкции на прошивке 3.7.4 .Запускал tracert сайтов что добавил, пишет "Не удается разрешить системное имя узла 2ip.ru". А вы на какой версии прошивке делали это? А вот способ от Александра Рыжова работает, правда не идеально, есть косяки, надо порт поменять 5353 на любой, а иначе после перезагрузки роутера не работает и надо вручную прописывать команду: 

/opt/etc/init.d/S52ipset-dns start

А еще заметил странность что сайты то открывает, то не открывает. Например, открыл сайт он моментально загрузился, через минуту снова открываешь, долго грузится, а может вообще долго висеть и соединение сбросится, потом нажимаешь F5 и снова быстро открылся. Dns разные подставлять пробовал и обычные и DOT и DOH думал в них дело. Использую wireguard с конфигом от cloudflare, может сервер поменять потом. Требуется доработка пакета программы. А вообще надеюсь что разрабы добавят в саму прошивку роутинг по доменам.

Update: Заново полностью переустановил entware и по 2 методу от пользователя Drafted с dnsmasq заработало, не знаю в чем причина была.

Edited by applick
заработал 2 метод
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...