Почему Little Snitch отказывает во входящем соединении с openvpn с vpn.btguard.com?
Я нахожусь на моем BTGuard VPN, и только случайно получил всплывающее окно отказа в соединении от Little Snitch. Примечания из записи в LS:
29 мая 2019 года vpn.btguard.com попытался установить входящее соединение с openvpn. Запрос был отклонен автоматически, потому что этот тип соединения не может быть отложен.
1 ответ
Это, вероятно, что-то вроде паразитного пакета из предыдущего раза, когда вы были подключены. Например, клиент OpenVPN перезапустился, но сервер все еще пытался отправить данные за предыдущий сеанс.
OpenVPN (по умолчанию и в конфигурации BTGuard) работает по протоколу UDP, который является транспортным протоколом без сохранения состояния, в котором нет явных пакетов "установить соединение" или "отключить", никаких порядковых номеров, ничего, кроме пары номеров портов.
В TCP хосты и межсетевые экраны начинают отслеживать соединение, как только они видят пакеты SYN (рукопожатие). Но в UDP из-за отсутствия какого-либо пакета "connect" (только пакеты данных) межсетевые экраны просто начинают отслеживать "соединения" после любого пакета, который они видят.
В TCP узлы и брандмауэры забывают соединение, как только они видят пакеты FIN (разъединение). Но в UDP из-за отсутствия какого-либо пакета "отключить" межсетевые экраны должны использовать тайм-ауты для истечения срока действия старых "соединений" (например, запись удаляется всякий раз, когда она простаивает в течение 60 секунд, или 180 секунд, или 10 минут, или аналогичных).
Такие программы, как OpenVPN, конечно, могут иметь команды "подключить" / "отключить" в своем протоколе прикладного уровня, но брандмауэр ничего об этом не знает - он видит только UDP с некоторыми данными внутри.
Так что иногда случается так:
Либо OpenVPN перезапускается / выходит, и брандмауэр забывает все записи, связанные со старым процессом, либо VPN-соединение простаивает так долго, что брандмауэр забывает об этом из-за истечения времени истечения.
Однако сервер BTGuard не получил пакет OpenVPN "отключить", и он также не забыл соединение из-за истечения времени ожидания, поэтому он пытается отправить вам некоторые данные через старый сеанс.
Брандмауэр видит входящий пакет и не может узнать, является ли оно новым "соединением" или оно принадлежит ранее установленному. (И у него нет никакого способа узнать, был ли он первоначально установлен внешним или внутренним, либо.)
Поскольку брандмауэр не запоминает эту пару портов (из-за того, что забыл ее в первой части), он просто предполагает, что она должна быть новой. А поскольку это входящий пакет, брандмауэр показывает предупреждение о "входящем соединении".
Это предположение, но это достойное предположение.