Wir sind unabhängig, neutral und finanzieren uns teilweise über Werbung und Partnerprovisionen.
Danke wenn du uns unterstützt. Weitere Infos zum Bedanken findest Du hier. Diese Seite verwendet hierzu Cookies & Tracking-Cookies, weitere Informationen findest du hier. Wenn du diese Seite weiterhin besuchst, erklärst du dich damit einverstanden.

Diese seite ist neutral und unabhängig. Die Finanzierung erfolgt teilweise über Werbung und Partnerprovisionen. Danke wenn Du mich unterstützt.
Diese Seite verwendet Cookies & Tracking-Cookies, weitere Informationen findest Du hier. Wenn du diese Seite weiterhin besuchst, erklärst du dich damit einverstanden.

(x) Скрывать/показывать заметки.
Этот сайт является нейтральным и независимым.
Все инструкции предоставляются на 100 % бесплатно.
Финансирование частично осуществляется за счет рекламы и партнерских комиссий.
Спасибо, что поддержали меня.

Всю информацию о благодарности можно найти здесь.

Besuche Amazon vor Deinem nächsten
Einkauf über diesen Danke Affiliate Link.


Здесь вы можете поблагодарить меня с помощью PayPal.
Вы также можете регулировать количество.

Вам нравится моя документация?
здесь вы можете оценить меня.
5-Stars


🕊️
Stop the senseless and cowardly destruction in the Urkaine!
Inform yourselves and finally end the war.
For the peace all over the world.

Переведены только самые важные части документации.
Полный текст оригинальной инструкции вы можете найти здесь

Остановите войну! остановите геноцид!
За мир и свободу в Украине, во всем мире!

💙 💛 🕊 ☮ ️🇺🇦

_____ ____ ____ _ _ _ _ ____ _ _ ___ ____ ____ _ _ ____ ____ |. _ .||: _ \|:___)|:\|:|( \/ )|: _ \|:\| | /.__)|:___)|: _ \( \/ )|:___)|: _ \ |:|_|:||:___/|:__) |:\ :| \::/ |:___/|: | \__.\|:__) |: / \::/ |:__) |: / |_____||_| |____)|_|\_| \/ |_| |_|\_| (___/|____)|_|\_) \/ |____)|_|\_\
_____ ____ ____ _ _ _ _ ____ _ _ ___ ____ ____ _ _ ____ ____ |. _ .||: _ \|:___)|:\|:|( \/ )|: _ \|:\| | /.__)|:___)|: _ \( \/ )|:___)|: _ \ |:|_|:||:___/|:__) |:\ :| \::/ |:___/|: | \__.\|:__) |: / \::/ |:__) |: / |_____||_| |____)|_|\_| \/ |_| |_|\_| (___/|____)|_|\_) \/ |____)|_|\_\

OpenVPN Server под Ubuntu 22.04 LTS (Focal Fossa)
tun/NAT : routing : Layer 3
2024-02-20 © ctaas.de, Arno Schröder § Impressum



OpenVPN - это бесплатное программное обеспечение с открытым исходным кодом, которое реализует виртуальную частную сеть (VPN).
Возможно множество различных конфигураций, таких как:
Создание сетей (точка-точка), сайт-сайт, Roadwarrior, защита сетевого трафика в публичных сетях и многое другое..
Основная цель здесь - предоставить клиентам безопасный доступ к частной сети (дома/в компании).
Это руководство объясняет, как легко и безопасно настроить сервер OpenVPN с tun/NAT, уровнем 3, маршрутизацией и протоколированием под Ubuntu.

Corona Help/Информируйте себя Нейтрально: Как настроить безопасный VPN-доступ для сотрудников в домашнем офисе (бесплатное программное обеспечение с открытым исходным кодом):


С помощью этих инструкций очень легко обеспечить безопасный доступ к домашнему офису для любого количества сотрудников.
Особенно в эти трудные времена некоторые люди могут искать простое решение VPN.
Воспользуйтесь этими простыми пошаговыми инструкциями. Здесь все объясняется очень понятно.
Примечание: Текст инструкции был переведен машинным способом. Это руководство работает. Однако, вероятно, в дальнейшем оно не будет обновляться. Перевод новых версий отнимает у меня слишком много времени. Пожертвования на поддержку могут облегчить эту задачу. Из-за языка я не могу отвечать на вопросы. Если у вас есть вопросы, пожалуйста, задавайте их на немецком или английском языке. Пойдем. В этом смысле.
Остановите бессмысленное разрушение и будьте здоровы!

Nr. Руководство по серверу OpenVPN:
1 Установить OpenVPN
3 EasyRSA Установка и настройка: vars
9 Подготовьте сервер: server.crt, server.key, ta.key & dh.pem erstellen
15 Создание клиентского сертификата и ключа
19 Создание конфигурации сервера: server.confserver.conf (сокращенный)
30 Создание конфигурации клиента: client.confclient.conf (сокращенный)
34 Клиентский сценарий для создания файла .ovpn
36 Подключения к журналу (опционально/рекомендуется)
43 Совместное использование протоколов в сети с помощью lighttpd (опционально)
46 Сертификаты замков
51 Совместное использование портов/переадресация портов/перенаправление портов Настройки в маршрутизаторе
53 Выяснить оптимальный MTU и конечные показатели
57 Несколько подключений с одним и тем же сертификатом (обнаружение ошибок)


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

Важные ссылки:
openvpn.net, Community Wiki, FAQ/Документация, OpenVPN 2.4 Manpage, Forum, Скачать (Настройка клиента/сервера)



Установите OpenVPN:


  1.
Системные требования:
Для реализации этого руководства лучше всего использовать Ubuntu Server 22.04 LTS (рекомендуется/протестировано ok).
Это руководство также работает для всех старых версий
systemd, то есть также для Ubuntu 15.04, 15.10, 16.04, 16.10, 17.04, 17.10, 18.04 LTS (проверено ok), 18.10, 19.04 19.10 и 20.04 LTS (проверено ok).
Другие варианты, основанные на Ubuntu/Debian, такие как Xubuntu, Mate, Gnome, Linux Mint, Debian 10, Raspberry Pi и т.д. тоже более или менее работают.
Однако возможны незначительные отклонения, специфичные для конкретной системы (например, с брандмауэром в Debian). Также требуется Root-доступ к серверу. При переустановке сервера Ubuntu не включайте ни один из дополнительных пакетов. Требуется только "чистая" базовая система.
Лучшим предварительным условием является чистая базовая установка серверной системы Ubuntu. Я уже знаю, как это настроить здесь или описан здесь.
Решение VPN, показанное здесь, также может быть легко установлено в VirtualBox или Hyper-V.
В качестве имени сервера я рекомендую: OpenVPN-tun

  2.
Обновление системы и установка OpenVPN:
apt-get update && apt-get dist-upgrade
apt-get install openvpn -y
apt-get install pluma -y # дополнительно:
Рекомендуемый мною текстовый редактор для среды с графическим интерфейсом.


EasyRSA скачать & настроить:


  3.
Далее необходимо создать свой собственный простой центр сертификации (CA).
Для разработки инфраструктуры открытых ключей CA (PKI) вы можете использовать EasyRSA.
Для этого загрузите последнюю версию EasyRSA [1], [2] лучше всего загружать из официального репозитория GitHub:
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
# EasyRSA скачать.
tar -xvzf EasyRSA-3.0.8.tgz
# Распакуйте архив.


  4.
Перейдите в каталог EasyRSA и скопируйте файл 'vars.example' в 'vars' (без расширения).:
cd ~/EasyRSA-3.0.8/
cp vars.example vars


  5.
Установите силу шифрования, срок действия и значения среды для собственного центра сертификации Центр сертификации (ЦС):
# Выберите здесь только один вариант:
nano vars  # в терминале/без GUI
pluma vars # на рабочем столе/с GUI


Адаптируйте файл vars следующим образом
(обратите внимание на синие комментарии):
# Easy-RSA 3 parameter settings # NOTE: If you installed Easy-RSA from your distro's package manager, don't edit # this file in place -- instead, you should copy the entire easy-rsa directory # to another location so future upgrades don't wipe out your changes. # HOW TO USE THIS FILE # # vars.example contains built-in examples to Easy-RSA settings. You MUST name # this file 'vars' if you want it to be used as a configuration file. If you do # not, it WILL NOT be automatically read when you call easyrsa commands. # # It is not necessary to use this config file unless you wish to change # operational defaults. These defaults should be fine for many uses without the # need to copy and edit the 'vars' file. # # All of the editable settings are shown commented and start with the command # 'set_var' -- this means any set_var command that is uncommented has been # modified by the user. If you're happy with a default, there is no need to # define the value to its default. # NOTES FOR WINDOWS USERS # # Paths for Windows *MUST* use forward slashes, or optionally double-esscaped # backslashes (single forward slashes are recommended.) This means your path to # the openssl binary might look like this: # "C:/Program Files/OpenSSL-Win32/bin/openssl.exe" # A little housekeeping: DON'T EDIT THIS SECTION # # Easy-RSA 3.x doesn't source into the environment directly. # Не изменяйте ничего здесь. # Complain if a user tries to do this: if [ -z "$EASYRSA_CALLER" ]; then echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2 echo "This is no longer necessary and is disallowed. See the section called" >&2 echo "'How to use this file' near the top comments for more details." >&2 return 1 fi # DO YOUR EDITS BELOW THIS POINT # This variable is used as the base location of configuration files needed by # easyrsa. More specific variables for specific files (e.g., EASYRSA_SSL_CONF) # may override this default. # # The default value of this variable is the location of the easyrsa script # itself, which is also where the configuration files are located in the # easy-rsa tree. #set_var EASYRSA "${0%/*}" # If your OpenSSL command is not in the system PATH, you will need to define the # path to it here. Normally this means a full path to the executable, otherwise # you could have left it undefined here and the shown default would be used. # # Windows users, remember to use paths with forward-slashes (or escaped # back-slashes.) Windows users should declare the full path to the openssl # binary here if it is not in their system PATH. #set_var EASYRSA_OPENSSL "openssl" # # This sample is in Windows syntax -- edit it for your path if not using PATH: #set_var EASYRSA_OPENSSL "C:/Program Files/OpenSSL-Win32/bin/openssl.exe" # Edit this variable to point to your soon-to-be-created key directory. By # default, this will be "$PWD/pki" (i.e. the "pki" subdirectory of the # directory you are currently in). # # WARNING: init-pki will do a rm -rf on this directory so make sure you define # it correctly! (Interactive mode will prompt before acting.) #set_var EASYRSA_PKI "$PWD/pki" # Define X509 DN mode. # This is used to adjust what elements are included in the Subject field as the DN # (this is the "Distinguished Name.") # Note that in cn_only mode the Organizational fields further below aren't used. # # Choices are: # cn_only - use just a CN value # org - use the "traditional" Country/Province/City/Org/OU/email/CN format #set_var EASYRSA_DN "cn_only" set_var EASYRSA_DN "org" # Активируйте использование формата CN. Только в этом случае будут использоваться следующие значения. # Organizational fields (used with 'org' mode and ignored in 'cn_only' mode.) # These are the default values for fields which will be placed in the # certificate. Don't leave any of these fields blank, although interactively # you may omit any specific field by typing the "." symbol (not valid for # email.) # Измените следующие значения соответствующим образом, например, следующим образом: #set_var EASYRSA_REQ_COUNTRY "US" # DE = ваша страна #set_var EASYRSA_REQ_PROVINCE "California" # TH = Ваше государство #set_var EASYRSA_REQ_CITY "San Francisco" # Kahla = ваш город #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" # Computertechnik = ваша организация #set_var EASYRSA_REQ_EMAIL "me@example.net" # mail@ctaas.de = Ваш адрес электронной почты #set_var EASYRSA_REQ_OU "My Organizational Unit" # IT-VPN = Организационное подразделение/отдел # Важно: Также удаляет все ведущие символы комментариев здесь (#). # Choose a size in bits for your keypairs. The recommended value is 2048. Using # 2048-bit keys is considered more than sufficient for many years into the # future. Larger keysizes will slow down TLS negotiation and make key/DH param # generation take much longer. Values up to 4096 should be accepted by most # software. Only used when the crypto alg is rsa (see below.) #set_var EASYRSA_KEY_SIZE 2048 # Важно: Значение следует изменить, чтобы противостоять атакам грубой силы с предварительно вычисленными радужными таблицами. # Вы также можете сделать Deep Packet Inspection немного сложнее, поскольку пакеты в этом случае несколько отклоняются от обычного стандарта. # Поэтому я рекомендую использовать любой не 1024-кратный. # Поэтому не следует использовать обычные значения по умолчанию, такие как 2048, 3072, 4096, 8192 и т.д. # Опыт показывает, что все другие "кривые" ценности работают так же хорошо. # Поэтому используйте любое пользовательское значение между 4096 и 8192, например: ... 3313 ... 4447 ... 6113 ... # The default crypto mode is rsa; ec can enable elliptic curve support. # Note that not all software supports ECC, so use care when enabling it. # Choices for crypto alg are: (each in lower-case) # * rsa # * ec #set_var EASYRSA_ALGO rsa # Define the named curve, used in ec mode only: #set_var EASYRSA_CURVE secp384r1 # In how many days should the root CA key expire? #set_var EASYRSA_CA_EXPIRE 3650 # Через сколько дней должен истечь срок действия корневого ключа ЦС? По умолчанию здесь задано около 10 лет. # По желанию измените на: 5475 = 15 лет, 7300 = 20 лет, 9125 = 25 лет. # In how many days should certificates expire? #set_var EASYRSA_CERT_EXPIRE 1080 # Через сколько дней истекает срок действия сертификатов? По умолчанию здесь задано около 3 лет. # По желанию измените на: 3650 = 10 лет, 5475 = 15 лет, 7300 = 20 лет, 9125 = 25 лет. # Примечание для систем Apple начиная с iOS 13 или macOS 10.15 измененные требования безопасности (максимум 825 дней). # С 11 марта 2020 года применяются следующие новые измененные требования безопасности (максимум 398 дней, рекомендуемые 397 дней). # How many days until the next CRL publish date? Note that the CRL can still be # parsed after this timeframe passes. It is only used for an expected next # publication date. # How many days before its expiration date a certificate is allowed to be # renewed? #set_var EASYRSA_CERT_RENEW 30 #set_var EASYRSA_CRL_DAYS 180 # Support deprecated "Netscape" extensions? (choices "yes" or "no".) The default # is "no" to discourage use of deprecated extensions. If you require this # feature to use with --ns-cert-type, set this to "yes" here. This support # should be replaced with the more modern --remote-cert-tls feature. If you do # not use --ns-cert-type in your configs, it is safe (and recommended) to leave # this defined to "no". When set to "yes", server-signed certs get the # nsCertType=server attribute, and also get any NS_COMMENT defined below in the # nsComment field. #set_var EASYRSA_NS_SUPPORT "no" # When NS_SUPPORT is set to "yes", this field is added as the nsComment field. # Set this blank to omit it. With NS_SUPPORT set to "no" this field is ignored. #set_var EASYRSA_NS_COMMENT "Easy-RSA Generated Certificate" # A temp file used to stage cert extensions during signing. The default should # be fine for most users; however, some users might want an alternative under a # RAM-based FS, such as /dev/shm or /tmp on some systems. #set_var EASYRSA_TEMP_FILE "$EASYRSA_PKI/extensions.temp" # !! # NOTE: ADVANCED OPTIONS BELOW THIS POINT # Важно: С этого момента вы не должны ничего менять. # PLAY WITH THEM AT YOUR OWN RISK # !! # Broken shell command aliases: If you have a largely broken shell that is # missing any of these POSIX-required commands used by Easy-RSA, you will need # to define an alias to the proper path for the command. The symptom will be # some form of a 'command not found' error from your shell. This means your # shell is BROKEN, but you can hack around it here if you really need. These # shown values are not defaults: it is up to you to know what you're doing if # you touch these. # #alias awk="/alt/bin/awk" #alias cat="/alt/bin/cat" # X509 extensions directory: # If you want to customize the X509 extensions used, set the directory to look # for extensions here. Each cert type you sign must have a matching filename, # and an optional file named 'COMMON' is included first when present. Note that # when undefined here, default behaviour is to look in $EASYRSA_PKI first, then # fallback to $EASYRSA for the 'x509-types' dir. You may override this # detection with an explicit dir here. # #set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types" # OpenSSL config file: # If you need to use a specific openssl config file, you can reference it here. # Normally this file is auto-detected from a file named openssl-easyrsa.cnf from the # EASYRSA_PKI or EASYRSA dir (in that order.) NOTE that this file is Easy-RSA # specific and you cannot just use a standard config file, so this is an # advanced feature. #set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf" # Default CN: # This is best left alone. Interactively you will set this manually, and BATCH # callers are expected to set this themselves. #set_var EASYRSA_REQ_CN "ChangeMe" # Cryptographic digest to use. # Do not change this default unless you understand the security implications. # Valid choices include: md5, sha1, sha256, sha224, sha384, sha512 #set_var EASYRSA_DIGEST "sha256" # Batch mode. Leave this disabled unless you intend to call Easy-RSA explicitly # in batch mode without any user input, confirmation on dangerous operations, # or most output. Setting this to any non-blank string enables batch mode. #set_var EASYRSA_BATCH ""

