понедельник, 16 февраля 2015 г.

OpenVPN ошибка TLS на banana pi

После установки и настройки OpenVPN по инструкции на официальном сайте, всё заработало. Но через некоторое время начались проблемы. Соединение обрывалось и долго не могло повторно установиться. В логах OpenVPN были следующие записи
Authenticate/Decrypt packet error: packet HMAC authentication failed
TLS Error: incoming packet authentication failed from [AF_INET]
Fatal TLS error (check_tls_errors_co), restarting
Несколько дней я не мог понять почему TLS соединение проходит с ошибкой, причем иногда все работало без сбоев. TLS нужен для шифрования только начала соединения, когда передаётся не зашифрованная информация. Как только соединение установлено - вся информация шифруется при помощи SSL по алгоритму шифрования указанному в конфиге.
Так как в banana pi нет батарейки для сохранения времени, при перезагрузке или отключении питания часы всегда устанавливаются в 1 января 2010 года. Затем стартуют сервисы при загрузке и пока ntp демон пытается через интернет настроить правильное время, openvpn демон уже пытается установить начальное TLS соединение с неправильной датой. Это все и мешает поднять туннель.
Выхода я вижу два:
  1. Не шифровать начало соединения
  2. Отложить поднятие туннеля, до окончания настройки времени.
Я пошел простым путем и просто добавил в планировщик задержку в 2 минуты старта openvpn демона, предварительно отключив openvpn из автозапуска. 2 минуты, думаю, должно хватить ntp демону для настройки времени, ну а если проблемы какие с сетью помешают ему, то и vpn поднимать нет смысла без сети.
Итак, создаем файл с именем openvpn для крона в папке /etc/cron.d
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

@reboot root sleep 120 && /usr/sbin/service openvpn restart >> /var/log/cronopenvpn.log
И отключаем openvpn из автозагрузки:
sudo update-rc.d openvpn disable
Перезагружаемся и смотрим результат.

Комментариев нет:

Отправить комментарий