«Установка и настройка OpenVPN на Debian 8» и «LXC debian 8»: разница между страницами

Материал из support.qbpro.ru
(Различия между страницами)
imported>Supportadmin
 
imported>Supportadmin
 
Строка 1: Строка 1:
===Генерация сертификатов===
[https://www.google.ru Источник]
 
=== Настройка GRUB для LXC===
'''Генерация сертификатов как [http://support.qbpro.ru/index.php?title=Debian_squeeze_open-vpn здесь].'''
В /etc/default/grub изменить параметр
===Подключить репозитории OpenVPN===
'''Подключить [https://community.openvpn.net/openvpn/wiki/OpenvpnSoftwareRepos репозиторий] и у меня подключены бэк-порты.'''
 
''На всякий случай продублирую''
 
  <nowiki>
  <nowiki>
Using OpenVPN apt repositories
GRUB_CMDLINE_LINUX="cgroup_enable=memory"
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:
</nowiki>
Хотя официально [https://wiki.debian.org/LXC] сказано, что делать ничего не надо.


$ sudo -s
=== Настройка ядра для LXC ===
Then import the public GPG key that is used to sign the packages:
В /etc/sysctl.conf [https://habrahabr.ru/post/120717/]
 
$ 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>
  <nowiki>
/etc/openvpn/ddc/lopic.crt для tun интерфейса
net.ipv4.ip_forward=1
 
net.ipv4.conf.all.forwarding=1
ifconfig-push 10.7.0.10 10.7.0.9
net.ipv4.conf.all.proxy_arp=1
push "route 10.8.0.0 255.255.255.0 10.7.0.9"
</nowiki>
</nowiki>


Для клиентов без явно указания ip будет выдан ip динамически.
grub_updare, reboot
 
Обратите внимание, что формат параметров в команде ifconfig-push для разных интерфейсов разный. Для tap - ip и маска сети. Шлюз по умолчанию первый ip в подсети. Для tun интерфейса ip клиента и ip шлюза для 30-й подсети (как задействовать еще два адреса из 4-х адресной сетки пока не ясно)
 
====/etc/openvpn/server_tap.conf====


=== Настройка сетевого интерфейса для LXC ===
В /etc/network/interfaces
  <nowiki>
  <nowiki>
#указывает программе работать в режиме сервера
#allow-hotplug eth0
mode server
#auto eth0
#iface eth0 inet static


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


#программа будет работать в режиме демона, если нет в этом необходимости - просто раскомментируйте строку
auto br0
daemon
iface br0 inet static
      address 192.168.150.30
      netmask 255.255.255.0
      network 192.168.150.0
      broadcast 192.168.150.255
      gateway 192.168.150.1
      dns-nameservers 192.168.150.1
      bridge_ports eth0
      bridge_fd 0
      bridge_maxwait 0</nowiki>


#локальный ip или имя хоста, на котором будет работать OpenVPN. Актуально, если на локальной машине несколько адресов.
=== Создание контейнера ===
local 192.168.0.226
Создаем контейнер [https://wiki.debian.org/LXC#RootFS_creation]


#указываем порт, по которому будет работать OpenVPN (обязательно поменять с 1194!!!)
<nowiki>lxc-create -t debian -n nodejs</nowiki>
port 1194


#выбираем протокол TCP (если необходим UDP, тогда: proto udp)
Сразу меняем пароль root на свой.
proto tcp-server


#используемый тип интерфейса - L2 туннель (для L3-туннеля: dev tun)
<nowiki>
dev tap
старт в режиме консоли (не очень удобно, точнее вообще неудобно)


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


#указываем файл Диффи Хельман
или старт в режиме демона и присоединяется к консоли контейнера, для выхода из консоли exit
dh /etc/openvpn/easy-rsa/keys/dh2048.pem


#задаем IP-адрес сервера и маску подсети
lxc-start -dn nodejs
ifconfig 10.8.0.1 255.255.255.0
lxc-attach -n nodejs
</nowiki>
===Настройка параметров контейнера===
Конфигурируем контейнер /var/lib/lxc/nodejs/config. Обязательно обратить внимание на lxc.network.veth.pair [http://xgu.ru/wiki/LXC] - это имя интерфейса в хост машине. [https://wiki.debian.org/LXC Здесь] про это не сказано, и работать с сетью сможет только один контейнер.  


#Если нам лень со статикой заморачиваться
<nowiki>
#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


#путь к каталогу индивидуальных клиентских конфигураций
lxc.rootfs = /var/lib/lxc/nodejs/rootfs
client-config-dir /etc/openvpn/ccd
lxc.include = /usr/share/lxc/config/debian.common.conf
lxc.mount = /var/lib/lxc/nodejs/fstab
lxc.utsname = nodejs
lxc.arch = amd64
lxc.autodev = 1
lxc.kmsg = 0


#Для назначения статических ip-адресов клиентов
#Количество /dev/tty
#ifconfig-pool-persist ipp.txt
lxc.tty = 6


# Autostart
lxc.start.auto = 1
lxc.start.delay = 5
lxc.start.order = 100


# eth0


#push "dhcp-option DNS 10.8.0.1"
lxc.network.type = veth
#push "dhcp-option DOMAIN net.local"
lxc.network.flags = up
#push "dhcp-option DOMAIN-SEARCH net.local"
lxc.network.link = br0
#push "redirect-gateway"
lxc.network.veth.pair= br0-1
lxc.network.name = eth0
lxc.network.hwaddr = 00:11:12:00:88:99


#пинг каждые 10 секунд для поддержания канала связ
#mount папка на хост-машине            папка в контейнере, относительно хост-машины
keepalive 10 120
#lxc.mount.entry =  /home/debs  /var/lib/lxc/nodejs/rootfs/home/debs none bind 0 0
</nowiki>


#Связь между клиентами
=== Настройка параметров сети внутри LXC контейнера===
client-to-client
Настраиваем сеть не через конфигурацию, а в контейнере (можно и так, и так) /var/lib/lxc/nodejs/rootfs/etc/network/interfaces
 
<nowiki>
push "route 10.8.0.0 255.255.255.0"
# The loopback network interface
 
auto lo
# включаем шифрацию пакетов
iface lo inet loopback
cipher BF-CBC


# сжатие трафика
# The primary network interfac
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


allow-hotplug eth0
auto eth0
iface eth0 inet static
      address 192.168.150.33
      netmask 255.255.255.0
      network 192.168.150.0
      broadcast 192.168.150.255
      gateway 192.168.150.1
      dns-nameservers 192.168.150.1
</nowiki>
</nowiki>


====/etc/openvpn/server_tun.conf====
=== Настройка репозитариев и обустройство контейнера ===
Правим /var/lib/lxc/nodejs/rootfs/etc/apt/sources.list
  <nowiki>
  <nowiki>
mode server
#deb file:/home/debs /
tls-server
deb http://mirror.mephi.ru/debian/ jessie main
daemon
deb-src http://mirror.mephi.ru/debian/ jessie main
local 192.168.0.226
port 1194


# TCP or UDP server?
deb http://security.debian.org/ jessie/updates main contrib
##;proto tcp
deb-src http://security.debian.org/ jessie/updates main contrib
proto udp


##;dev tap
# jessie-updates, previously known as 'volatile'
dev tun
deb http://mirror.mephi.ru/debian/ jessie-updates main contrib
deb-src http://mirror.mephi.ru/debian/ jessie-updates main contrib


#tun-mtu 1492
deb http://ftp.ru.debian.org/debian/ jessie main contrib non-free
#указываем файл с ключем сервера
deb http://http.debian.net/debian jessie-backports main contrib non-free
pkcs12 /etc/openvpn/easy-rsa/keys/server-cert.p12


#указываем файл Диффи Хельман
#deb http://www.deb-multimedia.org jessie main non-free
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
#deb http://www.deb-multimedia.org jessie-backports main


## ipaddr server
server 10.7.0.0 255.255.255.0


#### clients ip
</nowiki>
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====


Изначально контейнер пустой (установлено 136 пакетов). Даже ping отсутствует.
  <nowiki>
  <nowiki>
client
apt-get update
dev tap0
apt-get install aptitude apt-utils mc ssh iputils-ping iptables cron wget
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>
</nowiki>


====клиент Linux tun /etc/openvpn/client.conf====
=== Если нет сети в LXC контейнере ===
Если интернета в контейнере не появилось, ping отсутствует, то как вариант можно создать локальный репозитарий, подмонтировать его в контейнер, в sources.list добавить ссылку на него и поставить bind9 и resolvconf.
* качаем один или все три установочные диска с  [https://www.debian.org/CD/http-ftp/ сайта]
* создаем папку на хост-машине /home/debs
* из каталога pool каждого диска копируем в /home/debs каталоги main и contrib
* создаем индекс репозитория
  <nowiki>
  <nowiki>
client
cd /home/debs
dev tun0
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
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>
</nowiki>
 
* В sources.list контейнера добавить первой строкой (остальные #)
 
  <nowiki>
====клиент Windows c:\Program files\Openvpn\conf\client.ovpn====
deb file:/home/debs /
 
Конфиг как на линукс клиенте кроме двух строк:
  <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>
</nowiki>
# /etc/systemd/system/ovpn.service
*
* Запустить контейнер и в нем поставить пакеты
  <nowiki>
  <nowiki>
[Unit]
lxc-start -dn nodejs
Description=OpenVPN restart kostil
lxc-attach -n nodejs
After=syslog.target network.target
apt-get update
After=openvpn.service
apt-get install aptitude apt-utils mc ssh iputils-ping iptables cron wget resolvconf
 
apt-get install bind9
[Service]
exit
Type=forking
lxc-stop -n nodejs
ExecStart=/etc/scripts/ovpn_restart.sh
lxc-start -dn nodejs
 
</nowiki>
[Install]
После этого, при правильном конфигурировании gateway и dns-nameservers все должно заработать
WantedBy=multi-user.target</nowiki>
#systemctl enable ovpn.service
 
Конечно наколхозил, но работает :D
 
 
===Пропускная способность===
 
На HP procurve c 100Мбит/с интерфейсами через ssh прокачал 11.3 Мбайт/с

Версия от 14:23, 7 марта 2016

Источник

Настройка GRUB для LXC

В /etc/default/grub изменить параметр

GRUB_CMDLINE_LINUX="cgroup_enable=memory"

Хотя официально [1] сказано, что делать ничего не надо.

Настройка ядра для LXC

В /etc/sysctl.conf [2]

net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.conf.all.proxy_arp=1

grub_updare, reboot

Настройка сетевого интерфейса для LXC

В /etc/network/interfaces

#allow-hotplug eth0
#auto eth0
#iface eth0 inet static


auto br0
iface br0 inet static
      address 192.168.150.30
      netmask 255.255.255.0
      network 192.168.150.0
      broadcast 192.168.150.255
      gateway 192.168.150.1
      dns-nameservers 192.168.150.1
      bridge_ports eth0
      bridge_fd 0
      bridge_maxwait 0

Создание контейнера

Создаем контейнер [3]

lxc-create -t debian -n nodejs

Сразу меняем пароль root на свой.

старт в режиме консоли (не очень удобно, точнее вообще неудобно)

lxc-start -n nodejs

или старт в режиме демона и присоединяется к консоли контейнера, для выхода из консоли exit

lxc-start -dn nodejs
lxc-attach -n nodejs

Настройка параметров контейнера

Конфигурируем контейнер /var/lib/lxc/nodejs/config. Обязательно обратить внимание на lxc.network.veth.pair [4] - это имя интерфейса в хост машине. Здесь про это не сказано, и работать с сетью сможет только один контейнер.


lxc.rootfs = /var/lib/lxc/nodejs/rootfs
lxc.include = /usr/share/lxc/config/debian.common.conf
lxc.mount = /var/lib/lxc/nodejs/fstab
lxc.utsname = nodejs
lxc.arch = amd64
lxc.autodev = 1
lxc.kmsg = 0

#Количество /dev/tty
lxc.tty = 6

# Autostart
lxc.start.auto = 1
lxc.start.delay = 5
lxc.start.order = 100

# eth0

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.veth.pair= br0-1
lxc.network.name = eth0
lxc.network.hwaddr = 00:11:12:00:88:99

#mount папка на хост-машине            папка в контейнере, относительно хост-машины
#lxc.mount.entry =  /home/debs  /var/lib/lxc/nodejs/rootfs/home/debs none bind 0 0

Настройка параметров сети внутри LXC контейнера

Настраиваем сеть не через конфигурацию, а в контейнере (можно и так, и так) /var/lib/lxc/nodejs/rootfs/etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interfac

allow-hotplug eth0
auto eth0
iface eth0 inet static
      address 192.168.150.33
      netmask 255.255.255.0
      network 192.168.150.0
      broadcast 192.168.150.255
      gateway 192.168.150.1
      dns-nameservers 192.168.150.1

Настройка репозитариев и обустройство контейнера

Правим /var/lib/lxc/nodejs/rootfs/etc/apt/sources.list

#deb file:/home/debs /
deb http://mirror.mephi.ru/debian/ jessie main
deb-src http://mirror.mephi.ru/debian/ jessie main

deb http://security.debian.org/ jessie/updates main contrib
deb-src http://security.debian.org/ jessie/updates main contrib

# jessie-updates, previously known as 'volatile'
deb http://mirror.mephi.ru/debian/ jessie-updates main contrib
deb-src http://mirror.mephi.ru/debian/ jessie-updates main contrib

deb http://ftp.ru.debian.org/debian/ jessie main contrib non-free
deb http://http.debian.net/debian jessie-backports main contrib non-free

#deb http://www.deb-multimedia.org jessie main non-free
#deb http://www.deb-multimedia.org jessie-backports main



Изначально контейнер пустой (установлено 136 пакетов). Даже ping отсутствует.

apt-get update
apt-get install aptitude apt-utils mc ssh iputils-ping iptables cron wget

Если нет сети в LXC контейнере

Если интернета в контейнере не появилось, ping отсутствует, то как вариант можно создать локальный репозитарий, подмонтировать его в контейнер, в sources.list добавить ссылку на него и поставить bind9 и resolvconf.

  • качаем один или все три установочные диска с сайта
  • создаем папку на хост-машине /home/debs
  • из каталога pool каждого диска копируем в /home/debs каталоги main и contrib
  • создаем индекс репозитория
cd /home/debs
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

  • В sources.list контейнера добавить первой строкой (остальные #)
deb file:/home/debs /

  • Запустить контейнер и в нем поставить пакеты
lxc-start -dn nodejs
lxc-attach -n nodejs
apt-get update
apt-get install aptitude apt-utils mc ssh iputils-ping iptables cron wget resolvconf
apt-get install bind9
exit
lxc-stop -n nodejs
lxc-start -dn nodejs

После этого, при правильном конфигурировании gateway и dns-nameservers все должно заработать