Дополнительное примечание: Это оригинальный файл vars из релиза EasyRSA. В файл были добавлены некоторые комментарии.

  6.
Теперь запустите утилиту easyrsa для инициализации инфраструктуры открытых ключей:
./easyrsa init-pki

Важно: Этот шаг может быть выполнен только один раз во время настройки.
Если позже это будет выполнено снова, то после запроса весь центр сертификации будет сброшен.

  7.
OpenVPN использует OpenSSL для создания сертификата/ключа.
OpenSSL, в свою очередь, использует генератор случайных чисел CSPRNG (cryptographically secure pseudorandom number generator)
для его создания. Помимо прочего, он инициализируется начальным значением seed (семя). Поэтому качество случайных чисел также зависит от этой инициализации.
Особенно на слабых встраиваемых системах это следует заменить не -deterministic энтропия для инициализации.
Другими словами, предсказуемость генерируемых случайных чисел должна быть настолько невозможной, насколько это возможно.
Слабые системы всегда могут генерировать одинаковые случайные числа. Затем заранее сгенерируйте это семя в другой системе.

Сгенерируйте значение/начальное значение инициализации для генератора случайных чисел (RNG) для OpenSSL:
dd if=/dev/urandom of=pki/.rnd bs=256 count=1

Дополнительное примечание: генератор случайных чисел RNG (генератор случайных чисел), естественно, использует дополнительные значения инициализации. Так что это семя не единственный источник.

Создано: ~/EasyRSA-3.0.8/pki/.rnd

  8.
Затем создайте файлы для центра сертификации (ЦС):
./easyrsa build-ca nopass

Просто подтвердите вопрос в [Common Name], нажав Enter.
Ваш собственный центр сертификации (ЦС) готов.
На основе этого теперь можно создавать сертификаты сервера и клиента.

Создано: ~/EasyRSA-3.0.8/pki/ca.crt

сертификат & ключ для  сервера, подпись HMAC (ta.key) и
создайте файл обмена ключами Диффи-Хеллманна (dh.pem):


  9.
Теперь необходимо создать закрытый ключ для подписи сертификата CA сервера.
Затем снова вызовите сценарий Easyrsa, теперь уже с параметром gen-req, за которым следует имя сервера.
В этом руководстве общим именем сервера OpenVPN является просто имя "server" (нижний регистр).
cd ~/EasyRSA-3.0.8/ # Переключитесь на путь.
./easyrsa gen-req server nopass
# Создайте сертификат сервера.


Создано: ~/EasyRSA-3.0.8/pki/reqs/server.req und ~/EasyRSA-3.0.8/pki/reqs/server.key

Примечание. Если вы выберете здесь имя, отличное от "server", вам потребуется настроить некоторые из следующих директив.
Например, если вы скопируете сгенерированные файлы в каталог /etc/openvpn, вы должны подставить правильные имена.
Вам также потребуется позже изменить файл /etc/openvpn/server.conf, чтобы он указывал на правильные файлы .crt и .key для ссылки.

  10.
Подпишите сертификат "server":
./easyrsa sign-req server server

Для [Confirm request details::] введите yes
и подтвердите, нажав Enter.

Создано: ~/EasyRSA-3.0.8/pki/issued/server.crt


  11.
Создайте ключ tls-crypt (ранее tls-auth):
openvpn --genkey --secret ta.key

Предварительно: tls-crypt улучшает tls-auth.

tls-auth (der ta.key) вызывает это OpenVPN дополнительный HMAC-Signaturen всем SSL/TLS-handshake-Paketen добавлено.
OpenVPN затем подписывает все SSL/TLS-Pakete и, таким образом, может быть использован даже до Handshake Обнаружить неавторизованного клиента и прервать соединение.
Поэтому пакеты с неправильной подписью немедленно отбрасываются.
Это также может увеличить и стабилизировать скорость, поскольку сканеры портов не могут блокировать соединение.

tls-auth таким образом, предотвращает:

Что нового в tls-crypt?
tls-crypt (с сайта OpenVPN 2.4 возможно) шифрует и дополнительно подписывает все пакеты пакета Handshakes.

tls-ctypt таким образом, имеет следующий эффект:

Клавиша ta.key используется только для SSL/TLS-handshake требуется только при установлении соединения с сервером.
Сервер и все клиенты используют один и тот же глобальный ключ (pre-shared key) для аутентификации и шифрования.

Для предотвращения коллизий (взлома ключа) этот ключ должен обновляться каждые 2^48 пакетов.
Во время первоначальной установки соединения в каждом направлении (между сервером и клиентом) передается около 10 пакетов.
Предположим, что для установки соединения требуется не более 2^16 (65536) пакетов каждый раз и что каждую минуту происходит одна попытка соединения,
то это ограничивает время жизни ключа tls-crypt примерно до 8171 года (данные поступают из ManPage).

Для большинства обычных пользователей это означает, что после настройки вы всегда сможете использовать ta.key.
Поскольку вы, вероятно, не добьетесь такого большого количества подключений.
Более крупные установки с несколькими пользователями должны менять ta.key чаще, например, раз в год для 8000 пользователей (данные взяты из справочной страницы).

Если произойдет коллизия (взлом ключа), безопасность снижается до уровня чистой установки tls-auth.
Таким образом, сохраняется защита от сканирования портов, DoS-атак и man-in-the-middle атак.
В основном тогда будет потеряна дополнительная конфиденциальность - здесь имеется в виду сокрытие установления соединения.
Передача данных после установки туннеля по-прежнему будет безопасной (даже без tls-crypt).

Основная проблема здесь заключается в том, что все клиенты используют один и тот же глобальный ключ. Это относится как к tls-auth, так и к tls-crypt.
Если клиентская система или даже сервер были взломаны, а ключ ta.key был украден, тогда дополнительная защита, предоставляемая ta.key для всех остальных клиентов, также недействительна.
Особенно крупные организации и VPN-провайдеры могут пострадать от утечки ta.key.

Поэтому улучшенный tls-crypt-v2, вероятно, будет представлен в OpenVPN 2.5. Затем каждый клиент получает свой отдельный ключ.
tls-crypt-v2 Таким образом, повышается безопасность, особенно в установках с несколькими клиентами. Для перехода должна быть возможность одновременного использования tls-crypt и tls-crypt-v2.
В настоящее время не существует стабильного выпуска OpenVPN с функцией tls-ctypt-v2. Поэтому мы использовали tls-crypt только здесь, в документации.
Для большинства частных пользователей достаточно tls-crypt, приведенного здесь.

Дополнительные пояснения здесь: Openvpn24ManPage, serverfault.com, security.stackexchange.com, github.com/OpenVPN ... tls-crypt-v2.txt

Создано: ~/EasyRSA-3.0.8/ta.key

  12.
Скопируйте сертификаты и ключи, относящиеся к серверу, в папку /etc/openvpn/:
cp pki/private/server.key /etc/openvpn/
cp pki/issued/server.crt /etc/openvpn/
cp pki/ca.crt /etc/openvpn/
cp ta.key /etc/openvpn/


  13.
Сгенерируйте параметры Диффи-Хеллмана:
time ./easyrsa gen-dh

Это может занять час или больше, в зависимости от скорости системы и длины используемого ключа.
Так что возьми кофе... ...и дождитесь повторного появления командной строки.
Загрузка процессора почти 100%, так что смысла продолжать работу немного.
Если у вас есть небольшая Embedded-System с низкой производительностью, рекомендуется заранее создать сертификаты на мощном ПК.
Затем скопируйте готовые сертификаты на целевую систему через защищенное соединение.

Создано: ~/EasyRSA-3.0.8/pik/dh.pem

Дополнительно:
Можно также генерировать еще более сильные параметры Диффи-Хеллмана, поскольку они не зависят от стойкости ключа.
По умолчанию используется значение переменной [EASYRSA_KEY_SIZE] в файле vars.
Любые другие значения (выше и ниже) здесь возможны без проблем. Разумеется, имеет смысл только увеличение.
Используйте любое значение здесь, которое не равно 1024.
Однако шаг увеличения рекомендуется только после того, как все заработает, поэтому используйте значение по умолчанию для первоначальной настройки.
Создайте более сильный файл dh.pem:
time openssl dhparam -out dh8192.pem 8192
# проверено: Ок
time openssl dhparam -out dh8192.pem 13331
# Отклонение х-любое число между 8192 и 16384.
time openssl dhparam -out dh16384.pem 16384
# Проверено: Не рекомендуется. В настоящее время (2015-10-20) не работает ни с одним клиентом Android.

Если вы создали более надежный файл параметров Диффи-Хеллмана, возможно, вам придется скопировать его в соответствующий каталог.
Возможно, вам придется в server.conf снова соответствующий [dh] Изменить запись.
Затем перезапустите OpenVPN, чтобы применить новые настройки.


  14.
Скопируйте файл dh.pem в каталог /etc/openvpn/:
cp pki/dh.pem /etc/openvpn/


Создайте сертификат и ключ для клиента:


  15.
Затем создайте новую папку (вызов необходим только один раз), в которой затем будут храниться клиентские сертификаты и ключи:
mkdir -pv ~/client/keys
# Именно здесь позже будут располагаться клиентские ключи.


  16.
Создайте сертификат клиента.
Сертификаты могут быть созданы с паролем или без него. Сертификат с паролем повышает безопасность, поскольку перед установкой VPN-соединения на клиенте запрашивается дополнительный пароль.

Заранее рекомендую:
При нумерации клиентов я бы не стал начинать с номера 01, так как первый сертификат уже присвоен серверу.
Поэтому в этом руководстве первому клиенту присваивается имя client02.
cd ~/EasyRSA-3.0.8 # Переключитесь на путь.

# Выберите здесь только один вариант:
./easyrsa gen-req client02 nopass
# Создает сертификат клиента без пароля.
./easyrsa gen-req client03
# Создает сертификат клиента с паролем (не менее 4 символов).


Для сертификатов с паролем [Enter PEM pass phrase] и в [Verifying] желаемое пароль войти и каждый с Enter подтверждать.
Этот пароль (phrase) должны Пользователь клиента, затем при создании VPN-соединение вводить каждый раз.
Вход в [Common Name] с Enter подтверждать.

Подсказка:
Если вы хотите создать больше сертификатов, вы можете сделать это сейчас.
Здесь вы меняете только имя clientXX (например, подсчитывая в большую сторону - моя рекомендация)
и просто снова вызовите скрипт.

Дополнительное примечание:
OpenVPN считает в шестнадцатеричном формате.
После client09 следует client0A.
Поэтому лучше всего использовать следующий метод подсчета:
02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 ...

