-
Notifications
You must be signed in to change notification settings - Fork 425
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
Fix UPnP: error 2 #2094
base: openssl
Are you sure you want to change the base?
Fix UPnP: error 2 #2094
Conversation
Как я понимаю, роутер выдаёт Not connected когда считает, что у него нету прямого подключения к Интернету. |
Что интересно, в Transmission порт пробрасывается всегда и там тоже используется miniupnc с проверкой только на UPNP_IGD_VALID_CONNECTED - https://github.com/transmission/transmission/blob/1e16912ae4a20ca338cfe89c72418cd37eac0102/libtransmission/port-forwarding-upnp.cc#L270 Я не разобрался, как у них это реализовано. Возможно ли такое решение? |
Наверно, с этого места стоит изучать: |
Пришлось собрать transmission-daemon и добавить в дебаг вывод после проверки UPNP_IGD_VALID_CONNECTED - там тоже всегда статус 2 и он не изменяется. Спустя несколько попыток реконнекта у меня он просто забивает на статус, хотя в коде не совсем понял, при каком условии, и кажется там Fail вообще не обрабатывается.
Да, там все странно - отключил сейчас upnp на роутере и transmission бесконечно сыпет в лог уже больше получаса:
Возможно, проблема с пробросом в самом miniupnpc. Например qbittorrent судя по логам пробрасывает сразу же и без ошибок. |
miniupnpc использует команду В libtorrent я вообще фразы Вот тут есть кое какое упоминание этой команды: |
Интересно. Оказывается, в новой версии miniupnpc другие константы. Правда, дополнительный код - он всё равно "не единица". |
Хм, на версии 2.2.8 клиент upnpc корректно пробрасывает сразу без флага -i. ОДНАКО вот что я заметил в miniupnpc: miniupnp/miniupnp@c0a50ce#diff-f4321c7c8d1e7ee67ca583dcc83ef3e391e233aa97c502fca50b32535d9cf936R624 Было:
Стало:
Видимо, в этом и суть новых констант, теперь state 2 считается приемлемым? Если так, то патч к i2pd это и делает, только тогда надо еще добавить в условие API 18, чтобы было корректно |
Отбрасывают не единицу.
Как я понял, состояние 2 теперь разбито на состояние 2 и 3. Может, ещё какое-то изменение есть.
Я это понимаю так: раз дошли до состояния 2 (или 3), то всё плохо и уже мелкие проблемы проверять смысла нету. |
Но теперь это 3 и 4 в новой версии, а статус 2 проверяется вместе со статусом 1 по-умолчанию Добавил вывод статуса в конец UPNP_GetValidIGD Теперь вывод такой:
Т.е. статус 2 теперь не not connected, а reserved ip и проходит по умолчанию (место звездочек в первом случае тоже внешний айпи). |
Только это касается не библиотеки, а утилиты. Кстати, они таки добавили константы.
Так всё же - зачем i2pd нужен проброс с reserved ip? Если же miniupnpc или железка отмечают белый IP как серый, то надо разбираться, почему. |
За nat ведь тоже можно получать прямые udp соединения. У меня на джава роутере upnp работал и показывал прямые SSU соединения в статистике. Соответственно, порт надо открыть, особенно, когда он меняется с каждым рестартом |
"Пробитие" NAT к UPnP, насколько я знаю, не относится. |
Проблема:
UPnP: Unable to find valid Internet Gateway Device: error 2
Подробнее:
Предположительно, проблема в нестандартном IGD - dappnode/DNP_DAPPMANAGER#312
Ручной форвард в miniupnpc выдает "Not connected IGD":
Однако с флагом -i (игнор) все корректно форвардится:
В i2pd/daemon/UPnP.h случай с not connected соответствует:
UPNP_IGD_VALID_NOT_CONNECTED = 2
Лог i2pd до фикса:
После:
Форвард проходит.