«Установка и настройка OpenVPN на Debian 8» и «Golang - библиотека начинающего»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Supportadmin
 
imported>Vix
(Новая страница: «'''ПОЛЕЗНОЕ:''' <hr> * [https://golangs.org/ Уроки для изучения Golang] * [https://metanit.com/go/tutorial/2.11.php Функции и их...»)
 
Строка 1: Строка 1:
===Генерация сертификатов===
'''ПОЛЕЗНОЕ:'''
 
<hr>
'''Генерация сертификатов как [http://support.qbpro.ru/index.php?title=Debian_squeeze_open-vpn здесь].'''
* [https://golangs.org/ Уроки для изучения Golang]
===Подключить репозитории OpenVPN===
* [https://metanit.com/go/tutorial/2.11.php Функции и их параметры]
'''Подключить [https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos репозиторий] и у меня подключены бэк-порты.'''
* [https://www.ibm.com/developerworks/ru/library/l-go_01/ Язык программирования go]
 
* [https://tproger.ru/translations/golang-basics/ Golang: основы для начинающих]
''На всякий случай продублирую''
* [http://golang-book.ru/ Введение в программирование на Go]
 
* [https://medium.com/golang-notes/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-visual-studio-code-%D0%B4%D0%BB%D1%8F-go-647ea94aa795 Настройка Visual Studio Code для Go]
<nowiki>
* [https://serverspace.by/support/help/ustanovka-go-na-windows-server/ Установка GoLang на Windows Server]
Using OpenVPN apt repositories
* [https://otus.ru/nest/post/1015/ GOPATH и GOROOT больше не нужны?]
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:
* [https://nuancesprog.ru/p/5966/ Идеальная настройка вашего Golang проекта]
 
* [https://habr.com/ru/post/249449/ Кросс-компиляция в Go]
$ sudo -s
* [https://gobyexample.com/ Go by Example]
Then import the public GPG key that is used to sign the packages:
* [https://golang.org/pkg/ Golang 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</nowiki>
 
'''Обновить 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 по задействованным интерфейсам. Затем их активировать
 
<nowiki>systemctl enable openvpn@server_tap.service
systemctl enable openvpn@server_tun.service</nowiki>
 
Это позволит управлять (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]
 
 
'''ВНИМАНИЕ!!! Копия dh2048.pem с сервера или какая там у вас будет глубина шифрования на клиенте НЕ НУЖНА.'''
 
 
На клиент положить только сертификат клиента и конфиг. Сертификат может быть с паролем, может быть без. Как сделаете (смотри картинки по генерации сертификатов внимательно). На клиенте тоже обновить версию openvpn до серверной (может и не надо но в 2.4.0 есть lz4 сжатие и работать будет только на 2.4.0 клиенте).
 
Для выдачи клиентам фиксированных постоянных ip, на сервере в каталогах /etc/openvpn/ccd или /etc/openvpn/ddc нужно создавать файлики по одному на клиента.
Имя файла должно совпадать с именем сертификата (при генерации (common name) или можно посмотреть в логах)
 
<nowiki>
/etc/openvpn/ccd/lopic.crt для tap интерфейса
 
ifconfig-push 10.8.0.13 255.255.255.0
push "route 10.7.0.0 255.255.255.0 10.8.0.1"
</nowiki>
<nowiki>
/etc/openvpn/ddc/lopic.crt для tun интерфейса
 
ifconfig-push 10.7.0.10 10.7.0.9
push "route 10.8.0.0 255.255.255.0 10.7.0.9"
</nowiki>
 
Для клиентов без явно указания ip будет выдан ip динамически.
 
Обратите внимание, что формат параметров в команде ifconfig-push для разных интерфейсов разный. Для tap - ip и маска сети. Шлюз по умолчанию первый ip в подсети. Для tun интерфейса ip клиента и ip шлюза для 30-й подсети (как задействовать еще два адреса из 4-х адресной сетки пока не ясно)
 
====/etc/openvpn/server_tap.conf====
 
<nowiki>
#указывает программе работать в режиме сервера
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
 
#Если нам лень со статикой заморачиваться
#server для tun интерфейсов
#server 10.8.0.0 255.255.255.0
#ifconfig-pool 10.8.0.5 10.8.0.254 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
 
# сжатие трафика
comp-lzo
 
# максимум клиентов
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
 
</nowiki>
 
====/etc/openvpn/server_tun.conf====
<nowiki>
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
keepalive 10 120
 
# сжатие трафика
comp-lzo
 
# максимум клиентов
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</nowiki>
 
====клиент Linux tap /etc/openvpn/client.conf====
 
<nowiki>
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
comp-lzo
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 6
mute 20
auth-nocache
 
</nowiki>
 
====клиент 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
 
</nowiki>
 
 
====клиент 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
 
===КОСТЫЛЬ №1 Присвоение постоянных ip клиентам openvpn 2.4.0===
После написания файла lopic.crt, и перезагрузки openvpn ip выдавался следующий после сервера 10.8.0.2, а не тот который прописан в lopic.crt
 
'''Нужно:'''
# '''ОСТАНОВИТЬ''' openvpn
# в файле /etc/openvpn/ipp.txt прописать в новой строке ''''''lopic,10.8.0.13''''''  (зяпятая между именем и ip без пробелов). lopic.crt уже должен быть
# запустить openvpn
 
UPD: Перед добавлением следующего клиента скопировать ipp.txt, потом остановить openvpn, вернуть ipp.txt, внести изменения в ipp.txt и потом запустить openvpn. Это точно фича, либо моя криворукость.
 
===КОСТЫЛЬ №2 Автостарт openvpn 2.4.0 в systemd===
Не знаю, баг это или фича, но на сервере сервисы  openvpn.service и openvpn@.service активны, загружены и исполнены, а интерфейса нет.
 
'''Как сдел я:'''
# /etc/scripts/ovpn_restart.sh
<nowiki>#!/bin/bash
sleep 10
systemctl restart openvpn
exit 0
</nowiki>
# /etc/systemd/system/ovpn.service
<nowiki>
[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</nowiki>
#systemctl enable ovpn.service
 
Конечно наколхозил, но работает :D
 
 
===Пропускная способность===
 
На HP procurve c 100Мбит/с интерфейсами через ssh прокачал 11.3 Мбайт/с

Версия от 09:13, 18 августа 2020