Если вы не знаете, какое число будет следующим, посмотрите в файле EasyRSA-3.0.8/pki/index.txt.
Все сертификаты четко перечислены в этом файле. Особенно, если в vars файл переменной [set_var EASYRSA_DN] на ["org"] установил, обзор потом легко.

Создано: /root/EasyRSA-3.0.8/pki/reqs/clientxx.key und /root/EasyRSA-3.0.8/pki/private/clientxx.key


  17.
Затем подпишите запрос на сертификат для клиента с помощью следующей команды:
./easyrsa sign-req client client02

Здесь yes введите и подтвердите Enter подтвердить.

Создано: /root/EasyRSA-3.0.8/pki/issued/clientxx.crt

  18.
Скопируйте сертификаты и ключи, необходимые для клиента, в папку ~/client/keys/:
cp pki/private/client02.key ~/client/keys/
cp pki/issued/client02.crt ~/client/keys/
cp /etc/openvpn/ca.crt ~/client/keys/
cp ta.key ~/client/keys/


Подсказка: Соответствующим образом корректирует имена/номера клиентских сертификатов/ключей перед копированием.


Сертификаты сервера и клиента теперь готовы к использованию.

Для установления соединения клиенту необходимы следующие файлы:
~/client/keys/clientxx.key ~/client/keys/clientxx.crt ~/client/keys/ca.crt ~/client/keys/ta.key ~/client/client.conf # Файл создается здесь.

Теперь вы можете скопировать указанные здесь файлы по отдельности в каталог клиента OpenVPN:
В Windows, например, это будет каталог: [c:\Users\UserName\OpenVPN\config\]
Подсказка: Чтобы упростить копирование, эти отдельные файлы сертификатов клиентов и ключи можно объединить в один файл .ovpn (рекомендуется).

Подсказка:
Однако сначала необходимо создать конфигурации сервера и клиента.
Поэтому при первой настройке сначала следуйте непрерывной документации.

Die Server Konfiguration erstellen:


  19.
Далее необходимо настроить службу OpenVPN на использование всех сертификатов, которые вы создали ранее.
Скопируйте и распакуйте пример файла конфигурации с сервера OpenVPN в каталог /etc/openvpn:
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gzip -dkv /etc/openvpn/server.conf.gz


  20.
Адаптируйте файл server.conf:
nano /etc/openvpn/server.conf          
# в терминале/без GUI
nohup pluma /etc/openvpn/server.conf &
# в рабочем столе/с GUI


Настройте файл server.conf следующим образом:
(обратите внимание на синие комментарии и оптимизированные версии после):
# Опасность: Эта строка должна быть добавлена только при использовании протокола UDP. fragment 1200 # Запись должна совпадать 1:1 с записью в файле конфигурации клиента client.conf. # Обратите внимание: Слишком высокие значения фрагментов делают соединение нестабильным. # Если значение слишком велико, соединение устанавливается. Однако данные не могут быть переданы. # Типичным симптомом является то, что соединение можно использовать только в течение нескольких секунд, или как только вы хотите передать данные, соединение как бы разрывается. # И это несмотря на то, что соединение все еще установлено. У меня был хороший опыт с предустановленным значением 1200. # Я рекомендую использовать протокол TCP, поскольку в нем меньше потерь пакетов, хотя накладные расходы на пакеты при использовании TCP несколько выше. ################################################# # Sample OpenVPN 2.0 config file for # # multi-client server. # # # # This file is for the server side # # of a many-clients <-> one-server # # OpenVPN configuration. # # # # OpenVPN also supports # # single-machine <-> single-machine # # configurations (See the Examples page # # on the web site for more info). # # # # This config should work on Windows # # or Linux/BSD systems. Remember on # # Windows to quote pathnames and use # # double backslashes, e.g.: # # "C:\\Program Files\\OpenVPN\\config\\foo.key" # # # # Comments are preceded with '#' or ';' # ################################################# # Which local IP address should OpenVPN # listen on? (optional) ;local a.b.c.d # Which TCP/UDP port should OpenVPN listen on? # If you want to run multiple OpenVPN instances # on the same machine, use a different port # number for each one. You will need to # open up this port on your firewall. port 1194 # Порт должен совпадать 1:1 со спецификацией в client.conf.. # Опционально: # port 443 - HTTPS (протокол передачи гипертекста через SSL/TLS с TCP) или любой другой свободный порт от 0 до 65535. # TCP or UDP server? ;proto tcp proto udp # Протокол должен совпадать 1:1 со спецификацией в client.conf. # Опционально: proto tcp/udp4/tcp4 # udp4/tcp4 означает, что соответствующий протокол используется только через IPv4. # Важно: Обратите внимание на дополнительные инструкции в конце этого файла примера (disable explicit-exit-notify 1 в конце). # "dev tun" will create a routed IP tunnel, # "dev tap" will create an ethernet tunnel. # Use "dev tap0" if you are ethernet bridging # and have precreated a tap0 virtual interface # and bridged it with your ethernet interface. # If you want to control access policies # over the VPN, you must create firewall # rules for the the TUN/TAP interface. # On non-Windows systems, you can give # an explicit unit number, such as tun0. # On Windows, use "dev-node" for this. # On most systems, the VPN will not function # unless you partially or fully disable # the firewall for the TUN/TAP interface. ;dev tap dev tun # Windows needs the TAP-Win32 adapter name # from the Network Connections panel if you # have more than one. On XP SP2 or higher, # you may need to selectively disable the # Windows firewall for the TAP adapter. # Non-Windows systems usually don't need this. ;dev-node MyTap # SSL/TLS root certificate (ca), certificate # (cert), and private key (key). Each client # and the server must have their own cert and # key file. The server and all clients will # use the same ca file. # # See the "easy-rsa" directory for a series # of scripts for generating RSA certificates # and private keys. Remember to use # a unique Common Name for the server # and each of the client certificates. # # Any X509 key management system can be used. # OpenVPN can also use a PKCS #12 formatted key file # (see "pkcs12" directive in man page). ca ca.crt cert server.crt key server.key # This file should be kept secret # Diffie hellman parameters. # Generate your own with: # openssl dhparam -out dh2048.pem 2048 dh dh2048.pem # изменение в 'dh dh.pem' # Network topology # Should be subnet (addressing via IP) # unless Windows clients v2.0.9 and lower have to # be supported (then net30, i.e. a /30 per client) # Defaults to net30 (not recommended) ;topology subnet # Configure server mode and supply a VPN subnet # for OpenVPN to draw client addresses from. # The server will take 10.8.0.1 for itself, # the rest will be made available to clients. # Each client will be able to reach the server # on 10.8.0.1. Comment this line out if you are # ethernet bridging. See the man page for more info. server 10.8.0.0 255.255.255.0 # Maintain a record of client <-> virtual IP address # associations in this file. If OpenVPN goes down or # is restarted, reconnecting clients can be assigned # the same virtual IP address from the pool that was # previously assigned. ifconfig-pool-persist /var/log/openvpn/ipp.txt # Configure server mode for ethernet bridging. # You must first use your OS's bridging capability # to bridge the TAP interface with the ethernet # NIC interface. Then you must manually set the # IP/netmask on the bridge interface, here we # assume 10.8.0.4/255.255.255.0. Finally we # must set aside an IP range in this subnet # (start=10.8.0.50 end=10.8.0.100) to allocate # to connecting clients. Leave this line commented # out unless you are ethernet bridging. ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 # Configure server mode for ethernet bridging # using a DHCP-proxy, where clients talk # to the OpenVPN server-side DHCP server # to receive their IP address allocation # and DNS server addresses. You must first use # your OS's bridging capability to bridge the TAP # interface with the ethernet NIC interface. # Note: this mode only works on clients (such as # Windows), where the client-side TAP adapter is # bound to a DHCP client. ;server-bridge # Push routes to the client to allow it # to reach other private subnets behind # the server. Remember that these # private subnets will also need # to know to route the OpenVPN client # address pool (10.8.0.0/255.255.255.0) # back to the OpenVPN server. ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" # Здесь необходимо ввести сетевую область VPN-сервера (подсеть и маску подсети). # Если вы хотите получить доступ к внутренней сети за VPN-сервером # можно push "route x.x.x.0 255.255.255.0" или "push "redirect-gateway def1 ..." (скоро появится параметр) использовать. # # Вы должны выбрать только один вариант здесь. Теперь, где различия? # # С помощью 'push "route..." можно получить доступ к сети за сервером. # Прямой доступ (через IP-адрес) к другим ПК в сети VPN-сервера возможен без каких-либо проблем. # Однако вся дальнейшая передача данных направляется через стандартный шлюз от клиента. # Поэтому обычный интернет-трафик на клиенте не направляется через VPN-туннель, когда выбрана опция "push "route ...". # # С помощью 'push "redirect-gateway def1 ..."' вся передача данных направляется через стандартный шлюз от клиента. # Это рекомендуется, например, для обхода блокировки видеоплатформ/служб потокового вещания, заблокированных интернет-сервисов, новостных служб из мира и интернет-регулирования государственной цензуры. # ПК и сетевая техника за сервером могут быть доступны через шлюз (по IP-адресу). # Весь интернет-трафик клиента направляется через VPN-туннель. # To assign specific IP addresses to specific # clients or if a connecting client has a private # subnet behind it that should also have VPN access, # use the subdirectory "ccd" for client-specific # configuration files (see man page for more info). # EXAMPLE: Suppose the client # having the certificate common name "Thelonious" # also has a small subnet behind his connecting # machine, such as 192.168.40.128/255.255.255.248. # First, uncomment out these lines: ;client-config-dir ccd ;route 192.168.40.128 255.255.255.248 # Then create a file ccd/Thelonious with this line: # iroute 192.168.40.128 255.255.255.248 # This will allow Thelonious' private subnet to # access the VPN. This example will only work # if you are routing, not bridging, i.e. you are # using "dev tun" and "server" directives. # EXAMPLE: Suppose you want to give # Thelonious a fixed VPN IP address of 10.9.0.1. # First uncomment out these lines: ;client-config-dir ccd ;route 10.9.0.0 255.255.255.252 # Then add this line to ccd/Thelonious: # ifconfig-push 10.9.0.1 10.9.0.2 # Suppose that you want to enable different # firewall access policies for different groups # of clients. There are two methods: # (1) Run multiple OpenVPN daemons, one for each # group, and firewall the TUN/TAP interface # for each group/daemon appropriately. # (2) (Advanced) Create a script to dynamically # modify the firewall in response to access # from different clients. See man # page for more info on learn-address script. ;learn-address ./script # If enabled, this directive will configure # all clients to redirect their default # network gateway through the VPN, causing # all IP traffic such as web browsing and # and DNS lookups to go through the VPN # (The OpenVPN server machine may need to NAT # or bridge the TUN/TAP interface to the internet # in order for this to work properly). ;push "redirect-gateway def1 bypass-dhcp" # Направляйте весь сетевой трафик из веб-браузера, поиск DNS и т.д. через сеть VPN (необязательно). # Активация рекомендуется, если вы хотите получить доступ к заблокированным услугам. # Certain Windows-specific network settings # can be pushed to clients, such as DNS # or WINS server addresses. CAVEAT: # http://openvpn.net/faq.html#dhcpcaveats # The addresses below refer to the public # DNS servers provided by opendns.com. ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" # Включает разрешение имен DNS, '208.67.222.222' und '208.67.220.220' IP-адреса OpenDNS Server. # Здесь вы также можете указать свои или другие публичные DNS-серверы, вот несколько примеров: # ----------------+----------------------------------------------------------------------------- # 1.1.1.1 | Cloudflare und APNIC # 1.0.0.1 | Cloudflare und APNIC 1.1.1.1 # 8.8.4.4 | google-public-dns-b.google.com developers.google.com/speed/public-dns/ # 8.8.8.8 | google-public-dns-a.google.com # 9.9.9.9 | malware blocklist, DNSSEC validation (рекомендуется) Global Cyber Alliance (GCA) и другие партнеры quad9.net # 9.9.9.10 | send EDNS client subnet (no features) # 9.9.9.11 | malware blocklist, send EDNS client subnet & DNSSEC validation (CDN-Friendly) # 9.9.9.12 | malware blocklist, nxdomain only & DNSSEC validation (IoT-Friendly) # 141.1.1.1 | cns1.cw.net Cable & Wireless (ehemals ECRC) # 194.150.168.168 | dns.as250.net; Berlin/Frankfurt vom ccc.de; alternative opennic.org/ # 213.73.91.35 | dnscache.berlin.ccc.de # 208.67.222.123 | OpenDNS Family Shield (block adult content) # 208.67.220.123 | OpenDNS Family Shield (block adult content) # Дополнительные примечания: # Разрешение имен FQDN работает только в маршрутизируемых сетях, если специально установленный DNS-сервер может отвечать на запросы FQDN. # Обычной широковещательной рассылки NetBIOS для этого недостаточно. # Поэтому здесь вы можете указать не только простой DSL-маршрутизатор или стандартный шлюз. # Запросы FQDN - это не запросы имени хоста, а полностью квалифицированные запросы # Запросы доменных имен (Full Qualified Domain Name) например pc01.meinedomain.local или www.ctaas.de. # Разрешение имени хоста (простого имени ПК) через него невозможно. # Поэтому я не использую эту запись большую часть времени (нет необходимости). Однако это может быть необходимо для обхода блокировок. # Uncomment this directive to allow different # clients to be able to "see" each other. # By default, clients will only see the server. # To force clients to only see the server, you # will also need to appropriately firewall the # server's TUN/TAP interface. ;client-to-client # Uncomment this directive if multiple clients # might connect with the same certificate/key # files or common names. This is recommended # only for testing purposes. For production use, # each client should have its own certificate/key # pair. # # IF YOU HAVE NOT GENERATED INDIVIDUAL # CERTIFICATE/KEY PAIRS FOR EACH CLIENT, # EACH HAVING ITS OWN UNIQUE "COMMON NAME", # UNCOMMENT THIS LINE OUT. ;duplicate-cn # The keepalive directive causes ping-like # messages to be sent back and forth over # the link so that each side knows when # the other side has gone down. # Ping every 10 seconds, assume that remote # peer is down if no ping received during # a 120 second time period. keepalive 10 120 # For extra security beyond that provided # by SSL/TLS, create an "HMAC firewall" # to help block DoS attacks and UDP port flooding. # # Generate with: # openvpn --genkey --secret ta.key # # The server and each client must have # a copy of this key. # The second parameter should be '0' # on the server and '1' on the clients. tls-auth ta.key 0 # This file is secret # Select a cryptographic cipher. # This config item must be copied to # the client config file as well. # Note that v2.4 client/server will automatically # negotiate AES-256-GCM in TLS mode. # See also the ncp-cipher option in the manpage cipher AES-256-CBC # Спецификация должна совпадать 1:1 со спецификацией в client.conf. # Enable compression on the VPN link and push the # option to the client (v2.4+ only, for earlier # versions see below) ;compress lz4-v2 # Опционально: Сжатие данных перед передачей (новая версия). ;push "compress lz4-v2" # Важно: По соображениям безопасности, вам не следует активировать сжатие. # For compression compatible with older clients use comp-lzo # If you enable it here, you must also # enable it in the client config file. ;comp-lzo # The maximum number of concurrently connected # clients we want to allow. ;max-clients 100 # It's a good idea to reduce the OpenVPN # daemon's privileges after initialization. # # You can uncomment this out on # non-Windows systems. ;user nobody ;group nogroup # Удалите 2 знака комментария (;) здесь. # The persist options will try to avoid # accessing certain resources on restart # that may no longer be accessible because # of the privilege downgrade. persist-key persist-tun # Output a short status file showing # current connections, truncated # and rewritten every minute. status /var/log/openvpn/openvpn-status.log # By default, log messages will go to the syslog (or # on Windows, if running as a service, they will go to # the "\Program Files\OpenVPN\log" directory). # Use log or log-append to override this default. # "log" will truncate the log file on OpenVPN startup, # while "log-append" will append to it. Use one # or the other (but not both). ;log /var/log/openvpn/openvpn.log ;log-append /var/log/openvpn/openvpn.log # Set the appropriate level of log # file verbosity. # # 0 is silent, except for fatal errors # 4 is reasonable for general usage # 5 and 6 can help to debug connection problems # 9 is extremely verbose verb 3 # Silence repeating messages. At most 20 # sequential messages of the same message # category will be output to the log. ;mute 20 # Notify the client that when the server restarts so it # can automatically reconnect. explicit-exit-notify 1 # Важно: Если вы используете TCP (вместо UDP) в качестве протокола, # тогда вы должны установить это значение в 0 или закомментировать запись (;) или полностью удалить ее.

