zako Posted April 26 Share Posted April 26 Подскажите, пожалуйста, где я ошибаюсь. Уже весь мозг сломал себе. Есть два рабочих подключения vpn wireguard. Настроен ipset-dns по методу из первого. Все прекрасно работает. Пытаюсь добавить второе подключение (нужно для одного из приложений) Последовательность действий. 1. Разархивирую скаченный архив 2. Вношу свои данные в файл myset.conf 3. Все 5 файлов, которые были в архиве, переношу в роутер - в папку opt/etc 4. В ssh терминале вхожу в данную папку (cd /opt/etc) и пробую запустить скрипт makefile. Пробую команды - make -make start -makefile start И...ничего не происходит. Или я на каком-то этапе что-то не так делаю или я уже даже не знаю. Огромная просьба помочь, кто знает. Заранее спасибо! Quote Link to comment Share on other sites More sharing options...
Alex T Posted May 5 Share Posted May 5 В 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 1 Quote Link to comment Share on other sites More sharing options...
zako Posted May 6 Share Posted May 6 @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 Quote Link to comment Share on other sites More sharing options...
Alex T Posted May 6 Share Posted May 6 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) 1 Quote Link to comment Share on other sites More sharing options...
zako Posted May 6 Share Posted May 6 @Alex T огромное Вам спасибо! Все получилось! Quote Link to comment Share on other sites More sharing options...
Denis P Posted May 27 Share Posted May 27 (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 May 27 by Denis P 2 1 Quote Link to comment Share on other sites More sharing options...
Drafted Posted May 27 Share Posted May 27 (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 May 27 by Drafted 1 Quote Link to comment Share on other sites More sharing options...
Fantasque Posted June 5 Share Posted June 5 Добрый день. Установил 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 Что я сделал не так? Куда посмотреть? Что проверить? В маршрутах сейчас пусто, свои кастомные удалил. Quote Link to comment Share on other sites More sharing options...
Андрей Волосков Posted June 5 Share Posted June 5 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 Quote Link to comment Share on other sites More sharing options...
Fantasque Posted June 5 Share Posted June 5 30 minutes ago, Андрей Волосков said: НУ имя интерфейса можно один раз посмотреть IP-адрес, у меня интерфейс WG отображается как nwg1 Да, прошу прощения. Вводил команды не в той консоли. Нашел имя интерфейса - nwg0, прописал в конфиге. Рестартанул - /opt/etc/init.d/S52ipset-dns restart, перезагрузил роутер. Чудо не произошло, в логах все также ошибки: Quote Link to comment Share on other sites More sharing options...
Андрей Волосков Posted June 5 Share Posted June 5 7 часов назад, Fantasque сказал: IPV6 отключите Quote Link to comment Share on other sites More sharing options...
Fantasque Posted June 5 Share Posted June 5 51 minutes ago, Андрей Волосков said: IPV6 отключите Отключил, даже удалил как компонент, ошибки ушли, но функционал ipset-dns так и не заработал. Что еще можно проверить? Quote Link to comment Share on other sites More sharing options...
Андрей Волосков Posted June 5 Share Posted June 5 3 минуты назад, Fantasque сказал: Я делал по этой инструкции, которая на первой странице у меня работала криво Quote Link to comment Share on other sites More sharing options...
Ape Posted June 5 Share Posted June 5 @Drafted через UI'ку адреса не удалить. Только через терминал ipset редактировать? Quote Link to comment Share on other sites More sharing options...
Андрей Волосков Posted June 5 Share Posted June 5 1 час назад, Ape сказал: @Drafted через UI'ку адреса не удалить. Только через терминал ipset редактировать? Удаляйте, кто Вам мешает, там есть значок удаления... и редактирования Quote Link to comment Share on other sites More sharing options...
Ape Posted June 6 Share Posted June 6 19 часов назад, Андрей Волосков сказал: Удаляйте, кто Вам мешает, там есть значок удаления... и редактирования В UI он то удаляется, но по факту маршрут через VPN остается висеть 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.