qzeleza / kvas

vpn и shadowsocks клиент для роутеров keenetic
Other
887 stars 52 forks source link

kvas crypt: доводки #222

Closed AltGrF13 closed 3 hours ago

AltGrF13 commented 1 week ago
  1. Включил, вызвал отключение kvas crypt off. Команда выполнялась "бесконечно", хотя и все замены в конфигах сделала.

  2. При kvas crypt on в dnsmasq.conf установлено server=127.0.0.1#9153. Т.е. все запросы пойдут туда. Это верно. Но в файле kvas.dnsmasq для каждого сервера указано

    ipset=/artifacts.elastic.co/kvas_ipset
    server=/artifacts.elastic.co/127.0.0.1#9153

    Обычно server для домена указывается, когда нужно изменить от общего на частное. Но тут они равны. Не нужно повторяться. Для каждого домена при kvas crypt on должен быть указан лишь ipset=/artifacts.elastic.co/kvas_ipset.

  3. При kvas crypt off в dnsmasq.conf установлено server=9.9.9.9. Т.е. все запросы пойдут туда. Это верно. Но в файле kvas.dnsmasq для каждого сервера указан лишь ipset=/artifacts.elastic.co/kvas_ipset. Т.е. запросы для списка пойдут открытым протоколом на 9.9.9.9; где их можно как банить, так и отслеживать. Запросы для списка всегда должны ходить шифрованно, в независимости от установки флага kvas crypt. Т.е. в этом режиме я как раз ожидал бы в файле

    ipset=/artifacts.elastic.co/kvas_ipset
    server=/artifacts.elastic.co/127.0.0.1#9153

    Именно в таком виде, в DNSCrypt; у них свой отдельный DNS, не совпадающий с общим, тут это уместно. Т.е. DNSCrypt должен всегда работать. В режиме on на все запросы, в режиме off обслуживать лишь защищённый список (на то он и защищённый).

  4. filter-rr=HTTPS тоже не плохо ложится на kvas crypt. Когда off, то смело можем фильтровать защиту DNS filter-rr=HTTPS. Когда on, то насильное откидывание ECH — плохая идея, лучше закомментировать #filter-rr=HTTPS.

qzeleza commented 1 week ago

Не совсем понятно, что Вы предлагаете сделать по пп. 1-4?

AltGrF13 commented 6 days ago

Начнём последовательно. Пункт 1 у Вас не воспроизводится? Если поделать команды kvas crypt off, kvas crypt on, kvas crypt off последовательно; то команда off выходит, бесконечно не висит?

2 и 3 — неправильно заполняется kvas.dnsmasq, нужно как бы "инвертировать" режимы

4 — добавить включение и отключение этого флага по аналогии с кучей других.

qzeleza commented 6 days ago
  1. В крайней бете - все штатно - зависаний нет 2-3. Совсем не понял суть изменений - поясните пожалуйста, что на что необходимо изменить?
  2. Пожалуйста, поясните конкретно, что на что заменить и при каких условиях?
AltGrF13 commented 6 days ago

kvas.dnsmasq

При kvas crypt on должен быть просто список с ipset:

ipset=/artifacts.elastic.co/kvas_ipset
ipset=/jetbrains.com/kvas_ipset
ipset=/www.soapui.org/kvas_ipset

Потому что весь трафик итак уже идёт через DNSCrypt.

При kvas crypt off должен быть список пар:

ipset=/artifacts.elastic.co/kvas_ipset
server=/artifacts.elastic.co/127.0.0.1#9153

Трафик человека пойдёт через незашифрованный канал, но защищённый список должен всегда ходить через DNSCrypt.

AltGrF13 commented 6 days ago

В крайней бете - все штатно - зависаний нет

У меня off не отрабатывает и периодически (если вызвать несколько раз по циклу включение-отключение на заполненном списке) полностью очищает файл /opt/etc/dnsmasq.d/kvas.dnsmasq. У Вас цикличный вызов (раза 2) с полным списком всегда корректно меняет его содержимое? Может имеет смысл всегда пересобирать этот файл с нуля (как после экспорта), а не sed'ить?

AltGrF13 commented 6 days ago

filter-rr=HTTPS в /opt/etc/dnsmasq.conf

При kvas crypt off включать

filter-rr=HTTPS

При kvas crypt on отключать

#filter-rr=HTTPS
qzeleza commented 6 days ago

включил все выше и пересобрал 1.1.9b9

AltGrF13 commented 6 days ago

Обновил. Со старта было нормально, но после импортов ситуация опять "зеркальная".

kvas crypt off

Делаю

kvas crypt off
kvas clear
kvas import /opt/tmp/unblock.txt

В файле /opt/etc/dnsmasq.d/kvas.dnsmasq

ipset=/artifacts.elastic.co/kvas_ipset
ipset=/jetbrains.com/kvas_ipset
ipset=/www.soapui.org/kvas_ipset

Хотя ожидается

ipset=/artifacts.elastic.co/kvas_ipset
server=/artifacts.elastic.co/127.0.0.1#9153
ipset=/jetbrains.com/kvas_ipset
server=/jetbrains.com/127.0.0.1#9153
ipset=/www.soapui.org/kvas_ipset
server=/www.soapui.org/127.0.0.1#9153