Дополнительное примечание: Это оригинальный файл server.conf. Этот файл был дополнен некоторыми комментариями.
Примечание: Здесь адаптированы только необходимые изменения для функционирования VPN-соединения.
Для повышения безопасности используйте настройки из следующих оптимизированных конфигураций.


Оптимизированный server.conf с UDP-Protokoll (для Copy & Paste):
## Резюме UDP-Version с краткими комментариями со всеми важными параметрами и настройками для большей безопасности. ## fragment 1200 # Фрагментация пакетов для UDP. Для UDP обязательно добавьте. remote-cert-tls client # Предотвращает атаки типа "человек посередине". tls-version-min 1.2 # Сервер принимает только TLS (Transport Layer Security) версии 1.2 или выше. # Это запрещает переход на более слабый стандарт шифрования, что в свою очередь повышает безопасность. # Локальная реализация SSL должна поддерживать это. Обычно это работает без проблем, поэтому всегда используйте это. auth SHA512 # Аутентификация HMAC была увеличена с SHA1 (по умолчанию) до SHA512 в целях безопасности. port 1194 # При необходимости настройте порт здесь. Альтернативные варианты UDP: 123 NTP, 53 DNS proto udp4 # UDP через IPv4. dev tun # Routing im OSI Layer 3. ca ca.crt # Путь к сертификатам/ключам и файлу обмена ключами Диффи-Хеллманна (dh.pem). cert server.crt key server.key dh dh.pem server 10.8.0.0 255.255.255.0 # Диапазон IP-адресов в сети VPN. ifconfig-pool-persist /var/log/openvpn/ipp.txt # Сохраняет IP-адреса клиентов. # Разрешить доступ к сети за сервером. Здесь вам нужно выбрать только один вариант: ;push "route 192.168.20.0 255.255.255.0" # Перенаправлять только определенный сетевой трафик через маршрутизацию (адаптируйте сетевой диапазон здесь). push "redirect-gateway def1 bypass-dhcp" # Или направить весь сетевой трафик через сеть VPN (рекомендуется/простой вариант). keepalive 10 120 # Проверяет, есть ли связь. Повторное подключение через 120 секунд. tls-crypt ta.key # Добавляйте подписи HMAC к пакетам -> повышайте безопасность. Заменяет параметр tls-auth ta.key 0. # Отсутствующий 0 правильный. Указание «направления ключа 0» также больше не требуется для tls-crypt. # Важно: Здесь вы можете использовать только один вариант, то есть либо tls-crypt (рекомендуется), либо tls-auth (устаревший). cipher AES-256-GCM # Установить шифрование. Подробнее о: "openvpn --show-ciphers" ;compress lz4-v2 # Опционально: Сжатие данных перед передачей. ;push "compress lz4-v2" # По соображениям безопасности не следует включать сжатие. user nobody # Ограничение прав на сервере -> повысить безопасность. group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log # Лог-файл с текущими подключениями. # Опционально: Раздельное ведение журнала. Обратите внимание, активируйте только одну запись здесь: ;log /var/log/openvpn/openvpn.log # Либо ведение журнала всегда в новый файл журнала. ;log-append /var/log/openvpn/openvpn.log # Или файл журнала всегда продолжается. verb 3 # Установите уровень детализации файла журнала от 0-9, 2-4 рекомендуется, 5-9 только для отладки.


оптимизированный server.conf с TCP-Protokoll (für Copy & Paste empfohlen) 👍:
## Резюме TCP-Version с краткими комментариями со всеми важными параметрами и настройками для большей безопасности. ## remote-cert-tls client # Предотвращает атаки типа «человек посередине». tls-version-min 1.2 # Сервер принимает только версию TLS (Transport Layer Security) начиная с версии 1.2. # Это запрещает переход на более слабый стандарт шифрования, что в свою очередь повышает безопасность. # Локальная реализация SSL должна поддерживать это. Обычно это работает без проблем, поэтому всегда используйте это. auth SHA512 # Аутентификация HMAC была увеличена с SHA1 (по умолчанию) до SHA512 в целях безопасности. port 1194 # При необходимости отрегулируйте порт здесь. Рекомендуется: 443 HTTPS. Стандартный порт 1194 может быть заблокирован в иностранных заведениях (кафе и т.д.). # Альтернативы TCP: 80 HTTP, 465 SSL/TLS-SMTP, 587 TLS/STARTTLS SMTP, 995 SSL/TLS-POP3, 993 SSL/TLS-IMAP, 53 DNS, 22 SSH, 21 FTP. ;port-share x.x.x.x port # Используйте только в том случае, если вы уже запустили другое приложение, например, HTTPS-сервер на порту 443. # Соединение порта, поступающее извне, теперь сначала направляется на сервер OpenVPN. Сервер OpenVPN обрабатывает # таким образом только один раз все входящие пакеты. Пакеты, не относящиеся к OpenVPN, отправляются автоматически через прокси # Перенаправлено на указанный IP-адрес + порт (например port-share 192.168.20.40 443). Примечание: в настоящее время # поддерживается только перенаправление HTTP/HTTPS (80/443) (другие протоколы могут работать без каких-либо гарантий). proto tcp4 # TCP über IPv4. dev tun # Routing im OSI Layer 3. ca ca.crt # Пути к сертификатам/ключам и файлу обмена ключами Диффи-Хеллмана (т.е..pem). cert server.crt key server.key dh dh.pem server 10.8.0.0 255.255.255.0 # Диапазон IP-адресов в сети VPN. ifconfig-pool-persist /var/log/openvpn/ipp.txt # Сохраняет IP-адреса клиентов. # Разрешить доступ к сети за сервером. Здесь вам нужно выбрать только один вариант: ;push "route 192.168.20.0 255.255.255.0" # Передавать через маршрутизацию только определенный сетевой трафик (настройте здесь диапазон сетей). push "redirect-gateway def1 bypass-dhcp" # Или направить весь сетевой трафик через сеть VPN (рекомендуемый/простой вариант). keepalive 10 120 # Проверяет, существует ли соединение. Переподключается через 120 секунд. tls-crypt ta.key # Добавление HMAC-подписей к пакетам -> повышение безопасности. Заменяет параметр 'tls-auth ta.key 0'. # Отсутствующий 0 является правильным. Спецификация 'key-direction 0' также больше не нужна в tls-crypt. # Важно: Здесь вы можете использовать только один вариант, то есть либо tls-crypt (рекомендуется), либо tls-auth (устаревший). cipher AES-256-GCM # Установить шифрование. Подробнее о: "openvpn --show-ciphers" ;compress lz4-v2 # Опционально: Сжатие данных перед передачей. ;push "compress lz4-v2" # По соображениям безопасности не следует активировать сжатие. user nobody # Ограничение прав на сервере -> повышение безопасности. group nogroup persist-key persist-tun status /var/log/openvpn/openvpn-status.log # Файл журнала с текущими соединениями. # Опционально: Раздельное ведение журнала. Обратите внимание, активируйте только одну запись здесь: ;log /var/log/openvpn/openvpn.log # Ведение журнала всегда в новый файл журнала. ;log-append /var/log/openvpn/openvpn.log # Или файл журнала всегда продолжается. verb 3 # Установите уровень детализации файла журнала от 0-9, 2-4 рекомендуется, 5-9 только для отладки.


Дополнительные необязательные параметры:
# OpenVPN использует TLS для защиты канала управления, по которому происходит обмен ключами, используемыми для защиты фактического VPN-трафика. # Задание списка всех допустимых стандартов tls-шифров: tls-ciphersuites TLS_AES_256_GCM_SHA384 # TLS1.3 Стандарт - Очень безопасное значение примера, Stand: 2021. Подсказка: OpenVPN Ubuntu Server 20.04 использует это автоматически. tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384 # TLS1.2 Стандарт - Очень безопасное значение примера, Stand: 2021. # Если необходимо включить несколько стандартов, то они указываются один за другим через двоеточие. # Команда: "openvpn --show-tls" показывает все поддерживаемые шифры TLS, поддерживаемые библиотекой Crypto (как для TLS1.2, так и для TLS1.3). # Список сортируется от самого высокого предпочтения (самого безопасного) до самого низкого. # Важно: Пожалуйста, действуйте осторожно. Неправильная информация может значительно снизить безопасность или даже полностью предотвратить подключение. # OpenVPN обычно самостоятельно согласовывает наилучшее возможное (наивысшее) шифрование. # Поэтому я не указывал конкретный стандарт tls-шифра в оптимизированных конфигурационных файлах, опубликованных здесь (не использовать эти параметры - моя рекомендация). # Обратите внимание, что такие стандарты могут измениться в любой момент в связи с дальнейшим развитием событий. # Если вы используете фиксированную информацию здесь, вам следует время от времени проверять ее (самое позднее - при обновлении сервера/программного обеспечения) и при необходимости корректировать.


  21.
IPv4-Forwarding (routing) активировать:
nano /etc/sysctl.conf  # в терминале/без GUI
pluma /etc/sysctl.conf # в рабочем столе/с GUI


Удалите знак комментария (хэш '#') в начале следующей записи.:
...
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
...


  22.
Чтобы немедленно применить настройки IP-переадресации, используйте следующую команду:
sysctl -p

В качестве альтернативы Перезагрузка системы, например, с [reboot].

  23.
Узнайте имя сетевого подключения по умолчанию:
ip route show default
# Отображает информацию о сетевом соединении по умолчанию.
ip route show default | awk '/default/ {print $5}'
# Определяет имя стандартного сетевого подключения через 5-ю (5. string) строку, так напримерeth0, enp0s3, enp0s10f0 и т.д.

Дополнительно Подсказка:
В новых виртуальных средах часто задаются следующие стандартные сетевые подключения:
enp0s3 под VirtualBox Oracle.
enp0s10f0 под Hyper-V Microsoft.
Показанное здесь решение VPN можно также легко установить в VirtualBox или Hyper-V..

  24.
Weiterleiten von Paketen an das Server-Gateway/NAT (Network Address Translation).
Реализуйте пересылку в сеть, лежащую за сетью сервера (подсеть сервера).
Пакеты, поступающие из подсети VPN/сети 10.8.0.0, направляются во внутреннюю сеть сервера (здесь например, в enp0s3).
Настройте параметры iptable:
nano /etc/ufw/before.rules 
# в терминале/без GUI
pluma /etc/ufw/before.rules
# в рабочем столе/с GUI


В самом начале после 'ufw-before-forward' вставьте следующее:
... #   ufw-before-output #   ufw-before-forward # Добавьте сюда следующие записи: *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.8.0.0/8 -o enp0s3 -j MASQUERADE COMMIT ...

Обратите внимание, что имя сетевого подключения должно совпадать с именем системы.
Введите имя, которое вы только что нашли для стандартного сетевого подключения.

  25.
В ufw (Uncomplicated Firewall) вы должны разрешить форвардинг (пересылку сетевых пакетов).
Активируйте переадресацию:
nano /etc/default/ufw 
# в терминале/без GUI
pluma /etc/default/ufw
# в рабочем столе/с GUI


Измените здесь следующее значение:
... # Set the default forward policy to ACCEPT, DROP or REJECT. Please note that # if you change this you will most likely want to adjust your rules DEFAULT_FORWARD_POLICY="ACCEPT" # Замените здесь DROP на ACCEPT. ...

