Ошибка OpenVPN: Dynamic cipher negotiation failed (data-ciphers mismatch)
- Соединение разрывается на этапе согласования шифров с логом:
OPTIONS ERROR: failed to negotiate cipher with server. Add the server's cipher to --data-ciphers. - В журнале сервера:
Dynamic cipher negotiation failed: no shared cipher found between peers. - Клиенты на старых версиях OpenVPN (2.3/2.4) не могут подключиться к современному серверу OpenVPN 2.6+.
1. Архитектура NCP (Data Ciphers Negotiation)
Начиная с OpenVPN 2.5, директива cipher устарела и используется только как резервный вариант. Для успешного соединения списки шифров data-ciphers сервера и клиента должны содержать хотя бы один общий алгоритм.
2. Настройка актуального списка шифров на сервере
Добавьте в /etc/openvpn/server/server.conf универсальный список шифров, включающий как современные GCM/Poly1305, так и legacy-шифры для старых клиентов:
# Основной список для согласования (NCP)
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305:AES-256-CBC:AES-128-CBC
# Резервный шифр для клиентов OpenVPN 2.3 и старее (fallback)
data-ciphers-fallback AES-256-CBC3. Конфигурация клиентского профиля .ovpn
Убедитесь, что клиентский конфиг содержит совместимый набор шифров:
data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
# Для полной обратной совместимости с legacy-серверами:
cipher AES-256-GCM4. Проверка поддерживаемых шифров в установленной OpenSSL
# Список доступных алгоритмов шифрования OpenVPN
openvpn --show-ciphers Частые вопросы (FAQ)
Почему OpenVPN 2.6 отказывается работать со старым шифром BF-CBC (Blowfish)?
Шифр Blowfish (BF-CBC) имеет размер блока 64 бита и подвержен уязвимости SWEET32. В OpenVPN 2.6 он полностью заблокирован по умолчанию.
Что такое data-ciphers-fallback?
Это шифр, который сервер принудительно использует при подключении старых клиентов OpenVPN 2.3 и ранее, которые вообще не поддерживают динамическое согласование NCP.
Какой шифр обеспечивает максимальную производительность без AES-NI?
CHACHA20-POLY1305 работает значительно быстрее AES-GCM на процессорах без аппаратного ускорения AES (например, ARM роутеры, Raspberry Pi).
Может ли директива ncp-disable решить проблему?
Директива ncp-disable устарела в 2.5 и удалена в 2.6. Корректное решение — явно указать список допустимых алгоритмов в data-ciphers.