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

Терминальный сервер и RemoteAPP в Ubuntu Linux

Пришло время закрыть вопрос с RemoteAPP в Ubuntu Linux и большая часть уже сделана и можете посмотреть предыдущие заметки как я понимал Windows Server 2025 и службы терминалов без использования…

Примеры конфигурации HAProxy

HAProxy — это программное обеспечение с открытым исходным кодом, которое предоставляется бесплатно. Оно используется для распределения нагрузки и как прокси-сервер, чтобы обеспечить непрерывную работу и высокую доступность веб-приложений и сервисов.…

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

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

You Missed

Терминальный сервер и RemoteAPP в Ubuntu Linux

Терминальный сервер и RemoteAPP в Ubuntu Linux

Примеры конфигурации HAProxy

Примеры конфигурации HAProxy
Установка и настройка InfluxDB (V2 OSS)

Немного экспериментов с Windows Server 2025

Немного экспериментов с Windows Server 2025

Шпаргалка по работе с envsubst

Шпаргалка по работе с envsubst
Немного заметок по Kubernetes