Я нахожусь в сети с ограничениями, и мои попытки подключиться к моему серверу OpenVPN (TCP / 443) прерываются подделкой TCP RST сразу после OpenVPN. P_CONTROL_HARD_RESET_CLIENT_V2
. Я записал трафик с обеих сторон и заметил, что обе стороны получают сброс соединения, но ни одна из сторон фактически не генерирует его, т.е. RST вводится из межсетевого экрана между ними.
Есть ли способ замаскировать OpenVPN, чтобы он больше походил на обычный HTTPS-трафик?
Я нашел решение и хотел им поделиться.
Как объяснено в других местах, например Вотбрандмауэр может блокировать VPN-соединения и трафик, например созданные OpenVPN, путем блокировки портов или выполнения Deep-Packet-Inspection (DPI).
В первом случае достаточно использовать другой порт (например, порт https 443), однако для более позднего случая необходим более совершенный метод.
В наши дни DPI используется все большим количеством межсетевых экранов, включая китайскую «великую стену». Очевидное решение - замаскировать трафик VPN под какой-либо другой трафик, который брандмауэр не блокирует. Идеальным кандидатом является SSL / TLS, используемый HTTPS, поскольку контент зашифровывается после подтверждения, что делает невозможным идентификацию передаваемых данных межсетевым экраном.
Чтобы туннель трафик OpenVPN внутри соединения SSL / TLS, туннель SSL, например станнель можно использовать, как описано Вот. Это еще больше снижает производительность соединения, но делает невозможным для брандмауэра различать пользователя, посещающего веб-сайт через безопасное соединение, или пользователя, использующего VPN (обратите внимание, что брандмауэр может прервать соединение независимо от времени ожидания или ограничения объема данных) .
Объясняется другое решение, которое не снижает производительность. Вот. Этот метод отвечает на два подключения к одному и тому же серверу, используя один и тот же порт, используя функцию OpenVPN, которая позволяет серверу OpenVPN перенаправлять трафик, не связанный с OpenVPN, в другое приложение на том же сервере. Первое соединение будет HTTPS-соединением по умолчанию, которое не будет заблокировано брандмауэром, поскольку брандмауэр идентифицирует рукопожатие TLS как действительный трафик. На удаленном сайте OpenVPN перенаправляет этот трафик на сервер nginx с поддержкой SSL, который отвечает и устанавливает соединение TLS. Как только это соединение установлено, соединение OpenVPN будет выглядеть как зашифрованные данные, которые являются частью TLS-соединения с веб-сервером nginx, но будут правильно идентифицированы сервером OpenVPN.
Я не тестировал второе соединение, однако я ожидаю, что оно будет менее надежным, чем первое решение, поскольку соединение nginx может в какой-то момент закрываться, выделяя трафик OpenVPN.