Ведь DNS доменов из защищённого списка всегда должны ходить через DNSCrypt.

kvas crypt on

Делаю

kvas crypt on
kvas clear
kvas import /opt/tmp/unblock.txt

В файле /opt/etc/dnsmasq.d/kvas.dnsmasq тоже не то. Ситуация в этот раз не с переключением режимов, а с импортом после них.

qzeleza commented 5 days ago

Попробуйте проверить состояние /opt/etc/dnsmasq.d/kvas.dnsmasq сразу после kvas crypt on и kvas crypt off. Все ли правильно добавляется, если нет, то поправлю, если да, то тогда нужно уже смотреть что не так сimport. Но это уже другая подзадача.

AltGrF13 commented 5 days ago

Да, давайте разделим, пока речь только о переключениях. Пункты 1 и 4 сделаны. Устанавливаю с нуля. Судя по kvas crypt шифрование включено. Файл /opt/etc/dnsmasq.d/kvas.dnsmasq правильный.

Делаю kvas crypt off. В файле

ipset=/2ip.ru/kvas_ipset
ipset=/ifconfig.me/kvas_ipset
ipset=/myip2.ru/kvas_ipset

секции server=/*/127.0.0.1#9153 по-прежнему нет.

Делаю ещё цикл включения-отключения. server=/*/127.0.0.1#9153 появляется, но теперь в шифрованном режиме перестаёт удаляться.

qzeleza commented 5 days ago

Нашел в коде ошибку - забыл указать в sed параметр -i чтобы в файле происходили изменения Сейчас поправлю

AltGrF13 commented 5 days ago

Установил с нуля. Судя по kvas crypt шифрование включено. Файл /opt/etc/dnsmasq.d/kvas.dnsmasq правильный. Делаю kvas crypt off, появляются секции server=/myip2.ru/127.0.0.1#9153, всё верно. Делаю kvas crypt on, секции server=/myip2.ru/127.0.0.1#9153 остались. Делаю ещё раз kvas crypt off, пошло задвоение секции сервер. Видимо, off отрабатывает верно, c on проблемы.

qzeleza commented 4 days ago

Обновил и перезалил 9 бету в канале, так как изменений почти нет - не стал писать об этом там. Перепроверил практически - при kvas crypt on секция стабильно удаляется

AltGrF13 commented 4 days ago

Установил. По умолчанию со старта kvas crypt подключен, но секция server= в /opt/etc/dnsmasq.d/kvas.dnsmasq есть. Отключаю kvas crypt off — задвоение. Включаю kvas crypt on — задвоение остаётся.

Если после этого почистить руками до

ipset=/2ip.ru/kvas_ipset
ipset=/ifconfig.me/kvas_ipset
ipset=/myip2.ru/kvas_ipset

и отключить, то сразу задвоенные строчки.

AltGrF13 commented 1 day ago

Установил. По умолчанию со старта kvas cryptподключен, cекции server= в /opt/etc/dnsmasq.d/kvas.dnsmasq нет. Всё хорошо.

Отключаю вызовом kvas crypt off — секция server= появилась, основные настройки переключились, снова всё хорошо.

Включаю kvas crypt on — секция server= осталась, не удалилась. При этом в этом режиме сделал импорт, и залилось всё верно, без server=. Импорт с отключенным крипт тоже работает верно, с секцией сервер.

Итого: есть проблема лишь при переходе из состояния kvas crypt off в kvas crypt on при заполненном списке, секция server= не удаляется.

qzeleza commented 18 hours ago
image

Не увидел проблем - на рисунке ситуация не подтверждается

AltGrF13 commented 13 hours ago

Я как раз описал, что импорт работает верно (что проверяете Вы). Не верным остаётся сам список после включения.

Как воспроизвести

Перескачиваю последнюю версию (106519 байт)

kvas uninstall full
reboot
opkg install /opt/tmp/kvas_1.1.9-beta_9_all.ipk | tee /opt/tmp/kvas_install.log
kvas setup | tee -a /opt/tmp/kvas_setup.log
cat /opt/etc/dnsmasq.d/kvas.dnsmasq
# верный вывод без server=
kvas crypt off
cat /opt/etc/dnsmasq.d/kvas.dnsmasq
# верный вывод с server=
kvas crypt on
cat /opt/etc/dnsmasq.d/kvas.dnsmasq
# не верный вывод:
ipset=/2ip.ru/kvas_ipset
server=/2ip.ru/127.0.0.1#9153
ipset=/ifconfig.me/kvas_ipset
server=/ifconfig.me/127.0.0.1#9153
ipset=/myip2.ru/kvas_ipset
server=/myip2.ru/127.0.0.1#9153

kvas add abc.com
cat /opt/etc/dnsmasq.d/kvas.dnsmasq
# верный вывод без server=

Может после включения (а может и отключения, для упрощения кода) просто вызывать пересборку /opt/etc/dnsmasq.d/kvas.dnsmasq? Не адаптировать файл руками, а вызывать единый метод перегенерации (раз он работает верно)? UPD Так и поступил, ситуация теперь отрабатывает корректно.