Важно: Вы не должны делать здесь никаких дополнительных записей и редактировать запись напрямую..

  26.
Теперь необходимо освободить соответствующие порты в ufw (Uncomplicated Firewall).:
ufw allow 1194/udp
# Используйте протокол UDP или ...
ufw allow 1194/tcp
# Использовать с протоколом TCP. При необходимости настройте порт и используемый протокол соответствующим образом.
ufw allow OpenSSH  
# Необязательный выпуск доступа по SSH (Port 22/TCP).


  27.
Примените настройки брандмауэра и включите автозапуск брандмауэра при перезагрузке системы:
ufw enable  
# Включите брандмауэр и настройте автоматический запуск.
ufw status  
# Отображение состояния брандмауэра (также перечисляет установленные правила).
ufw disable
# Отключите брандмауэр (также после перезагрузки, не рекомендуется).

Подсказка: Другие службы, такие как Samba, Apache, SSH и т. д. также могут быть заблокированы в результате.

дополнительные команды ufw (необязательно):
ufw default deny # Восстановить значение по умолчанию (запретить все). ufw logging low # Установить уровень ведения журналаoff, low, medium, high und full. Осторожно, размер файла журнала может значительно увеличиться.. tail -F /var/log/ufw.log # Показать файл журнала брандмауэра. ufw status numbered # Перечисляет все пронумерованные правила. ufw delete 1 # Удаляет правило брандмауэра с соответствующим номером, здесь 1. Правило.


  28.
Теперь можно запустить сервер OpenVPN и настроить автозапуск:
systemctl start openvpn@server  
# Запустите сервер OpenVPN.
systemctl enable openvpn@server  
# Включите автоматический запуск при загрузке системы.
systemctl status openvpn@server  
# Отображение текущего состояния службы OpenVPN Server (проверьте, работает ли сервер).
Выйти с помощью кнопки: q.
systemctl restart openvpn@server
# Перезапустите службу OpenVPN Server, чтобы применить изменения (необязательно).
systemctl stop openvpn@server    
# Остановите службу сервера OpenVPN.


Журнал можно просмотреть следующим образом (необязательно):
journalctl -xe
# Особенно полезно в случае ошибок.
Выйти с помощью кнопки: q.


  29.
Проверьте, работает ли VPN-туннель (необязательно):
ip addr show tun0

Когда VPN-туннель готов, вы должны получить такой вывод:
13: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever inet6 fe80::7488:52fa:144d:463/64 scope link stable-privacy valid_lft forever preferred_lft forever


Вы также можете проверить syslog/openvpn.log (необязательно):
tail -F /var/log/syslog
# По умолчанию OpenVPN регистрирует вывод в syslog.
tail -F /var/log/openvpn/openvpn.log
# Если вы активировали раздельное ведение журнала в файле server.conf.



Создайте конфигурацию клиента:


  30.
Далее создайте новую папку, в которой будут сохранены конфигурации клиента:
mkdir -pv ~/client/files
# Все .ovpn сертификаты клиентов позже находятся в этой папке.


  31.
Внешний/назначенный IP-адрес от провайдера< /span> Найдите (доступ в Интернет).
curl https://ctaas.de/curl_ip.php
# Подсказка: Постоянная доступность этой услуги не гарантируется.

В стандартном выводе (в терминале) здесь выводится IP-адрес, присвоенный в данный момент провайдером (это для дозвона сервера важно).

Краткое объяснение:
Скрипт на https://ctaas.de/curl_ip.php содержит только следующее короткий PHP-скрипт:
<?php echo ''.$_SERVER['REMOTE_ADDR']; ?>

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

Только что определенный IP-адрес следует использовать только в том случае, если поставщик назначил вам фиксированный (статический) IP-адрес.
Итак, если IP-адрес всегда один и тот же каждый раз, когда вы звоните (каждый день).
Если провайдер назначает новый (динамический) IP-адрес каждый раз, когда вы коммутируемого доступа в Интернет,
тогда вам нужно использовать службу DynDNS, такую ​​как, например, noip.com, чтобы подключиться к серверам обеспечения.

  32.
Скопируйте файл примера:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client/client.conf


  33.
Отредактируйте client.conf:
nano ~/client/client.conf          
# в терминале/без GUI
nohup pluma ~/client/client.conf &
# в рабочем столе/с GUI


Отредактируйте файл client.conf следующим образом (обратите внимание на синие комментарии или оптимизированные версии):
# Опасность: Эту строку нужно добавлять только при использовании протокола UDP. fragment 1200 # Запись должна соответствовать 1:1 записи в файле конфигурации сервера server.conf. # Следующие две записи должны быть активированы только для клиентов Linux: # script-security 2 # up /etc/openvpn/update-resolv-conf # down /etc/openvpn/update-resolv-conf ############################################## # Sample client-side OpenVPN 2.0 config file # # for connecting to multi-client server. # # # # This configuration can be used by multiple # # clients, however each client should have # # its own cert and key files. # # # # On Windows, you might want to rename this # # file so it has a .ovpn extension # ############################################## # Specify that we are a client and that we # will be pulling certain config file directives # from the server. client # Use the same setting as you are using on # the server. # On most systems, the VPN will not function # unless you partially or fully disable # the firewall for the TUN/TAP interface. ;dev tap dev tun # Windows needs the TAP-Win32 adapter name # from the Network Connections panel # if you have more than one. On XP SP2, # you may need to disable the firewall # for the TAP adapter. ;dev-node MyTap # Are we connecting to a TCP or # UDP server? Use the same setting as # on the server. ;proto tcp proto udp # Протокол должен полностью соответствовать спецификации в server.conf. # Опционально: proto tcp/udp4/tcp4 # udp4/tcp4 означает, что соответствующий протокол используется только через IPv4. # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote my-server-1 1194 # Вместо my-server-1 вы вводите ;remote my-server-2 1194 # собственный статический IP-адрес (x.x.x.x) или собственный идентификатор DynDNS (xyz.noip.com). # 1194 — это спецификация порта, она должна совпадать 1:1 со спецификацией в server.conf. # Choose a random host from the remote # list for load-balancing. Otherwise # try hosts in the order specified. ;remote-random # Keep trying indefinitely to resolve the # host name of the OpenVPN server. Very useful # on machines which are not permanently connected # to the internet such as laptops. resolv-retry infinite # Устанавливает количество повторений # если разрешение удаленного хоста не удается (infinite = бесконечно). # Most clients don't need to bind to # a specific local port number. nobind # Downgrade privileges after initialization (non-Windows only) ;user nobody ;group nogroup # Эти две записи можно активировать только для клиентов Linux. # Try to preserve some state across restarts. persist-key persist-tun # If you are connecting through an # HTTP proxy to reach the actual OpenVPN # server, put the proxy server/IP and # port number here. See the man page # if your proxy server requires # authentication. ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #] # Wireless networks often produce a lot # of duplicate packets. Set this flag # to silence duplicate packet warnings. ;mute-replay-warnings # SSL/TLS parms. # See the server config file for more # description. It's best to use # a separate .crt/.key file pair # for each client. A single ca # file can be used for all clients. ca ca.crt cert client.crt key client.key # Ссылки на файлы сертификатов приведены здесь (при необходимости скорректируйте пути). # Удалите все ведущие символы комментария (хэш-знак #). # Verify server certificate by checking that the # certicate has the correct key usage set. # This is an important precaution to protect against # a potential attack discussed here: # http://openvpn.net/howto.html#mitm # # To use this feature, you will need to generate # your server certificates with the keyUsage set to # digitalSignature, keyEncipherment # and the extendedKeyUsage to # serverAuth # EasyRSA can do this for you. remote-cert-tls server # If a tls-auth key is used on the server # then every client must also have the key. tls-auth ta.key 1 # Select a cryptographic cipher. # If the cipher option is used on the server # then you must also specify it here. # Note that v2.4 client/server will automatically # negotiate AES-256-GCM in TLS mode. # See also the ncp-cipher option in the manpage cipher AES-256-CBC # Спецификация должна совпадать 1:1 со спецификацией в файле server.conf. # Enable compression on the VPN link. # Don't enable this unless it is also # enabled in the server config file. #comp-lzo # Устаревший вариант (больше не рекомендуется). ;compress lz4-v2 # Опционально: Сжатие данных перед передачей (новая версия, при необходимости добавить запись). # Важно: По соображениям безопасности вам следует используйте параметр Не включать сжатие. # Set log file verbosity. verb 3 # Silence repeating messages ;mute 20

Дополнительно Подсказка: Это исходный файл client.conf. Файл дополнен некоторыми комментариями.
Обратите внимание: здесь внесены только необходимые изменения для рабочего VPN-подключения.
Примените настройки из следующих оптимизированных конфигураций для повышения безопасности.


Оптимизирован client.conf с протоколом UDP (для копирования & вставки):
## Обобщенная версия UDP client.conf с краткими комментариями со всеми важными параметрами и настройками для большей безопасности. ## fragment 1200 # Фрагментация пакетов для UDP. Обязательно добавьте его в UDP. auth-nocache # Не кэшируйте пароль сертификата в оперативной памяти. auth SHA512 # По соображениям безопасности аутентификация HMAC была увеличена с SHA1 (по умолчанию) до SHA512. verify-x509-name server name # Предотвращает атаки типа «человек посередине». Здесь вы должны использовать общее имя (CN) для сертификата сервера. # Подсказка: В этом руководстве CN сервера — это просто "server". client # конфигурация клиента. dev tun # Routing im OSI Layer 3/Маршрутизация на третьем уровне OSI. proto udp4 # UDP через IPv4. remote x.x.x.x 1194 # Введите общедоступный IP-адрес (x.x.x.x) или идентификатор DynDNS для VPN-сервера и используемый порт. resolv-retry infinite # Повторяйте установление соединения бесконечно в случае возникновения ошибок. Альтернативно, спецификация в секундах (длительность попыток). nobind ;user nobody # Ограничение прав на сервере -> повысить безопасность. Эти записи следует активировать только для клиентов Linux. ;group nogroup persist-key persist-tun ca ca.crt # Информация о пути для сертификатов/ключей. cert client.crt key client.key remote-cert-tls server # Предотвращает атаки типа «человек посередине». tls-crypt ta.key # Добавляйте подписи HMAC к пакетам -> повышайте безопасность. Заменяет параметр 'tls-auth ta.key 1'. # Отсутствующий 1 так правильно. Также в tls-crypt больше нет необходимости указывать 'key-direction 1'. # Важно: Здесь можно использовать только один вариант, т.е. либо tls-crypt (рекомендуется), либо tls-auth (устаревший). cipher AES-256-GCM # Verschlüsselung festlegen. Weitere über: "openvpn --show-ciphers". ;compress lz4-v2 # Опционально: Komprimierung der Daten vor der Übertragung. Aus Sicherheitsgründen sollte man die Komprimierung nicht aktivieren. verb 3 # Detailgrad des Logfiles festlegen von 0-9, 2-4 empfohlen, 5-9 nur für Debug.


Оптимизирован файл client.conf с использованием TCP-Protokoll (для копирования & вставки рекомендуется) 👍:
## Краткое описание TCP-версии client.conf с короткими комментариями со всеми важными параметрами и корректировками для большей безопасности. ## auth-nocache # Не кэшируйте пароль сертификата в оперативной памяти. auth SHA512 # Аутентификация HMAC была увеличена с SHA1 (стандартного) до SHA512 по соображениям безопасности. verify-x509-name server name # Предотвращает атаки типа "человек посередине". Здесь должно использоваться общее имя (CN) сертификата сервера. # Подсказка: В этом руководстве CN сервера — это просто «server». client # Конфигурация клиента. dev tun # Маршрутизация на уровне 3 OSI. proto tcp4 # TCP через IPv4. remote x.x.x.x 1194 # Введите публичный IP-адрес (x.x.x.x) или идентификатор DynDNS для VPN-сервера и используемый порт. resolv-retry infinite # Повторять установку соединения бесконечно часто в случае возникновения ошибок. В качестве альтернативы укажите в секундах (продолжительность попыток). nobind ;user nobody # Ограничение прав на сервере -> повышение безопасности. Эти записи должны быть активированы только для клиентов Linux. ;group nogroup persist-key persist-tun ca ca.crt # Информация о пути к сертификатам/ключам. cert client.crt key client.key remote-cert-tls server # Предотвращает атаки типа "человек посередине". tls-crypt ta.key # Добавляет HMAC-подписи в пакеты -> повышает безопасность. Заменяет параметр 'tls-auth ta.key 1'. # Отсутствующая 1 верна. Указание 'key-direction 1' также больше не требуется в tls-crypt. # Важно: Здесь может использоваться только один вариант, т.е. либо tls-crypt (рекомендуется), либо tls-auth (устаревший). cipher AES-256-GCM # Установите шифрование. Подробнее: "openvpn --show-ciphers". ;compress lz4-v2 # Опционально: Сжатие данных перед передачей. По соображениям безопасности не следует включать сжатие. verb 3 # Установите уровень детализации файла журнала от 0 до 9, рекомендуется 2-4, 5-9 только для отладки.


Клиентский скрипт для создания .ovpn файла:


  34.
Обобщите файлы конфигурации:
Различные отдельные файлы могут быть объединены в один файл.
Самый простой способ сделать это - создать следующий сценарий:
nano ~/client/make_client_ovpn.sh 
# в терминале/без GUI
pluma ~/client/make_client_ovpn.sh
# в рабочем столе/с GUI


Вставьте сюда следующее (рекомендуется скопировать и вставить):
#!/bin/bash # $1 это первый передаваемый параметр (имя клиента). # Этот скрипт создает файл *.ovpn для указанного клиента. KEY_DIR=~/client/keys OUT_DIR=~/client/files cat ~/client/client.conf > ${OUT_DIR}/$1.ovpn | echo -e " <ca> \n$(cat ${KEY_DIR}/ca.crt)\n</ca> <cert> \n$(cat ${KEY_DIR}/$1.crt)\n</cert> <key> \n$(cat ${KEY_DIR}/$1.key)\n</key> <tls-crypt>\n$(cat ${KEY_DIR}/ta.key)\n</tls-crypt>" >> ${OUT_DIR}/$1.ovpn


