Настройка Proxy/VPN сервера (Часть третья OpenVPN)

Оцените статью

А вот сейчас попробуем решить задачу уровня мстителей. А именно, объединим LXC-контейнер и роутер MikroTik. Тут как бы видится две проблемы, первая это запустить OpenVPN в LXC-контейнере, а вторая поднять OpenVPN-сервер на Mikrotik.
P.S. Эксперимент неудачный, но на всякий случай задокументируем.

OpenVPN-сервер на роутере MikroTik

На эту тему уже только ленивый не написал, поэтому я тоже напишу. Хотя я и ленивый.

Создаем корневой сертификат.

/certificate add name=openvpn-ca country="RU" state="54" locality="NSK" organization="INTERLAN" common-name="openvpn-ca" key-size=2048 days-valid=3650 key-usage=crl-sign,key-cert-sign 
/certificate sign openvpn-ca ca-crl-host=127.0.0.1

Создаем сертификат сервера.

/certificate add name=ovpn-server country="RU" state="54" locality="NSK" organization="INTERLAN" common-name="ovpn-server" key-size=2048 days-valid=3650 key-usage=digital-signature,key-encipherment,tls-server 
/certificate sign ovpn-server ca="openvpn-ca"

Аналогично создаем сертификат клиента.

/certificate add name=client-01 country="RU" state="54" locality="NSK" organization="INTERLAN" common-name="client-01" key-size=2048 days-valid=365 key-usage=tls-client 
/certificate sign client-01 ca="openvpn-ca"

Проверяем, что у нас в winbox появилось.

Openvpn на MikroTik

Экспортируем сертификат.

/certificate export-certificate openvpn-ca type=pkcs12 export-passphrase=12345678
/certificate export-certificate client-01 type=pkcs12 export-passphrase=12345678

Создаем пул адресов которые будут получать наши клиенты.

/ip pool add name=ovpn-pool ranges=10.107.72.100-10.107.72.199

Создаем PPP-профиль.

/ppp profile add local-address=127.0.0.1 name=ovpn remote-address=ovpn-pool
/ppp aaa set accounting=yes

Создаем пользователя.

/ppp secret add name=client-01 password=xxxPasswordxxx profile=ovpn service=ovpn

Создаем интерфейс.

/interface ovpn-server server set enabled=yes certificate=ovpn-serv default-profile=ovpn  require-client-certificate=yes auth=sha1 cipher=aes256

Или аналогично через winbox.

Openvpn интерфейс в Mikrotik

Разрешаем входящий трафик на порт 1194.

/ip firewall filter add action=accept chain=input protocol=tcp dst-port=1194
/ip firewall filter add action=accept chain=input protocol=udp dst-port=1194

OpenVPN-клиент в контейнере LXD

Настройка LXD-контейнера по старой схеме.

В итоге, на финальной итерации приключений с VPN/Proxy у меня получилась такая картина.

Первым делом ставим в контейнер пакеты которые нам понадобятся для запуска OpenVPN-клиента и сопроводительные пакеты для диагностики работы и просто удобства.

# apt-get install openvpn easy-rsa bridge-utils
# apt-get install traceroute net-tools iptraf-ng mc curl wget

Обязательно убедитесь, что на всех хостах одинаковый часовой пояс и включена и работает синхронизация точного времени (можно влететь в ситуацию когда OpenVPN будет сообщать, что сертификат еще не активен и это довольно часто случается).

# dpkg-reconfigure tzdata

Current default time zone: 'Asia/Novosibirsk'
Local time is now:      Thu Apr 24 15:25:31 +07 2025.
Universal Time is now:  Thu Apr 24 08:25:31 UTC 2025.

Проверяем синхронизацию времени.

root@srv-lxc-openvpn:~# timedatectl
               Local time: Thu 2025-04-24 15:26:42 +07
           Universal time: Thu 2025-04-24 08:26:42 UTC
                 RTC time: n/a
                Time zone: Asia/Novosibirsk (+07, +0700)
System clock synchronized: yes
              NTP service: inactive
          RTC in local TZ: no

Сейчас у нас NTP не активно и надо установить пакет chrony.

# apt-get install chrony
# systemctl enable chrony

Повторная проверка, что все хорошо.

# timedatectl
               Local time: Thu 2025-04-24 15:49:22 +07
           Universal time: Thu 2025-04-24 08:49:22 UTC
                 RTC time: n/a
                Time zone: Asia/Novosibirsk (+07, +0700)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Продолжаем настройку хоста и распаковываем полученные .p12 файлы.

$ openssl pkcs12 -in ./cert_export_client-01.p12 -nocerts -out privateKey.pem
$ openssl pkcs12 -in ./cert_export_client-01.p12 -clcerts -nokeys -out publicCert.pem
$ openssl pkcs12 -in ./cert_export_openvpn-ca.p12 -clcerts -nokeys -out CACert.pem

Удаляем пароль из приватного ключа.

$ openssl rsa -in privateKey.pem -out privateKey_no_pass.pem

Конфигурация клиента.

client
dev tun
proto tcp
remote 37.194.5.244 1194
resolv-retry infinite
nobind
persist-tun

ca CACert.pem
cert publicCert.pem
key privateKey_no_pass.pem

verb 5
remote-cert-tls server

data-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC
data-ciphers-fallback AES-256-CBC

auth-user-pass

И вот тут я словил ошибку.

duplicate packet, dropping

В итоге, победить ее я не смог и эксперимент признаем неудачным.

Related Posts

Начало работы с Yandex Cloud CLI

Наконец мои руки добрались до облака Yandex и пока у меня не сгорел грант можно с облаком поиграть. Как я понимаю Yandex Cloud CLI не особо отличается от аналогичного инструмента…

Тестирование жестких дисков в Ubuntu Linux

Досталось мне тут наследство от старого системного администратора, а именно куча жестких дисков которые скажем так непонятного состояния и надо определиться, что из них отнести на помойку, а что можно…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Возможно вы пропустили

Настройка Proxy/VPN сервера (Часть третья OpenVPN)

Настройка Proxy/VPN сервера (Часть третья OpenVPN)
VPS в Yandex-облаке

Начало работы с Yandex Cloud CLI

Начало работы с Yandex Cloud CLI

Тестирование жестких дисков в Ubuntu Linux

Тестирование жестких дисков в Ubuntu Linux

Диапазоны IP-адресов популярных WEB-ресурсов

Диапазоны IP-адресов популярных WEB-ресурсов

Базовая настройка MikroTik

Базовая настройка MikroTik