
А вот сейчас попробуем решить задачу уровня мстителей. А именно, объединим 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 появилось.

Экспортируем сертификат.
/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.

Разрешаем входящий трафик на порт 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
В итоге, победить ее я не смог и эксперимент признаем неудачным.