Wichtige Дополнительные примечания:
1. Для ta.key используйте либо «tls-crypt» из OpenVPN 2.4 (как уже указано здесь в скрипте), либо «tls-auth». ' для старых версий.

2. Скопируйте скрипт в точности так, как указано здесь.
Важно: Дополнительные пробелы не могут быть помещены перед сертификатом или ключом в начале.
Все ключи должны присутствовать именно следующим образом:
client.conf # Bсегда соответствующее содержимое файла. <ca> # Правильно: Ключ распознается без пробела. ca.crt # Правильно: Без пробела в начале первой строки. </ca> <cert> clientXX.crt </cert> <key> clientXX.key </key> <tls-crypt> ta.key </tls-crypt>


Обратите внимание на следующее:
Ключи могут вообще не быть найдены, если вы вставите их рядом друг с другом, как показано здесь
или если файл сертификата или ключа начинается с пробела в начале первой строки:
client.conf # Всегда соответствующее содержимое файла. # В заголовке допускаются любые пустые строки и строки комментариев. <ca> # Правильно: без пробелов = ключ распознан. -----BEGIN CERTIFICATE----- # Правильно: Без пробела в начале первой строки. .... ca.crt </ca> <cert> clientXX.crt </cert> <key> # Ошибка 1: Ключи нельзя группировать рядом друг с другом. -----BEGIN PRIVATE KEY----- # Ошибка 2: В начале первой строки есть дополнительный пробел. .... clientXX.key # Таким образом, clientXX.key не найден. </key> # Между записями может быть любое количество пустых строк без каких-либо проблем. <tls-crypt> ta.key </tls-crypt>


Ошибка 1:
Если теги сертификата или ключа объединены в одной строке в файле .ovpn, при установлении соединения может возникнуть следующая ошибка:
Thu Mar 19 14:56:34 2020 OpenVPN GUI>OpenVPN terminated with exit code 1. See the log file for details

В файле журнала появляется следующее сообщение об ошибке:
... Options error: Unrecognized option or missing or extra parameter(s) in client02.ovpn:33: Certificate: (2.4.8) Use --help for more information.

Соединение немедленно прерывается, поскольку программа OpenVPN не может найти ключи или параметры в файле конфигурации.

Ошибка 2:
Если в файле .ovpn перед фактическим сертификатом или ключом в начале содержимого в первой строке имеются дополнительные пробелы, то при установлении соединения может возникнуть следующая ошибка:
... Thu Mar 19 12:43:44 2020 SIGUSR1[soft,private-key-password-failure] received, process restarting Thu Mar 19 12:43:44 2020 MANAGEMENT: >STATE:1584618224,RECONNECTING,private-key-password-failure,,,,, Thu Mar 19 12:43:44 2020 Restart pause, 5 second(s) Thu Mar 19 12:43:49 2020 SIGUSR1[soft,private-key-password-failure] received, process restarting Thu Mar 19 12:43:49 2020 MANAGEMENT: >STATE:1584618229,RECONNECTING,private-key-password-failure,,,,, Thu Mar 19 12:43:49 2020 Restart pause, 5 second(s) ...

Ошибка продолжает повторяться. Также невозможно подключиться.

  35.
Создайте файл конфигурации клиента (.ovpn):
chmod 700 ~/client/make_client_ovpn.sh
# Флаг исполняемости скрипта (необходим только один раз).
~/client/make_client_ovpn.sh client02  
# Создает файл client02.ovpn для пользователя client02 (настройте соответствующим образом).
ls -l ~/client/files/
# Проверьте, был ли создан файл .ovpn для клиента.

Созданный файл .ovpn находится в
папке '~/client/files'.
Теперь для установления соединения клиентам нужен только этот единственный файл .ovpn и, если применимо, соответствующий пароль.

Настройка сервера завершена.

Подключения к журналу (необязательно/рекомендуется):


  36.
Чтобы регистрировать VPN-соединения, нужно добавить несколько записей в файл server.conf.
. Поэтому снова откройте файл server.conf с помощью редактора:
nano /etc/openvpn/server.conf        
# в терминале/без GUI
nohup pluma /etc/openvpn/server.conf
# в рабочем столе/с GUI

Здесь вы добавляете следующие записи в файл server.conf (желательно в самом начале):
script-security 2 # Разрешите выполнение скриптов (требуется для ведения журнала). client-connect /adm/logon.sh # Указанный скрипт запускается на сервере при подключении клиента. Сбор данных: подключенных клиентов, даты, IP и т. д. client-disconnect /adm/logout.sh # Скрипт запускается на сервере при отключении клиента. Сбор данных: отключенные клиенты, дата, IP, продолжительность, трафик и т. д.

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

  37.
Создайте каталог для сценариев журналирования и журнала пользователя:
mkdir -pv /adm


  38.
Создайте скрипт входа в систему (client-connect):
nano  /adm/logon.sh
# в терминале/без GUI
pluma /adm/logon.sh
# в рабочем столе/с GUI

Вставьте сюда следующее:
#!/bin/sh
echo logon , $common_name,
$(date "+%Y-%m-%d, %H:%M"), $trusted_ip >> /adm/userlog.csv.txt

exit 0


  39.
Создайте сценарий выхода из системы (client-disconnect):
nano  /adm/logout.sh
# в терминале/без GUI
pluma /adm/logout.sh
# в рабочем столе/с GUI

Вставьте сюда следующее:
#!/bin/sh
echo logout, $common_name,
$(date "+%Y-%m-%d, %H:%M"), $trusted_ip, $time_duration, $bytes_sent, $bytes_received >> /adm/userlog.csv.txt

exit 0


Пояснения к параметрам:

Я рекомендую использовать запятые в качестве разделителей между значениями, потому что тогда вы сможете легко прочитать этот файл в Microsoft Excel или LibreOffice Calc, например, и обработать его там для дальнейшего анализа.
Расширение файла .txt было выбрано для лог-файла, потому что его можно просматривать непосредственно в веб-браузере.

  40.
Далее вам нужно сделать скрипты исполняемыми:
chmod +x /adm/logon.sh
chmod +x /adm/logout.sh


Если вы установили повышенную безопасность в файле server.conf, т. е. активировали записи «user nobody» и «group nobody», то теперь вам необходимо включить файл журнала для записи.
Если вы этого не сделаете, файл userlog.csv.txt не будет создан, и в файле журнала появится ошибка. '... cannot create /adm/userlog.csv: Permission denied'.

  41.
Создайте пустой файл журнала и настройте права доступа к нему:
touch /adm/userlog.csv.txt    
# Создайте новый пустой файл.
chmod 666 /adm/userlog.csv.txt
# Установите права доступа к файлам.

Важно: Если вам следует удалить файл. Затем вам придется создать его снова с этими разрешениями.

  42.
Чтобы применить настройки ведения журнала, вам необходимо снова перезагрузить сервер OpenVPN:
systemctl restart openvpn@server


Вот краткий пример файла журнала:
logon , client02, 2020-02-04, 13:15, 185.66.194.29 logout, client02, 2020-02-04, 13:16, 185.66.194.29, 29, 5134, 77031 ...


Запись в журнал завершается здесь.

Выпустите протоколы в сети с lighttpd (optional):


  43.
Если вы хотите просматривать файл журнала ежедневно, мы рекомендуем установить тонкий веб-сервер.
Из множества доступных веб-серверов есть lighttpd оказался лучшим кандидатом.
lighttpd [1] [2] в настоящее время является одним из лучших веб-серверов.
lighttpd в настоящее время активно разрабатывается. Таким образом, программное обеспечение является актуальным и безопасным.
Более того, веб-сервер, как следует из названия, «легкий». Это означает, что потребление ресурсов относительно низкое.
Конфигурация также намного проще и рациональнее, чем, например, с веб-сервером Apache Tomcat.
Так что всё говорит в пользу лайттпд (моя рекомендация).

Den Webserver installieren:
sudo apt-get install lighttpd


  44.
Настройте конфигурацию веб-сервера:
nano  /etc/lighttpd/lighttpd.conf
# в терминале/без GUI
pluma /etc/lighttpd/lighttpd.conf
# в рабочем столе/с GUI


Здесь укажите путь и имя файла журнала для отмеченной записи:
... server.modules = ( "mod_indexfile", "mod_access", "mod_alias", "mod_redirect", ) server.document-root = "/adm/userlog.csv.txt" server.upload-dirs = ( "/var/cache/lighttpd/uploads" ) server.errorlog = "/var/log/lighttpd/error.log" server.pid-file = "/var/run/lighttpd.pid" server.username = "www-data" server.groupname = "www-data" server.port = 80 ...


  45.
Чтобы применить изменения, необходимо перезапустить веб-сервер.
Также необходимо настроить брандмауэр, чтобы разрешить доступ в сети:
systemctl restart lighttpd
# Перезапустите веб-сервер.
ufw allow 80/tcp
# Включите доступ к веб-серверу в брандмауэре.


Файл журнала теперь должен быть доступен в веб-браузере через http://127.0.0.1 (localhost) непосредственно на сервере или через http:// x.x.x.x
(настройте IP-адрес локального сервера) можно просмотреть из любой точки локальной сети.
Здесь теперь вы можете в любое время просмотреть различные данные дозвона, продолжительность и объем переданных данных.

Отзыв сертификатов:


  46.
Сертификат клиента или сертификат сервера можно заблокировать, вызвав:
cd ~/EasyRSA-3.0.8
./easyrsa revoke client02

Подтвердите блокировку, введя yes и ENTER.

Важно:
Вызов отзывает сертификат из центра сертификации (CA).
Однако сам сервер OpenVPN не проверяет, были ли заблокированы клиенты.

  47.
С помощью следующего вызова вы создаете необходимый
Список отзыва сертификатов (CRL):
на ПК центра сертификации (CA).
./easyrsa gen-crl


Создано: ~/EasyRSA-3.0.8/pki/crl.pem

  48.
Скопируйте файл crl.pem в папку /etc/openvpn/:
cp ~/EasyRSA-3.06/pki/crl.pem /etc/openvpn/


  49.
Теперь вам нужно обратиться к списку отзыва сертификатов (crl.pem) в файле OpenVPN server.conf:
nano /etc/openvpn/server.conf 
# в терминале/без GUI
pluma /etc/openvpn/server.conf
# в рабочем столе/с GUI

Здесь вам нужно добавить следующую строку:
crl-verify crl.pem # Добавьте эту строку желательно в конец (не важно где).

Важно: Эту запись можно добавить только после отзыва хотя бы одного сертификата.
Если вы активируете запись заранее, вы не сможете установить соединение (OpenVPN больше не запустится).

  50.
Наконец, вам необходимо перезапустить OpenVPN, чтобы принять во внимание заблокированные сертификаты:
systemctl restart openvpn@server

Заблокированные клиенты больше не смогут подключиться.
Уже подключенные клиенты будут на короткое время отключены.

Im Router die Portfreigabe einrichten:


Freigabe im Router einrichten:
Damit der Server auch über das Internet erreichbar ist, muss man im [DSL-Router-im-VPN-Server-Netzwerk]
den verwendeten Port [1194] mit dem verwendeten Protokoll [UDP oder TCP] (entsprechend anpassen) auf die interne [IP-Adresse des OpenVPN-Servers] weiterleiten.
Man muss also eine Portweiterleitung/Port-Forwarding/Portfreigabe im Router einrichten.
Ich stelle hier zwei Varianten vor, einmal mit einer handelsüblichen Fritz!Box und einmal mit einem Business LANCOM Router.

  51.
Den Port gibt man in der Fritz!Box 7590 wie folgt frei:
1. Klickt links im Menü auf [Internet] und [Freigaben].
2. Dann auf den Karteireiter [Portfreigaben] klicken und unten rechts auf [Gerät für Freigaben hinzufügen] klicken.
3. Wählt hier zunächst bei [Gerät] euren VPN-Server aus oder gebt die entsprechenden interne IP-Adresse des VPN-Servers manuell ein.
Klickt hier dann unten rechts auf [Neue Freigabe].
4. In dem sich neu öffnenden Fenster stellt man dann folgendes ein:

Anwendung     [Andere Anwendung]
Bezeichnung   [VPN]
Protokoll     [UDP] = hier UDP oder TCP einstellen.
Port an Gerät [1194] bis Port [1194] = dies ist der Port auf dem der VPN-Server intern lauscht.
Port extern gewünscht [1194] = dies ist der Port über den der VPN-Server später extern erreichbar sein soll.
[] Freigabe aktivieren

5. Das Ganze dann einfach mit [OK] und [Übernehmen] speichern.
6. Wenn alles geklappt hat sollte die Portfreigabe jetzt mit einem grünen Punkt in der Übersicht erscheinen.
Sonstige weitere Routeranpassungen muss man nicht vornehmen.

Zur besseren Verdeutlichung habe ich die Schritte hier noch mal als Animation vorbereitet.
Beachtet auch den Mauszeiger dieser zeigt immer den nächsten Schritt an.
Animation: FritzBox Portfreigabe für OpenVPN Einrichten
Hinweise: Dies ist eine Schritt-für-Schritt-Animation, die Bilder wechseln alle 10 Sekunden automatisch.
Die Animation wird derzeit nur auf Webbrowsern gezeigt die webp Unterstützen (nicht im Internet-Explorer).


  52.
Das Portforwarding im LANCOM R884VA Router einrichten:
LANCOM Router: Port-Forwarding-Tabelle für OpenVPN anpassen
Подсказка: In der Testumgebung wurde hier das TCP- und UDP-Protokoll weitergeleitet. Im produktiven Betrieb reicht es wenn man nur das tatsächlich verwendete Protokoll weiterleitet.

