-
Notifications
You must be signed in to change notification settings - Fork 59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Нет нужного VPN/WireGuard #183
Comments
нет, подобного рода информацию добавлять не буду, так как не всем это нужно в принципе. То, что предлагаете Вы не универсальный выход, только под конкретно Ваш случай - это только затянет время сканирования, при этом большая часть пользователей с этим проблем не испытывает. Как вариант это пересканирование несколько раз до победного результата, либо предложите более стабильный и универсальный вариант кода. |
Согласен, мой код можно было написать гораздо лучше:
Пока отлаживал, пособирал статистику, сколько требовалось дополнительного ожидания. Первые две сети не заходили в цикл (не требовали лишних секунд; что не удивительно, ведь отработке их хуков достаётся больше времени), для Amnezia WG: 2 секунды, 7, 3, 2, 4, 1. Ну т.е. ситуация реально случайная, и такому адаптивному варианту там самое место. |
Спасибо, внес изменения по Вашему варианту кода в 1.1.9b6 |
Обновился до beta6, сейчас все сети находит и даёт выбрать, спасибо! |
Из-за проблем с WebRTC у ss-redir решил перейти на WireGuard. И не смог на первом же шаге — нужной сети в списке выбора нет (встречал схожие истории и в Телеграмме). У другого рабочего VPN в списке нет описания. Вызов
kvas vpn rescan
в 1 случае из 7 может лишь добавить описание/имя подключения. Переустановка с нуля вопрос тоже не решила.Чтобы сэкономить время, сам поисследовал вопрос. Выдернул из кода
update_interface_name_list
и все зависимые функции. Но его выполнение шло как в чёрной коробочке, никаких выводов/прогрессбаров в процессе. Поэтому докинул вывод о каждом шаге долгом или важном: о выключении сетевого подключения; включении; какое описание/имя пытаемся добавить; плюс передsed
добавил проверку, а есть ли вообще интерфейс в/opt/etc/inface_equals
.Соответственно, вопрос 1 — А можно ли добавить какой-то такой же механизм в релиз (вывод на картинке ниже, он пополняется в процессе)? Во-первых, это избавит от необходимости такого жёсткого предупреждения, пользователь будет видеть прогресс. Во-вторых, будет понятно, что происходит, и если какое падение (или невхождение, как у меня), то меньше будет сообщений «не работает, но не понятно что». При этом я понимаю, что некоторые функции переиспользуются и вывод там не нужен, надо будет заводить дублёры типа

reset_connection_silent
илиreset_connection_with_stdout
.Дык вот, запуск этого файла полностью повторяет проблему
kvas vpn rescan
на моих KN-1011 и Netac U116. Последней сети нет, предпоследняя чаще всего без имени. В цикле проверяются всегда 3 правильные сети. Если в коде цикл запускать дважды, отдельно для перезапуска коннектов, отдельно для добавления описания/имени, то проблема отсутствующего имени у предпоследнего уходит:По поводу отсутствия сети WireGuard, какие-то проблемы у роутера с многопоточностью/конкурентностью. Сейчас в коде КВАСа после отключения сетевого интерфейса sleep 3, после включения sleep 1. Увеличение последнего sleep до 4 почти всегда решает проблему, подключение Ваергварда успевает попадать в /opt/etc/inface_equals. Но зачем нам увеличивать на 3–4 секунды для каждого подключения, если достаточно подождать отработки хука лишь после последнего? Тем более, на прошлом шаге цикл разделили на 2; добавим sleep между, код становится:
Итого, вопрос 2: можете добавить такое же изменение в код, чтобы у меня заработало? Фактически, в функции
update_interface_name_list
вopt/bin/libs
запускать циклfor inface_cli in ${inface_list}; do
дважды: один раз дляreset_connection "${inface_cli}" "${delay}"
, второй для добавления имени/описания. Со слипом 5 между ними (при 4 не успевает).UPD Во втором цикле перед sed крайне желательно делать grep для проверки, что хук этот интерфейс успел добавить. У меня в коде только вывод в консоль, но в идеале при неудаче имеет смысл писать в лог сообщение типа «Получить имя сетевого интерфейса для Wireguard0 не удалось.».
UPD2 Ещё подумалось, что sleep 5 между циклами кому-то может быть много, а кому-то мало. Правильнее там организовать цикл с проверкой grep каждые 2 секунды. Если нашли, цикл прерывается и идёт дальше к sed. Если нет за 5–8 шагов (10–16 секунд), то выводим об этом сообщение и записываем в лог ошибок. Чтобы пользователя не пугал такой зависон, можно выводить по точечке в каждой итерации, станет что-то в духе
Ожидание отработки последнего хука......завершено.
The text was updated successfully, but these errors were encountered: