Настройка 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

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

Похожие записи

Настройка взаимодействия RED ADM и Windows Active Directory

Сегодня проведем несколько экспериментов по настройке взаимодействия RED ADM и Windows Active Directory. Есть несколько способов настройки доверия для упрощения миграции с решений Microsoft на Российское ПО и сегодня их…

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Так как на севере делать абсолютно нечего, то я продолжаю заниматься саморазвитием 🙂 На этой неделе вспоминаю и углубляю свои знания в Docker. Лучший способ запомнить тему, это вести конспект…

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

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

Читать еще статьи

Настройка взаимодействия RED ADM и Windows Active Directory

Настройка взаимодействия RED ADM и Windows Active Directory

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Установка основного контроллера домена на базе REDADM

Установка основного контроллера домена на базе REDADM

zVirt работа с шаблонами виртуальных машин

zVirt работа с шаблонами виртуальных машин

Подробная инструкция по работе с томами (volumes) в Docker

Подробная инструкция по работе с томами (volumes) в Docker

Сетевые возможности Docker

Сетевые возможности Docker