Das Port-Forwarding richtet man über die folgenden Menüpunkte ein:
[Konfiguration], [IP-Router], [Maskierung] und [Port-Forwarding-Tabelle]
Hier unten auf [Hinzufügen] klicken und die entsprechenden Werte eingeben. Der Rest sollte dann klar sein.

Sonstige weitere Routeranpassungen muss man nicht vornehmen.

Die optimale MTU Größe ermitteln:


  53.
Wenn man größere Daten übertragen möchte dann werden diese nicht am Stück übertragen, sondern in viele kleine Datenpakete (fragmente) verpackt.
Die MTU (maximum transmission unit) legt nun fest wie groß die jeweiligen TCP/IP-Datenpakete sind.
Die Datenpakete enthalten dabei nicht nur Daten, sondern eine Vielzahl von weiteren Informationen (Header-Daten) wie Beispielsweise: Quelle, Ziel, Status, Fragmentierung, Prüfsumme.
Daraus kann man ableiten, je größer der MTU-Wert ist, desto günstiger wird das Verhältnis von TCP/IP-Header zu Nutzdaten.
Eine größere MTU würde die Verbindung somit beschleunigen.

Doch Vorsicht!
Datenpakete die zu groß sind werden bei der Übertragung auf Routern (bzw. in der Firewall u. ä.) oft einfach verworfen. Dies trifft vor allem auf verbindungslose UDP-Datenpakete zu.
Zwar könnten Router zu große Datenpakete entsprechend umfragmentieren. Dies wird aber heutzutage häufig nicht mehr durchgeführt, da dies Leistung kostet. Zu große Pakete werden daher in der Regel einfach verworfen.
Das verwerfen von Paketen kann auch unterwegs auf dem Router beim Internetprovider passieren.

Важно: Zu hohe MTU/fragment Werte machen die Verbindung daher ggf. instabil.
Bei einem zu hohem MTU-Wert wird die Verbindung zwar meist aufgebaut. Man kann aber oft nicht vernünftig Daten übertragen.

Typische Symptome sind:

Und all das obwohl die VPN-Verbindung in der Regel nach wie vor steht.

  54.
Wie findet man nun den optimalen MTU-Wert heraus?
Wenn mehrere Verbindungen zur Verfügung stehen (verschiedene Standorte, Mobilfunk, Freifunk usw.) dann testet diese alle.
Beachtet in dem Zuge auch, Routen sind im Internet niemals statisch. Änderungen auch während der Laufzeit sind immer möglich.
Man sollte daher von dem ermittelten Maximalwert ggf. auch eine kleine Reserve für ungeplantes (andere Orte, andere MTU) abziehen.

Beim Ermitteln der optimalen MTU beginnt man zunächst mit einem größeren Wert (1500 bei Standard Ethernet),
diesen verkleinert man nun so lange bis die Pakete nicht mehr fragmentiert werden.
Beachtet dabei, dieser ermittelte Wert ist nur der netto Datenwert (Datenbytes).
Um die optimale MTU zu erhalten fügt man noch 28 Bytes (Header-Bytes) hinzu.
Die Berechnung des optimalen MTU-Wertes (für IPv4) erfolgt daher wie folgt:

nicht_fragmentierter_Ping_Wert + 28 = optimale MTU

  55.
Test unter Windows:
ping -f -l 1252 1.1 # unter Windows

Parametererklärungen:
-f = Pakete nicht fragmentieren (gilt nur für IPv4).
-l 1252 = Bestimmt die Paketgröße. Diese kann man anpassen von 68 (Minimum) bis 1500 (Standard Ethernet).
Man beginnt bei 1500 und verkleinert den Wert so lange bis das Datenpaket nicht mehr fragmentiert wird.
Im Freifunk Netz von saar.freifunk.net ist 1252 (Stand 2020-01-14) die größte Paketgröße (Datenbytes ohne Header).
Wenn man die Verbindung auch Unterwegs (von verschiedenen Standorten aus) nutzen will, dann sollte man die Paketgröße nicht zu hoch einstellen.
Ich habe daher den MTU-Wert oben im Tutorial auf 1200 gesenkt (meine Empfehlung wenn man UDP verwendet/sehr stabiler Betrieb).
Werte bis 1280 sind sicher auch noch für die meisten Ok. Noch höhere Werte können die eben beschriebenen Probleme verursachen.
1.1 ist hier das Ping-Ziel. 1.1 ist dabei die Kurzform von 1.0.0.1.
Man kann hier auch eine andere beliebige Domainnamen wie z. B. www.ctaas.de verwenden.
Screenshot: ping unter Windows fragmentiert mit DF-Flag
Hinweise: Hier ein Beispiel ping unter einer typischen Windows 10 Installation.
Der erste ping mit einer Paketgröße von 1465 schlägt hier fehl. Das Datenpaket müsste hier fragmentiert werden. Was jedoch durch den Parameter -f verboten wurde. Die Datenübertragung schlägt also fehl.
Der zweite ping mit einer Paketgröße von 1464 klappt. Die optimale MTU-Größe wäre hier 1492 (1464 Datenbytes + 28 Header-Bytes).
Beachtet hier aber, dass unterwegs wie z. B. in Hotels, bei mobilen und freien Netzen wie z. B. Freifunk der größte nicht fragmentierte MTU-Wert viel kleiner sein kann.
Im Freifunk Netz von saar.freifunk.net ist der größtmögliche MTU Wert z. B. nur 1280 (1252 Datenbytes + 28 Header-Bytes).


Die MTU-Werte vom Windows System anzeigen:
netsh interface ipv4 show interfaces # unter Windows

netsh Screenshot MTU-Werte vom System anzeigen.
Hinweise: Hier ein Beispiel unter Windows 10 mit installiertem VirtualBox Netzwerkadapter.

  56.
Test unter Linux:
ping -c 4 -s 1464 -M do 1.1 # unter Linux

Parametererklärungen:
-c 4 = (count) Bestimmt die Anzahl der zu sendenden Pakete.
-s 1464 = (size) Legt die Größe der zu sendenden Pakete fest von 68 (Minimum) bis 1500 (Standard Ethernet).
-M do = (pmtudisc_option) Legt die "Path MTU Discovery" variante fest.

Hierbei bedeutet:
do = verbiete überall die Fragmentierung (auch lokal).
want = Führe "Path MTU Discovery" aus, fragmentiere lokal, wenn das Paket zu groß ist.
dont = DF nicht setzen.

1.1 ist hier wieder das Ping-Ziel. 1.1 ist dabei die Kurzform von 1.0.0.1.
Man kann hier auch eine andere beliebige Domainnamen wie z. B. www.ctaas.de verwenden.
ping unter Linux optimalen MTU Wert ermitteln
Hinweise: Hier ein Beispiel ping unter Xubuntu 20.04 LTS.
Der erste ping mit einer Paketgröße von 1465 schlägt hier mit der Meldung: 'ping: lokaler Fehler Nachricht zu lang, ...' fehl.
Das Datenpaket müsste hier fragmentiert werden. Was jedoch durch den Parameter '-M do' verboten wurde. Die Datenübertragung schlägt also fehl.
Beachtet man die Meldung genau, dann fällt einem auf, dass am Ende bereits die maximale MTU ausgegeben wird, hier 'MTU=1492'
Der zweite ping mit einer Paketgröße von 1464 klappt. Die optimale MTU-Größe wäre hier 1492 (1464 Datenbytes + 28 Header-Bytes).


Die MTU-Werte vom Linux System anzeigen:
ip link  # unter Linux - neue Systeme
ifconfig # unter Linux - ältere Systeme

ip link MTU Werte unter Linux anzeigen.
Hinweise: Hier ein Beispiel unter Xubuntu 20.04 LTS mit gestartetem OpenVPN Server (tun0 Netzwerkadapter).

Fazit:
Mit dem hier im Tutorial voreingestellten Wert von 1200 (nur bei UDP) habe ich gute Erfahrungen gemacht.
Tendenziell empfehle ich die Verwendung des TCP-Protokolls, da hier weniger Paketverluste auftreten, auch wenn der Paketoverhead bei TCP etwas größer ist.
Denn die TCP-Pakete werden automatisch an die entsprechende Paketgröße angepasst. Die Geschwindigkeit passt sich somit bei unterschiedlichen Gegebenheiten viel besser an.
Weiterhin muss man bedenken, der Geschwindigkeitsunterschied zwischen UDP und TCP ist dank moderner Internet-Verbindungen heutzutage kaum noch feststellbar.
Früher bei langsamen ISDN oder Modem Verbindungen war dies vielleicht noch ausschlaggebend, heutzutage mit GLAN und MBit Verbindungen kann man dies vernachlässigen.
TCP-Verbindungen sind definitiv stabiler und daher meine Empfehlung.

Fehlermeldungen bei doppelter/mehrfacher Nutzung der Verbindung mit ein und demselben Zertifikat:


  57.

Beachtet bitte das man für jeden User bzw. genauer für jedes Gerät was sich verbinden soll ein separates Zertifikat benötigt.
Hat ein User zwei oder mehre Geräte und möchte sich mit diesen gleichzeitig verbinden dann muss man für jedes Gerät ein separates Zertifikat erzeugen.

Beachtet man dies nicht, so kommt es zu folgendem Verhalten:

