Найти в Дзене
TechrooM

TLS Error: cannot HMAC in incoming packet from Fatal: TLS error

Доброго времени суток!
Сегодня рассмотрим решение проблемы из заголовка. Встречается она при настройке OpenVPN в паре с Mikrotik под управлением RouterOS 6 версии, из-за ограниченности возможностей OVPN.
Условия: CHR версия 6.49.17 stable Удалённый сервер под управление Ubuntu Server 20.04, на которой крутится Docker с OVPN, для доступа в другую сеть. Версия OVPN Server 2.5.6. Заметка родилась из-за необходимости подключить доп клиента с Mikrotik к действующему OVPN Server, на котором другие клиенты подключаются с TLS аутентификацией, с ходу ничего не заработало, в логах OVPN красовалась надпись вида: TLS Error: cannot HMAC in incoming packet from Fatal: TLS error Что намекает нам на то, что Mikrotik не умеет в TLS аутентификацию, в результате пришлось поднять ещё один контейнер и там править конфигурацию под Микротик. Загодя скажу, что кроме TLS аутентификации, не стоит рассчитывать на UDP в качестве транспорта. Также не поддерживается сжатие трафика, никакое. Из двух алгоритмов авто

Доброго времени суток!
Сегодня рассмотрим решение проблемы из заголовка. Встречается она при настройке OpenVPN в паре с Mikrotik под управлением RouterOS 6 версии, из-за ограниченности возможностей OVPN.
Условия:

CHR версия 6.49.17 stable

Удалённый сервер под управление Ubuntu Server 20.04, на которой крутится Docker с OVPN, для доступа в другую сеть. Версия OVPN Server 2.5.6.

Заметка родилась из-за необходимости подключить доп клиента с Mikrotik к действующему OVPN Server, на котором другие клиенты подключаются с TLS аутентификацией, с ходу ничего не заработало, в логах OVPN красовалась надпись вида:

TLS Error: cannot HMAC in incoming packet from

Fatal: TLS error

-2

Что намекает нам на то, что Mikrotik не умеет в TLS аутентификацию, в результате пришлось поднять ещё один контейнер и там править конфигурацию под Микротик. Загодя скажу, что кроме TLS аутентификации, не стоит рассчитывать на UDP в качестве транспорта. Также не поддерживается сжатие трафика, никакое.

Из двух алгоритмов авторизации MD5 и SHA1, первый прилично подъедает CPU, так что следует быть осторожным, если у Вас не сильно быстрая машина.

Из алгоритмов шифрования у нас только AES 256 и Blowfish 128, и тут следует учесть, что нам подойдут только алгоритмы без TLS аутентификации.
Проверяем что поддерживает наш OVPN через вызов команды openvpn --show-ciphers:

AES-128-CBC (128 bit key, 128 bit block)
AES-128-CFB (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-CFB1 (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-CFB8 (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-GCM (128 bit key, 128 bit block, TLS client/server mode only)
AES-128-OFB (128 bit key, 128 bit block, TLS client/server mode only)
AES-192-CBC (192 bit key, 128 bit block)
AES-192-CFB (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-CFB1 (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-CFB8 (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-GCM (192 bit key, 128 bit block, TLS client/server mode only)
AES-192-OFB (192 bit key, 128 bit block, TLS client/server mode only)
AES-256-CBC (256 bit key, 128 bit block)
AES-256-CFB (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-CFB1 (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-CFB8 (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-GCM (256 bit key, 128 bit block, TLS client/server mode only)
AES-256-OFB (256 bit key, 128 bit block, TLS client/server mode only)

и видим, что выбирать особо не из чего, к нашим услугам AES-256-CBC. Вносим ещё одну правку в конфиг сервера и меняем

cipher AES-256-GCM на AES-256-CBC

Примечание:

Если не сменить алгоритм шифрования, то сервер просто не сможет корректно ответить роутеру, ошибка будет выглядеть примерно так:

-3

тут видно, что сервер ожидает TLS аутентификацию, но алгоритм шифрования, установленный на сервере, не совместим с шифром, который используется клиентом, что намекает на отсутствие TLS аутентификации в Mikrotik.

Необходимо освободить конфиг сервера от строчек вида:

;tls-server
;tls-version-min 1.2
;tls-auth /etc/openvpn/ta.key 0

Остается только дополнить конфиг строчкой:

proto tcp

Приступаем к настройке роутера.

На роутере необходимо первым делом импортировать сгенерированный файл .ovp,n в котором лежат все необходимые сертификаты для работы.

Для этого доставляем файл на роутер любым удобным способом (scp, samba, хоть usb флешка, если она у вас поддерживается).

Далее все действия через терминал.

Импортируем ключи через команду:

/certificate import file-name=client_nb.ovpn passphrase=<ВАША_ПАРОЛЬНАЯ_ФРАЗА>

После чего система отчитается об импорте ключей, должно быть импортировано 3 шт.

Далее переходим в /interface ovpn-client

И создаем интерфейс командой:

add add-default-route=no auth=sha1 certificate=<наш_импортированный_tls_сертификат>.ovpn_1 cipher=aes256 connect-to=<ip_адрес_сервера> disabled=no mac-address=FE:98:СC:01:DF:E2 max-mtu=1500 mode=ip name=testvpn password="" port=1194 profile=default use-peer-dns=no user=mkpro4 verify-server-certificate=yes

Можно добавить add-default-route и peer-dns в положение yes, если нужно чтобы весь трафик шёл в целевую подсеть.

После чего проверяем статус соединения. В консоли должно быть так, при выполнении /interface ovpn-client print или monitor number=0:

-4

Стоит отметить, что отсутствие поддержки TLS аутентификации не отменяет подготовки полного комплекта сертификатов для сервера и клиента, тут в помощь easyrsa и man'ы, man'ы, man'ы...