Установка и настройка OpenVPN на Debian 8: различия между версиями

Материал из support.qbpro.ru
imported>Vix
Нет описания правки
imported>Vix
 
(не показаны 53 промежуточные версии 2 участников)
Строка 1: Строка 1:
OpenVPN — это технология, позволяющая обезопасить использование интернета, создавая зашифрованный канал типа «сервер-клиент», и обеспечивающая защищённую передачу информации от сервера OpenVPN до клиента. Отлично подходит в случае использования публичных wifi точек доступа, где информация может быть перехвачена третьими лицами. Или в случае, когда ваш ip заблокирован на определённом сайте и нужно безопасно обойти это ограничение.
===Генерация сертификатов===


Помимо установки и настройки ОпенВПН на сервере, необходимо уметь настроить клиент для доступа с компьютера, где в качестве операционной системы будет использоваться Windows.
'''Генерация сертификатов как [http://support.qbpro.ru/index.php?title=Debian_squeeze_open-vpn здесь].'''
Установка необходимых компонентов
===Подключить репозитории OpenVPN===
'''Подключить [https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos репозиторий] и у меня подключены бэк-порты.'''


Используя стандартный менеджер пакетов, установим openvpn.
''На всякий случай продублирую''


  aptitude install openvpn
  <nowiki>
Using OpenVPN apt repositories
We maintain several OpenVPN (OSS) software repositories. To setup the repositories you need to change to the root user. Typically this is done using sudo:


Создание сертификатов
$ sudo -s
Then import the public GPG key that is used to sign the packages:


ОпенВПН в обязательном порядке требует генерации сертификатов для сервера и клиентов. Это и логично, ведь соединение от клиента до сервера должно быть зашифровано.
$ wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
Next you need to create a sources.list fragment (as root) so that apt can find the new OpenVPN packages. One way to do it is this:


Перейдите в папку openvpn:
$ echo "deb http://build.openvpn.net/debian/openvpn/<version> <osrelease> main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
Where <version> can be one of


cd /etc/openvpn
stable: stable releases only - no alphas, betas or RCs
testing: latest releases, including alphas/betas/RCs
release/2.3: OpenvPN 2.3 releases
release/2.4: OpenVPN 2.4 releases, including alphas/betas/RCs
and <osrelease> depends your distribution:


Генерировать ключи мы будем с помощью easy-rsa.
wheezy (Debian 7.x)
jessie (Debian 8.x)
precise (Ubuntu 12.04)
trusty (Ubuntu 14.04)
xenial (Ubuntu 16.04)
Examples:


Создаём папку с конфигурационными файлами и ссылками на скрипты генерации сертификатов:
$ echo "deb http://build.openvpn.net/debian/openvpn/testing jessie main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
$ echo "deb http://build.openvpn.net/debian/openvpn/release/2.3 wheezy main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
Now you're set for installing OpenVPN. Note that packages built for older operating system releases might work just fine on newer release of the same operating system.


make-cadir rsa
Installing OpenVPN
cd rsa
On Debian/Ubuntu use


Откройте конфигурационный файл vars и измените параметры:
$ apt-get update && apt-get install openvpn</nowiki>


export KEY_COUNTRY="US"
'''Обновить libssl, возможно не критично, но это ssl :D'''
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
KEY_COUNTRY — укажите код страны (RU, UA и т.д.);
KEY_PROVINCE — данный пункт не актуален, если вы не проживаете в США. :) Можно заменить на XX;
KEY_CITY — ваш город, где вы проживаете;
KEY_EMAIL — адрес вашей электропочты.


Все переменные заполняются латиницей.
===Конфигурации сервера и клиента для двух интерфейсов tun и tap одновременно===
В Debian 8 существует особенность запуска двух и более конфигураций openvpn. Эта особенность в "любимом" systemd. При установке активируется '''openvpn@server.service'''. И '''''запускается только один конфигурационный файл и только с именем server.conf''''' (3 часа мозг ломали). Исправляется это деактивацией openvpn@server.service. Затем в каталоге /lib/systemd/system сделать копии файла openvpn@server.service и назвать их по именам конфигурационных файлов. В моём случае файлы конфигураций называются server_tap.conf и server_tun.conf по задействованным интерфейсам. Затем их активировать