Hier zur Verdeutlichung mal ein anonymisiertes Beispiel eines fehlerhaften Logfiles:
2022-11-28 09:03:25 OpenVPN 2.5.8 [git:release/2.5/0357ceb877687faa] Windows-MSVC [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on Nov 11 2022
2022-11-28 09:03:25 Windows version 10.0 (Windows 10 or greater) 64bit
2022-11-28 09:03:25 library versions: OpenSSL 1.1.1s 1 Nov 2022, LZO 2.10
2022-11-28 09:03:25 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340
2022-11-28 09:03:25 Need hold release from management interface, waiting...
2022-11-28 09:03:25 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340
2022-11-28 09:03:25 MANAGEMENT: CMD 'state on'
2022-11-28 09:03:25 MANAGEMENT: CMD 'log on all'
2022-11-28 09:03:25 MANAGEMENT: CMD 'echo on all'
2022-11-28 09:03:25 MANAGEMENT: CMD 'bytecount 5'
2022-11-28 09:03:25 MANAGEMENT: CMD 'state'
2022-11-28 09:03:25 MANAGEMENT: CMD 'hold off'
2022-11-28 09:03:25 MANAGEMENT: CMD 'hold release'
2022-11-28 09:03:37 MANAGEMENT: CMD 'password [...]'
2022-11-28 09:03:37 Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-11-28 09:03:37 Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-11-28 09:03:37 Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-11-28 09:03:37 Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-11-28 09:03:37 TCP/UDP: Preserving recently used remote address: [AF_INET]80.153.75.167:1194
2022-11-28 09:03:37 Socket Buffers: R=[65536->65536] S=[65536->65536]
2022-11-28 09:03:37 Attempting to establish TCP connection with [AF_INET]80.153.75.167:1194 [nonblock]
2022-11-28 09:03:37 MANAGEMENT: >STATE:1669622617,TCP_CONNECT,,,,,,
2022-11-28 09:03:37 TCP connection established with [AF_INET]80.153.75.167:1194
2022-11-28 09:03:37 TCPv4_CLIENT link local: (not bound)
2022-11-28 09:03:37 TCPv4_CLIENT link remote: [AF_INET]80.153.75.167:1194
2022-11-28 09:03:37 MANAGEMENT: >STATE:1669622617,WAIT,,,,,,
2022-11-28 09:03:37 MANAGEMENT: >STATE:1669622617,AUTH,,,,,,
2022-11-28 09:03:37 TLS: Initial packet from [AF_INET]80.153.75.167:1194, sid=5a4de6eb 07743b7f
2022-11-28 09:03:37 VERIFY OK: depth=1, C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=Easy-RSA CA, emailAddress=mail@ctaas.de
2022-11-28 09:03:37 VERIFY KU OK
2022-11-28 09:03:37 Validating certificate extended key usage
2022-11-28 09:03:37 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2022-11-28 09:03:37 VERIFY EKU OK
2022-11-28 09:03:37 VERIFY X509NAME OK: C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=server, emailAddress=mail@ctaas.de
2022-11-28 09:03:37 VERIFY OK: depth=0, C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=server, emailAddress=mail@ctaas.de
2022-11-28 09:03:38 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, peer certificate: 8761 bit RSA, signature: RSA-SHA256
2022-11-28 09:03:38 [server] Peer Connection Initiated with [AF_INET]80.153.75.167:1194
2022-11-28 09:03:38 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 192.168.20.10,dhcp-option DNS 9.9.9.9,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9,peer-id 0,cipher AES-256-GCM'
2022-11-28 09:03:38 OPTIONS IMPORT: timers and/or timeouts modified
2022-11-28 09:03:38 OPTIONS IMPORT: --ifconfig/up options modified
2022-11-28 09:03:38 OPTIONS IMPORT: route options modified
2022-11-28 09:03:38 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
2022-11-28 09:03:38 OPTIONS IMPORT: peer-id set
2022-11-28 09:03:38 OPTIONS IMPORT: adjusting link_mtu to 1626
2022-11-28 09:03:38 OPTIONS IMPORT: data channel crypto options modified
2022-11-28 09:03:38 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-11-28 09:03:38 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-11-28 09:03:38 interactive service msg_channel=456
2022-11-28 09:03:38 open_tun
2022-11-28 09:03:38 tap-windows6 device [OpenVPN TAP-Windows6] opened
2022-11-28 09:03:38 TAP-Windows Driver Version 9.24
2022-11-28 09:03:38 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.8.0.10/255.255.255.252 on interface {8A581024-BC1C-4998-9866-EE30A9E63F21} [DHCP-serv: 10.8.0.9, lease-time: 31536000]
2022-11-28 09:03:38 Successful ARP Flush on interface [8] {8A581024-BC1C-4998-9866-EE30A9E63F21}
2022-11-28 09:03:38 MANAGEMENT: >STATE:1669622618,ASSIGN_IP,,10.8.0.10,,,,
2022-11-28 09:03:38 IPv4 MTU set to 1500 on interface 8 using service
2022-11-28 09:03:43 TEST ROUTES: 2/2 succeeded len=1 ret=1 a=0 u/d=up
2022-11-28 09:03:43 C:\Windows\system32\route.exe ADD 80.153.75.167 MASK 255.255.255.255 10.24.193.3
2022-11-28 09:03:43 Route addition via service succeeded
2022-11-28 09:03:43 C:\Windows\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.0 10.8.0.9
2022-11-28 09:03:43 Route addition via service succeeded
2022-11-28 09:03:43 C:\Windows\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 10.8.0.9
2022-11-28 09:03:43 Route addition via service succeeded
2022-11-28 09:03:43 MANAGEMENT: >STATE:1669622623,ADD_ROUTES,,,,,,
2022-11-28 09:03:43 C:\Windows\system32\route.exe ADD 10.8.0.1 MASK 255.255.255.255 10.8.0.9
2022-11-28 09:03:43 Route addition via service succeeded
2022-11-28 09:03:43 Initialization Sequence Completed
2022-11-28 09:03:43 MANAGEMENT: >STATE:1669622623,CONNECTED,SUCCESS,10.8.0.10,80.153.75.167,1194,10.24.207.56,52002
2022-11-28 09:03:43 Connection reset, restarting [0]
2022-11-28 09:03:43 SIGUSR1[soft,connection-reset] received, process restarting
2022-11-28 09:03:43 MANAGEMENT: >STATE:1669622623,RECONNECTING,connection-reset,,,,,
2022-11-28 09:03:43 Restart pause, 5 second(s)
2022-11-28 09:03:48 Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-11-28 09:03:48 Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-11-28 09:03:48 Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-11-28 09:03:48 Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-11-28 09:03:48 TCP/UDP: Preserving recently used remote address: [AF_INET]80.153.75.167:1194
2022-11-28 09:03:48 Socket Buffers: R=[65536->65536] S=[65536->65536]
2022-11-28 09:03:48 Attempting to establish TCP connection with [AF_INET]80.153.75.167:1194 [nonblock]
2022-11-28 09:03:48 MANAGEMENT: >STATE:1669622628,TCP_CONNECT,,,,,,
2022-11-28 09:03:48 TCP connection established with [AF_INET]80.153.75.167:1194
2022-11-28 09:03:48 TCPv4_CLIENT link local: (not bound)
2022-11-28 09:03:48 TCPv4_CLIENT link remote: [AF_INET]80.153.75.167:1194
2022-11-28 09:03:48 MANAGEMENT: >STATE:1669622628,WAIT,,,,,,
2022-11-28 09:03:48 MANAGEMENT: >STATE:1669622628,AUTH,,,,,,
2022-11-28 09:03:48 TLS: Initial packet from [AF_INET]80.153.75.167:1194, sid=69f19f98 08355026
2022-11-28 09:03:48 VERIFY OK: depth=1, C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=Easy-RSA CA, emailAddress=mail@ctaas.de
2022-11-28 09:03:48 VERIFY KU OK
2022-11-28 09:03:48 Validating certificate extended key usage
2022-11-28 09:03:48 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2022-11-28 09:03:48 VERIFY EKU OK
2022-11-28 09:03:48 VERIFY X509NAME OK: C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=server, emailAddress=mail@ctaas.de
2022-11-28 09:03:48 VERIFY OK: depth=0, C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=server, emailAddress=mail@ctaas.de
2022-11-28 09:03:48 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, peer certificate: 8761 bit RSA, signature: RSA-SHA256
2022-11-28 09:03:48 [server] Peer Connection Initiated with [AF_INET]80.153.75.167:1194
2022-11-28 09:03:48 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 192.168.20.10,dhcp-option DNS 9.9.9.9,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9,peer-id 0,cipher AES-256-GCM'
2022-11-28 09:03:48 OPTIONS IMPORT: timers and/or timeouts modified
2022-11-28 09:03:48 OPTIONS IMPORT: --ifconfig/up options modified
2022-11-28 09:03:48 OPTIONS IMPORT: route options modified
2022-11-28 09:03:48 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
2022-11-28 09:03:48 OPTIONS IMPORT: peer-id set
2022-11-28 09:03:48 OPTIONS IMPORT: adjusting link_mtu to 1626
2022-11-28 09:03:48 OPTIONS IMPORT: data channel crypto options modified
2022-11-28 09:03:48 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-11-28 09:03:48 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-11-28 09:03:48 Preserving previous TUN/TAP instance: OpenVPN TAP-Windows6
2022-11-28 09:03:48 Initialization Sequence Completed
2022-11-28 09:03:48 MANAGEMENT: >STATE:1669622628,CONNECTED,SUCCESS,10.8.0.10,80.153.75.167,1194,10.24.207.56,52013
2022-11-28 09:03:54 Connection reset, restarting [-1]
2022-11-28 09:03:54 SIGUSR1[soft,connection-reset] received, process restarting
2022-11-28 09:03:54 MANAGEMENT: >STATE:1669622634,RECONNECTING,connection-reset,,,,,
2022-11-28 09:03:54 Restart pause, 5 second(s)
2022-11-28 09:03:59 Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-11-28 09:03:59 Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-11-28 09:03:59 Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-11-28 09:03:59 Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-11-28 09:03:59 TCP/UDP: Preserving recently used remote address: [AF_INET]80.153.75.167:1194
2022-11-28 09:03:59 Socket Buffers: R=[65536->65536] S=[65536->65536]
2022-11-28 09:03:59 Attempting to establish TCP connection with [AF_INET]80.153.75.167:1194 [nonblock]
2022-11-28 09:03:59 MANAGEMENT: >STATE:1669622639,TCP_CONNECT,,,,,,
2022-11-28 09:03:59 TCP connection established with [AF_INET]80.153.75.167:1194
2022-11-28 09:03:59 TCPv4_CLIENT link local: (not bound)
2022-11-28 09:03:59 TCPv4_CLIENT link remote: [AF_INET]80.153.75.167:1194
2022-11-28 09:03:59 MANAGEMENT: >STATE:1669622639,WAIT,,,,,,
2022-11-28 09:03:59 MANAGEMENT: >STATE:1669622639,AUTH,,,,,,
2022-11-28 09:03:59 TLS: Initial packet from [AF_INET]80.153.75.167:1194, sid=2e2f4e80 77229c19
2022-11-28 09:03:59 VERIFY OK: depth=1, C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=Easy-RSA CA, emailAddress=mail@ctaas.de
2022-11-28 09:03:59 VERIFY KU OK
2022-11-28 09:03:59 Validating certificate extended key usage
2022-11-28 09:03:59 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2022-11-28 09:03:59 VERIFY EKU OK
2022-11-28 09:03:59 VERIFY X509NAME OK: C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=server, emailAddress=mail@ctaas.de
2022-11-28 09:03:59 VERIFY OK: depth=0, C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=server, emailAddress=mail@ctaas.de
2022-11-28 09:03:59 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, peer certificate: 8761 bit RSA, signature: RSA-SHA256
2022-11-28 09:03:59 [server] Peer Connection Initiated with [AF_INET]80.153.75.167:1194
2022-11-28 09:03:59 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 192.168.20.10,dhcp-option DNS 9.9.9.9,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9,peer-id 0,cipher AES-256-GCM'
2022-11-28 09:03:59 OPTIONS IMPORT: timers and/or timeouts modified
2022-11-28 09:03:59 OPTIONS IMPORT: --ifconfig/up options modified
2022-11-28 09:03:59 OPTIONS IMPORT: route options modified
2022-11-28 09:03:59 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
2022-11-28 09:03:59 OPTIONS IMPORT: peer-id set
2022-11-28 09:03:59 OPTIONS IMPORT: adjusting link_mtu to 1626
2022-11-28 09:03:59 OPTIONS IMPORT: data channel crypto options modified
2022-11-28 09:03:59 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-11-28 09:03:59 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-11-28 09:03:59 Preserving previous TUN/TAP instance: OpenVPN TAP-Windows6
2022-11-28 09:03:59 Initialization Sequence Completed
2022-11-28 09:03:59 MANAGEMENT: >STATE:1669622639,CONNECTED,SUCCESS,10.8.0.10,80.153.75.167,1194,10.24.207.56,64757
2022-11-28 09:04:05 Connection reset, restarting [0]
2022-11-28 09:04:05 SIGUSR1[soft,connection-reset] received, process restarting
2022-11-28 09:04:05 MANAGEMENT: >STATE:1669622645,RECONNECTING,connection-reset,,,,,
2022-11-28 09:04:05 Restart pause, 5 second(s)
2022-11-28 09:04:10 Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-11-28 09:04:10 Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-11-28 09:04:10 Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key
2022-11-28 09:04:10 Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication
2022-11-28 09:04:10 TCP/UDP: Preserving recently used remote address: [AF_INET]80.153.75.167:1194
2022-11-28 09:04:10 Socket Buffers: R=[65536->65536] S=[65536->65536]
2022-11-28 09:04:10 Attempting to establish TCP connection with [AF_INET]80.153.75.167:1194 [nonblock]
2022-11-28 09:04:10 MANAGEMENT: >STATE:1669622650,TCP_CONNECT,,,,,,
2022-11-28 09:04:10 TCP connection established with [AF_INET]80.153.75.167:1194
2022-11-28 09:04:10 TCPv4_CLIENT link local: (not bound)
2022-11-28 09:04:10 TCPv4_CLIENT link remote: [AF_INET]80.153.75.167:1194
2022-11-28 09:04:10 MANAGEMENT: >STATE:1669622650,WAIT,,,,,,
2022-11-28 09:04:10 MANAGEMENT: >STATE:1669622650,AUTH,,,,,,
2022-11-28 09:04:10 TLS: Initial packet from [AF_INET]80.153.75.167:1194, sid=5a0019ad 7902d7d0
2022-11-28 09:04:10 VERIFY OK: depth=1, C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=Easy-RSA CA, emailAddress=mail@ctaas.de
2022-11-28 09:04:10 VERIFY KU OK
2022-11-28 09:04:10 Validating certificate extended key usage
2022-11-28 09:04:10 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2022-11-28 09:04:10 VERIFY EKU OK
2022-11-28 09:04:10 VERIFY X509NAME OK: C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=server, emailAddress=mail@ctaas.de
2022-11-28 09:04:10 VERIFY OK: depth=0, C=DE, ST=TH, L=Kahla, O=Computertechnik, OU=IT-VPN, CN=server, emailAddress=mail@ctaas.de
2022-11-28 09:04:11 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, peer certificate: 8761 bit RSA, signature: RSA-SHA256
2022-11-28 09:04:11 [server] Peer Connection Initiated with [AF_INET]80.153.75.167:1194
2022-11-28 09:04:11 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 192.168.20.10,dhcp-option DNS 9.9.9.9,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.10 10.8.0.9,peer-id 0,cipher AES-256-GCM'
2022-11-28 09:04:11 OPTIONS IMPORT: timers and/or timeouts modified
2022-11-28 09:04:11 OPTIONS IMPORT: --ifconfig/up options modified
2022-11-28 09:04:11 OPTIONS IMPORT: route options modified
2022-11-28 09:04:11 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
2022-11-28 09:04:11 OPTIONS IMPORT: peer-id set
2022-11-28 09:04:11 OPTIONS IMPORT: adjusting link_mtu to 1626
2022-11-28 09:04:11 OPTIONS IMPORT: data channel crypto options modified
2022-11-28 09:04:11 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-11-28 09:04:11 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-11-28 09:04:11 Preserving previous TUN/TAP instance: OpenVPN TAP-Windows6
2022-11-28 09:04:11 Initialization Sequence Completed
2022-11-28 09:04:11 MANAGEMENT: >STATE:1669622651,CONNECTED,SUCCESS,10.8.0.10,80.153.75.167,1194,10.24.207.56,64777
...

Wie man hier im Logfile gut erkennen kann, wurde die Verbindung circa alle 10 Sekunden neu aufgebaut.
Zwischenzeitlich kann man die Verbindung nur wenige ms/s nutzen, da die Verbindung ja ständig wieder getrennt wird.
Das Logfile wurde gekürzt. Das Logfile würde so wie die letzten Abschnitte sind immer wiederholt weiter gehen.

Die Lösung für das Problem ist relativ einfach:
Verwendet für unterschiedliche Geräte die gleichzeitig eine Verbindung benötigen immer einfach ein individuelles Zertifikat.
Dann gibt es keine Probleme.

Abschließende Hinweise:


IP-Adressen, E-Mailadressen, Namen u. ä. wurden für die Dokumentation geändert, hacken ist also zwecklos.
Die Nutzung der Anleitung erfolgt auf eigene Gefahr, für jegliche Schäden wird keine Garantie/Haftung übernommen.
Die Dokumentation entstand aus verschiedenen Tests, sowie produktiven Installationen und stellt eine Zusammenfassung wichtiger und empfohlener Schritte dar.
Bevor sie eventuell Fragen stellen bitte ich sie die Dokumentation komplett zu lesen.
Hinweise auf Fehler, Anregungen, Danksagungen oder ähnliches sind immer willkommen.

Alte Tutorial Versionen finden Sie archiviert hier:
OpenVPN tun/NAT : routing : Layer 3 : Protokollierung - gegeigent für Ubuntu 14.04/14.10 (veraltete Archiv-Version)
OpenVPN tap/NAT : bridging : Layer 2 : Protokollierung - gegeigent für Ubuntu 14.04/14.10 (veraltete Archiv-Version)

Was ist noch geplant?
Demnächst ist noch eine aktuelle bridging Variante geplant, da die alte Version nicht mehr unter den neuen Ubuntu/Debian Versionen funktioniert.
Weiterhin möchte ich demnächst noch die IPv6-Unterstützung und Debian spezifische Eigenheiten ergänzen.
Die Tests hierzu dauern aber noch an.

Design:
© ctaas.de, A. Schröder - Kahla, Impressum