Сохраните файл и запустите его выполнение:
<nowiki>systemctl enable openvpn@server_tap.service
systemctl enable openvpn@server_tun.service</nowiki>


. /vars
Это позволит управлять (start, stop, restart) интерфейсами по отдельность


Затем запустите удаление старых сертификатов:
Разница в интерфейсах:
*tun выдает 4-х адресную сеть (/30) и по dhcp и настройках клиента тоже это учитывается, tap одна большая сеть
*tun позволяет маршрутизацию
*для tun используется параметр server, для tap - ifconfig
*tun - L3 интерфейс, tap - L2 интерфейс
* и много чего [https://openvpn.net/index.php/open-source/documentation/howto.html#policy], [https://sergeysl.ru/freebsd-openvpn-client-static-ip/,http://plangc.mybb.ru/viewtopic.php?id=83]


./clean-all


Создайте корневой сертификат:
'''ВНИМАНИЕ!!! Копия dh2048.pem с сервера или какая там у вас будет глубина шифрования на клиенте НЕ НУЖНА.'''


./pkitool --initca


Затем сертификат и ключ сервера.
На клиент положить только сертификат клиента и конфиг. Сертификат может быть с паролем, может быть без. Как сделаете (смотри картинки по генерации сертификатов внимательно). На клиенте тоже обновить версию openvpn до серверной (может и не надо но в 2.4.0 есть lz4 сжатие и работать будет только на 2.4.0 клиенте).  


./pkitool --server server
Для выдачи клиентам фиксированных постоянных ip, на сервере в каталогах /etc/openvpn/ccd или /etc/openvpn/ddc нужно создавать файлики по одному на клиента.
Имя файла должно совпадать с именем сертификата (при генерации (common name) или можно посмотреть в логах)


После чего создайте сертификат и ключ для клиента:
<nowiki>
/etc/openvpn/ccd/lopic.crt для tap интерфейса


./pkitool client
ifconfig-push 10.7.0.13 255.255.255.0
push "dhcp-option DNS 10.7.0.1"
push "dhcp-option DOMAIN office.local"


Обратите внимание: для каждого клиента следует генерировать собственные сертификат и ключ.
push "route 10.7.0.0 255.255.255.0 10.7.0.1"
</nowiki>
<nowiki>
/etc/openvpn/ddc/lopic.crt для tun интерфейса


Далее нужно создать ключ Диффи-Хеллмана для возможности использования Forward Secrecy:
ifconfig-push 10.7.0.10 255.255.255.0
push "dhcp-option DNS 10.7.0.1"
push "dhcp-option DOMAIN office.local"


./build-dh
push "route 10.7.0.0 255.255.255.0 10.7.0.9"
</nowiki>


И ключ для tls-аутентификации:
Для клиентов без явно указания ip (без файла) будет выдан ip динамически.


openvpn --genkey --secret /etc/openvpn/ta.key
Обратите внимание, что формат параметров в команде ifconfig-push для разных интерфейсов разный. Для tap - ip и маска сети. Шлюз по умолчанию первый ip в подсети. Для tun интерфейса ip клиента и ip шлюза для 30-й подсети [https://community.openvpn.net/openvpn/wiki/Topology] (как задействовать еще два адреса из 4-х адресной сетки пока не ясно). Для tun клиентов с динамическим ip маршруты добавлять на клиенте вручную. По умолчанию будет виден только сервер.


Теперь необходимо скопировать серверные ключи в папку настроек OpenVPN:
====/etc/openvpn/server_tap.conf====


  cp keys/ca.crt keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/
  #указывает программе работать в режиме сервера
mode server
#активирует работу Transport Layer Security (криптографический протокол) сервера
tls-server
#программа будет работать в режиме демона, если нет в этом необходимости - просто раскомментируйте строку
daemon
#локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
local 192.168.0.226
#указываем порт, по которому будет работать OpenVPN (обязательно поменять с 1194!!!)
port 1194
#выбираем протокол TCP (если необходим UDP, тогда: proto udp)
proto tcp-server
#используемый тип интерфейса - L2 туннель (для L3-туннеля: dev tun)
dev tap
#указываем файл с ключем сервера
pkcs12 /etc/openvpn/easy-rsa/keys/server-cert.p12
#указываем файл Диффи Хельман
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
#задаем IP-адрес сервера и маску подсети
ifconfig 10.8.0.1 255.255.255.0
#путь к каталогу индивидуальных клиентских конфигураций
client-config-dir /etc/openvpn/ccd
#Для назначения статических ip-адресов клиентов
#ifconfig-pool-persist ipp.txt
#push "dhcp-option DNS 10.8.0.1"
#push "dhcp-option DOMAIN net.local"
#push "dhcp-option DOMAIN-SEARCH net.local"
#push "redirect-gateway"
#пинг каждые 10 секунд для поддержания канала связ
keepalive 10 120
#Связь между клиентами
client-to-client
push "route 10.8.0.0 255.255.255.0"
# включаем шифрацию пакетов
''##cipher BF-CBC''
'''# рекомендуется:'''
'''cipher AES-256-CBC'''
# сжатие трафика
''##comp-lzo''
'''# рекомендуется:'''
'''comp-lzo adaptive'''
# максимум клиентов
max-clients 100
# Не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key
# Не закрывать и переоткрывать TUN\TAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun
# логгирование (не забудьте создать эту директорию /var/log/openvpn/)
status /var/log/openvpn/tap-status.log
log /var/log/openvpn/tap.log
# Уровень информации для отладки 0 - 11
verb 6


Обязательно скопируйте себе на компьютер, например, на рабочий стол, из папки keys ключи, необходимые для подключения клиента: client.crt, client.key, ca.crt, ta.key.
====/etc/openvpn/server_tun.conf====
 
На этом процесс подготовки сертификатов закончен.
mode server
Настройка сервера
tls-server
 
daemon
В каталоге /usr/share/doc/openvpn/ располагается файл-пример для настройки сервера Openvpn. Скопируйте его в каталог /etc/openvpn/ и разархивируйте:
local 192.168.0.226
 
port 1194
  cd /etc/openvpn;cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/;gunzip server.conf.gz
 
# TCP or UDP server?
Теперь рассмотрим необходимые для работы openvpn параметры.
##;proto tcp
 
proto udp
  port 20100
##;dev tap
dev tun
#tun-mtu 1492
#указываем файл с ключем сервера
pkcs12 /etc/openvpn/easy-rsa/keys/server-cert.p12
#указываем файл Диффи Хельман
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
## ipaddr server
server 10.7.0.0 255.255.255.0
#### clients ip
client-config-dir ddc
#push dhcp-option DOMAIN net.local
client-to-client
#########
#auth MD5
# включаем шифрацию пакетов
''##cipher BF-CBC''
'''# рекомендуется:'''
'''cipher AES-256-CBC'''
keepalive 10 120
# сжатие трафика
''##comp-lzo''
'''# рекомендуется:'''
'''comp-lzo adaptive'''
# максимум клиентов
max-clients 100
# Не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key
# Не закрывать и переоткрывать TUN\TAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun
  # логгирование (не забудьте создать эту дирректорию /var/log/openvpn/)
status /var/log/openvpn/tun-status.log
log /var/log/openvpn/tun.log
# Уровень информации для отладки
  verb 6


Порт, на котором Openvpn будет принимать соединения. По-умолчанию, 1194. Рекомендую изменить его в целях сокрытия. Можно даже замаскировать опенвпн под Web-сервер, указав порт 80.
====клиент Linux tap /etc/openvpn/client.conf====
 
ca ca.crt
cert server.crt
key server.key
 
Здесь указываем пути к сгенерированным сертификатам-ключам для openvpn.
 
dh dh2048.pem
 
Путь к ключу Диффи-Хеллмана.
 
Все эти ключи ранее мы сгенерировали и скопировали в папку /etc/openvpn/, поэтому менять эти параметры нет смысла. Если, конечно, вы не переместили эти файлы куда-то ещё. :)
 
Находим и раскомментируем строку:
 
push "redirect-gateway def1 bypass-dhcp"
 
Она нужна для возможности выхода в интернет через сервер ОпенВПН. Если её не раскомментировать, то будут доступны лишь компьютеры внутри сети.
 
Также нужно указать dns-серверы для подключающихся клиентов.
 
push "dhcp-option DNS 213.183.57.55"
push "dhcp-option DNS 87.98.175.85"
 
В зависимости от местоположения сервера, можно подобрать другие dns-серверы, например, на проекте OpenNIC.
 
Далее находим и раскомментируем параметр tls-auth.
 
tls-auth ta.key 0
 
Этот файл должен храниться в строгом секрете. Права доступа следует использовать 0600.
 
Внимание! В настройках клиента последняя цифра этого параметра должна быть заменена на 1 — tls-auth ta.key 1.
 
Чуть ниже в конфигурационном файле следует перечисление доступных шифров. Раскомментируйте шифр AES-128-CBC.
 
cipher AES-128-CBC  # AES
 
При необходимости, его можно заменить на AES-256-CBC. В конфигурационном файле клиента шифр должен быть идентичен серверному шифру.
 
Также добавьте параметр auth. По-умолчанию, для аутентификации используются ключи sha1 длиной 160 бит, но алгоритм sha1 признан уязвимым. При указании нижеследующего параметра будут использоваться ключи RSA-SHA256 длиной 256 бит.
 
auth RSA-SHA256
 
OpenVPN не следует запускать от имени root. Поэтому раскомментируйте строки:


client
dev tap0
proto tcp-client
remote 192.168.0.226 1194
resolv-retry infinite
nobind
  #user nobody
  #user nobody
  #group nogroup
  #group nobody
persist-key
persist-tun
pkcs12 lopic85.p12
ns-cert-type server
'''cipher AES-256-CBC'''
'''comp-lzo adaptive'''
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 6
mute 20
auth-nocache


Не лишним будет включение логов для OpenVPN. Особенно, на первых порах использования после настройки для поиска ошибок и т.д.
Чтобы клиент подключился нужно активировать openvpn, иначе ведет себя как мертвый суслик
<nowiki>
systemctl enable openvpn
/etc/init.d/openvpn restart
</nowiki>


  log /var/log/openvpn.log
====клиент Linux tun /etc/openvpn/client.conf====
  <nowiki>
client
dev tun0
proto udp
remote 192.168.0.226 1194
resolv-retry infinite
nobind
#user nobody
#group nobody
persist-key
persist-tun
pkcs12 lopic85.p12
ns-cert-type server
comp-lzo
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 6
mute 20
auth-nocache


Все остальные параметры конфигурационного файла /etc/openvpn/server.conf оставьте со значениями по-умолчанию. На этом настройка сервера OpenVPN закончена.
</nowiki>


Активируйте openvpn командой:
Чтобы клиент подключился нужно активировать openvpn, иначе ведет себя как мертвый суслик
<nowiki>
systemctl enable openvpn
/etc/init.d/openvpn restart
</nowiki>


systemctl enable openvpn
====клиент Windows c:\Program files\Openvpn\conf\client.ovpn====


И перезапустите:
Конфиг как на линукс клиенте кроме двух строк:
<nowiki>status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log</nowiki>
Их надо удалить. Лог пишется в папке C:\Users\Пользователь\Openvpn


  service openvpn restart
===КОСТЫЛЬ №1 Автостарт openvpn 2.4.0 в systemd===
Не знаю, баг это или фича, но на сервере сервисы openvpn.service и openvpn@.service активны, загружены и исполнены, а интерфейса нет.


Также нелишним будет проверить лог на наличие ошибок.
'''Как сдел я:'''
Перенаправление трафика через OpenVPN
<nowiki>
/etc/scripts/ovpn_restart.sh


Чтобы иметь возможность выхода в интернет через сервер опенвпн, необходимо кое-что сделать для этого.


1. Настроить sysctl
#!/bin/bash
sleep 10
systemctl restart openvpn
exit 0
</nowiki>


В консоли запустите команду:
<nowiki>
/etc/systemd/system/ovpn.service


sysctl net.ipv4.ip_forward


Если вывод команды будет равным net.ipv4.ip_forward = 1, то изменять что-либо не требуется. Если же значение переменной будет равно 0, то в файл /etc/sysctl.conf нужно добавить строку:
[Unit]
Description=OpenVPN restart kostil
After=syslog.target network.target
After=openvpn.service


net.ipv4.ip_forward = 1
[Service]
Type=forking
ExecStart=/etc/scripts/ovpn_restart.sh


И перезагрузить правила командой:
[Install]
WantedBy=multi-user.target</nowiki>


  sysctl -p
  <nowiki>systemctl enable ovpn.service</nowiki>


2. Настроить iptables
Конечно наколхозил, но работает :D


Поочерёдно выполните в консоли следующие команды:
===Пропускная способность===


iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
На HP procurve c 100Мбит/с интерфейсами через ssh прокачал 11.3 Мбайт/с
iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE


Таким образом, мы разрешим пропускать трафик через сервер OpenVPN для подсети 10.8.0.0 в рамках уже установленных соединений.
== Подключение несколько клиентских соединений ==
* создаем несколько конфигурационных файлов:
/etc/openvpn/client_office2.conf
прописываем в нем все необходимое: ключ, ip.. - не забываем указать новый интерфейс '''(dev/tap1)'''
.. и
/etc/openvpn/client_office3.conf
прописываем в нем все необходимое: ключ, ip.. - не забываем указать новый интерфейс '''(dev/tap2)'''


Если клиенту openvpn нужно присвоить определённый внешний ip адрес сервера, то вместо последней команды из списка предыдущих для iptables, необходимо выполнить эту:
* создаем в /lib/systemd/system
cp /lib/systemd/system/openvpn@.service /lib/systemd/system/openvpn@client_office2
cp /lib/systemd/system/openvpn@.service /lib/systemd/system/openvpn@client_office3


  -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 127.0.0.1
* содержимое для Debian 9 такое:
 
[Unit]
Где после параметра —to-source следует указать внешний ip сервера.
Description=OpenVPN service for %I
OpenVPN клиент на Windows
  After=network-online.target
 
Wants=network-online.target
Приступаем к настройке Openvpn клиента на Windows. Здесь всё просто: скачиваем клиент с официального сайта, устанавливаем, создаём конфигурационный файл и запускаем.
Documentation=man:openvpn(8)
 
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Стоит отметить, что запускать опенвпн на Windows следует с правами администратора, если активен контроль учётных записей.
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO
 
Если вы не меняли путь установки, то примеры конфигурационных файлов на вашем ПК располагаются в каталоге C:\Program Files\OpenVPN\sample-config. Скопируйте отсюда файл client.ovpn и поместите его в каталог C:\Program Files\OpenVPN\config.
[Service]
 
Type=notify
Помните о созданных для клиента сертификатах? Их тоже следует скачать с сервера и скопировать в этот каталог.
PrivateTmp=true
 
WorkingDirectory=/etc/openvpn/server
Откройте конфигурационный файл client.ovpn и найдите параметр remote my-server-1 1194. Вместо my-server укажите ip или доменное имя вашего сервера. Затем порт, который мы изменили ранее. В итоге строка может выглядеть так:
ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log --status-version 2 --suppress-timestamps --config %i.conf
 
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
  remote 192.168.0.1 20100
  LimitNPROC=10
 
DeviceAllow=/dev/null rw
Далее нужно указать пути к сертификатам, которые вы сгенерировали на сервере. Раз вы поместили их в каталог с конфигурационным файлом, то пути можно оставить, как есть.
DeviceAllow=/dev/net/tun rw
 
ProtectSystem=true
  ca ca.crt
  ProtectHome=true
  cert client.crt
  KillMode=process
  key client.key
  RestartSec=5s
 
Restart=on-failure
Также следует раскомментировать параметр, который указывает путь к tls-ключу.
 
[Install]
  tls-auth ta.key 1
  WantedBy=multi-user.target
 
Ранее уже говорилось о том, что последняя цифра на сервере должна быть 0, на клиенте — 1.
* Далее обновляем информацию systermd
 
systemctl daemon-reload
И последние параметра — это шифры, которые вы установили на сервере.


  cipher AES-128-CBC
* Активируем службы интерфейсов:
  auth RSA-SHA256
  systemctl enable openvpn@client_office2
  systemctl enable openvpn@client_office3


Это всё, что требуется для настройки клиента. Попробуйте запустить клиент OpenVPN и подключиться к вашему серверу. Необходимая информация о подключении будет отображена в окошке openvpn gui.
* Запускаем openvpn для заданных интерфейсов
systemctl start openvpn@client_office2
systemctl start openvpn@client_office3


* [https://rusadmin.biz/rukovodstva/openvpn-na-debian/ взято тут]
ИСТОЧНИКИ и ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
<hr>
* [[Ускоряем OpenVPN или немного о размере буфера.]]

Текущая версия от 02:38, 27 августа 2020

Генерация сертификатов

Генерация сертификатов как здесь.

Подключить репозитории OpenVPN

Подключить репозиторий и у меня подключены бэк-порты.

На всякий случай продублирую

Using OpenVPN apt repositories
We maintain several OpenVPN (OSS) software repositories. To setup the repositories you need to change to the root user. Typically this is done using sudo:

$ sudo -s
Then import the public GPG key that is used to sign the packages:

$ wget -O - https://swupdate.openvpn.net/repos/repo-public.gpg|apt-key add -
Next you need to create a sources.list fragment (as root) so that apt can find the new OpenVPN packages. One way to do it is this:

$ echo "deb http://build.openvpn.net/debian/openvpn/<version> <osrelease> main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
Where <version> can be one of

stable: stable releases only - no alphas, betas or RCs
testing: latest releases, including alphas/betas/RCs
release/2.3: OpenvPN 2.3 releases
release/2.4: OpenVPN 2.4 releases, including alphas/betas/RCs
and <osrelease> depends your distribution:

wheezy (Debian 7.x)
jessie (Debian 8.x)
precise (Ubuntu 12.04)
trusty (Ubuntu 14.04)
xenial (Ubuntu 16.04)
Examples:

$ echo "deb http://build.openvpn.net/debian/openvpn/testing jessie main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
$ echo "deb http://build.openvpn.net/debian/openvpn/release/2.3 wheezy main" > /etc/apt/sources.list.d/openvpn-aptrepo.list
Now you're set for installing OpenVPN. Note that packages built for older operating system releases might work just fine on newer release of the same operating system.

Installing OpenVPN
On Debian/Ubuntu use

$ apt-get update && apt-get install openvpn

Обновить libssl, возможно не критично, но это ssl :D

Конфигурации сервера и клиента для двух интерфейсов tun и tap одновременно

В Debian 8 существует особенность запуска двух и более конфигураций openvpn. Эта особенность в "любимом" systemd. При установке активируется openvpn@server.service. И запускается только один конфигурационный файл и только с именем server.conf (3 часа мозг ломали). Исправляется это деактивацией openvpn@server.service. Затем в каталоге /lib/systemd/system сделать копии файла openvpn@server.service и назвать их по именам конфигурационных файлов. В моём случае файлы конфигураций называются server_tap.conf и server_tun.conf по задействованным интерфейсам. Затем их активировать

systemctl enable openvpn@server_tap.service 
systemctl enable openvpn@server_tun.service 

Это позволит управлять (start, stop, restart) интерфейсами по отдельность

Разница в интерфейсах:

  • tun выдает 4-х адресную сеть (/30) и по dhcp и настройках клиента тоже это учитывается, tap одна большая сеть
  • tun позволяет маршрутизацию
  • для tun используется параметр server, для tap - ifconfig
  • tun - L3 интерфейс, tap - L2 интерфейс
  • и много чего [1], [2]


ВНИМАНИЕ!!! Копия dh2048.pem с сервера или какая там у вас будет глубина шифрования на клиенте НЕ НУЖНА.


На клиент положить только сертификат клиента и конфиг. Сертификат может быть с паролем, может быть без. Как сделаете (смотри картинки по генерации сертификатов внимательно). На клиенте тоже обновить версию openvpn до серверной (может и не надо но в 2.4.0 есть lz4 сжатие и работать будет только на 2.4.0 клиенте).

Для выдачи клиентам фиксированных постоянных ip, на сервере в каталогах /etc/openvpn/ccd или /etc/openvpn/ddc нужно создавать файлики по одному на клиента. Имя файла должно совпадать с именем сертификата (при генерации (common name) или можно посмотреть в логах)

/etc/openvpn/ccd/lopic.crt для tap интерфейса

ifconfig-push 10.7.0.13 255.255.255.0
push "dhcp-option DNS 10.7.0.1"
push "dhcp-option DOMAIN office.local"

push "route 10.7.0.0 255.255.255.0 10.7.0.1"


/etc/openvpn/ddc/lopic.crt для tun интерфейса

ifconfig-push 10.7.0.10 255.255.255.0
push "dhcp-option DNS 10.7.0.1"
push "dhcp-option DOMAIN office.local"

push "route 10.7.0.0 255.255.255.0 10.7.0.9"

Для клиентов без явно указания ip (без файла) будет выдан ip динамически.

Обратите внимание, что формат параметров в команде ifconfig-push для разных интерфейсов разный. Для tap - ip и маска сети. Шлюз по умолчанию первый ip в подсети. Для tun интерфейса ip клиента и ip шлюза для 30-й подсети [3] (как задействовать еще два адреса из 4-х адресной сетки пока не ясно). Для tun клиентов с динамическим ip маршруты добавлять на клиенте вручную. По умолчанию будет виден только сервер.

/etc/openvpn/server_tap.conf

#указывает программе работать в режиме сервера
mode server

#активирует работу Transport Layer Security (криптографический протокол) сервера
tls-server

#программа будет работать в режиме демона, если нет в этом необходимости - просто раскомментируйте строку
daemon

#локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
local 192.168.0.226

#указываем порт, по которому будет работать OpenVPN (обязательно поменять с 1194!!!)
port 1194

#выбираем протокол TCP (если необходим UDP, тогда: proto udp)
proto tcp-server

#используемый тип интерфейса - L2 туннель (для L3-туннеля: dev tun)
dev tap

#указываем файл с ключем сервера
pkcs12 /etc/openvpn/easy-rsa/keys/server-cert.p12

#указываем файл Диффи Хельман
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

#задаем IP-адрес сервера и маску подсети
ifconfig 10.8.0.1 255.255.255.0


#путь к каталогу индивидуальных клиентских конфигураций
client-config-dir /etc/openvpn/ccd

#Для назначения статических ip-адресов клиентов
#ifconfig-pool-persist ipp.txt



#push "dhcp-option DNS 10.8.0.1"
#push "dhcp-option DOMAIN net.local"
#push "dhcp-option DOMAIN-SEARCH net.local"
#push "redirect-gateway"

#пинг каждые 10 секунд для поддержания канала связ
keepalive 10 120

#Связь между клиентами
client-to-client

push "route 10.8.0.0 255.255.255.0"

# включаем шифрацию пакетов
##cipher BF-CBC
# рекомендуется:
cipher AES-256-CBC

# сжатие трафика
##comp-lzo
# рекомендуется:
comp-lzo adaptive

# максимум клиентов
max-clients 100

# Не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key

# Не закрывать и переоткрывать TUN\TAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun

# логгирование (не забудьте создать эту директорию /var/log/openvpn/)
status /var/log/openvpn/tap-status.log
log /var/log/openvpn/tap.log

# Уровень информации для отладки 0 - 11
verb 6

/etc/openvpn/server_tun.conf

mode server
tls-server
daemon
local 192.168.0.226
port 1194

# TCP or UDP server?
##;proto tcp
proto udp

##;dev tap
dev tun

#tun-mtu 1492
#указываем файл с ключем сервера
pkcs12 /etc/openvpn/easy-rsa/keys/server-cert.p12

#указываем файл Диффи Хельман
dh /etc/openvpn/easy-rsa/keys/dh2048.pem

## ipaddr server
server 10.7.0.0 255.255.255.0

#### clients ip
client-config-dir ddc

#push dhcp-option DOMAIN net.local
client-to-client
#########
#auth MD5
# включаем шифрацию пакетов
##cipher BF-CBC
# рекомендуется:
cipher AES-256-CBC
keepalive 10 120

# сжатие трафика
##comp-lzo
# рекомендуется:
comp-lzo adaptive

# максимум клиентов
max-clients 100

# Не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key

# Не закрывать и переоткрывать TUN\TAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun

# логгирование (не забудьте создать эту дирректорию /var/log/openvpn/)
status /var/log/openvpn/tun-status.log
log /var/log/openvpn/tun.log

# Уровень информации для отладки
verb 6

клиент Linux tap /etc/openvpn/client.conf

client
dev tap0
proto tcp-client
remote 192.168.0.226 1194
resolv-retry infinite
nobind
#user nobody
#group nobody
persist-key
persist-tun
pkcs12 lopic85.p12
ns-cert-type server
cipher AES-256-CBC
comp-lzo adaptive
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 6
mute 20
auth-nocache

Чтобы клиент подключился нужно активировать openvpn, иначе ведет себя как мертвый суслик

systemctl enable openvpn
/etc/init.d/openvpn restart

клиент Linux tun /etc/openvpn/client.conf

client
dev tun0
proto udp
remote 192.168.0.226 1194
resolv-retry infinite
nobind
#user nobody
#group nobody
persist-key
persist-tun
pkcs12 lopic85.p12
ns-cert-type server
comp-lzo
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 6
mute 20
auth-nocache


Чтобы клиент подключился нужно активировать openvpn, иначе ведет себя как мертвый суслик

systemctl enable openvpn
/etc/init.d/openvpn restart

клиент Windows c:\Program files\Openvpn\conf\client.ovpn

Конфиг как на линукс клиенте кроме двух строк:

status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log

Их надо удалить. Лог пишется в папке C:\Users\Пользователь\Openvpn

КОСТЫЛЬ №1 Автостарт openvpn 2.4.0 в systemd

Не знаю, баг это или фича, но на сервере сервисы openvpn.service и openvpn@.service активны, загружены и исполнены, а интерфейса нет.

Как сдел я:

/etc/scripts/ovpn_restart.sh 


#!/bin/bash
sleep 10
systemctl restart openvpn
exit 0

/etc/systemd/system/ovpn.service 


[Unit]
Description=OpenVPN restart kostil
After=syslog.target network.target
After=openvpn.service

[Service]
Type=forking
ExecStart=/etc/scripts/ovpn_restart.sh

[Install]
WantedBy=multi-user.target
systemctl enable ovpn.service

Конечно наколхозил, но работает :D

Пропускная способность

На HP procurve c 100Мбит/с интерфейсами через ssh прокачал 11.3 Мбайт/с

Подключение несколько клиентских соединений

  • создаем несколько конфигурационных файлов:
/etc/openvpn/client_office2.conf

прописываем в нем все необходимое: ключ, ip.. - не забываем указать новый интерфейс (dev/tap1) .. и

/etc/openvpn/client_office3.conf

прописываем в нем все необходимое: ключ, ip.. - не забываем указать новый интерфейс (dev/tap2)

  • создаем в /lib/systemd/system
cp /lib/systemd/system/openvpn@.service /lib/systemd/system/openvpn@client_office2
cp /lib/systemd/system/openvpn@.service /lib/systemd/system/openvpn@client_office3
  • содержимое для Debian 9 такое:
[Unit]
Description=OpenVPN service for %I
After=network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/server
ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log --status-version 2 --suppress-timestamps --config %i.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
RestartSec=5s
Restart=on-failure

[Install]
WantedBy=multi-user.target

  • Далее обновляем информацию systermd
systemctl daemon-reload
  • Активируем службы интерфейсов:
systemctl enable openvpn@client_office2
systemctl enable openvpn@client_office3
  • Запускаем openvpn для заданных интерфейсов
systemctl start openvpn@client_office2
systemctl start openvpn@client_office3

ИСТОЧНИКИ и ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: