Перейти к содержанию

Установка OpenVPN-сервера в Debian и бонус

Задачка тривиальная, конечно, но пусть будет тут.
На авторство кода не претендую, но внес небольшие изменения «под себя».

Интересующимся велкам под кат.

Проверяем возможность запуска tun-интерфейса

Если ваш хостер использует контейнеры OpenVZ, то, с вероятностью в 99%, запустить OpenVPN «из коробки» не получится. Все дело в том, что по умолчанию в OpenVZ не подключен модуль tun, его нужно включать руками. Проверить просто:

1
ls -l /dev/net/tun

Если вывод ничего не покажет — это повод задать вопрос своему хостеру (или подкрутить настройки контейнера).

Установка и настройка

1
aptitude install openvpn openssl easy-rsa
1
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Редактируем данные по-умолчанию, которые будут использоваться при генерации ключей:

1
cd /etc/openvpn/easy-rsa/ && nano vars

Редактируем, приводим примерно к такому виду:

1
2
3
4
5
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Leningradskaya"
export KEY_CITY="Saint-Petersburg"
export KEY_ORG="Nixman"
export KEY_EMAIL="info@nixman.info"

Инициируем наши переменные и, на всякий случай, очищаем папку keys (на случай, если там случайно оказались чужие ключи ;)). Будьте внимательны — после выполнения clean-all, если вы уже генерировали ключи для клиентов, их придется переделывать заново, как и ключ сервера.

1
2
# source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
1
# ./clean-all

А этой командой мы создаем корневой сертификат CA, которым будем подписывать наши ключи. Если он у вас уже есть (например, корпоративный) то этот шаг можно пропустить.

1
# ./build-ca

Теперь создаем ключи сервера:

1
# ./build-key-server server

И клиентов (повторить сколько потребуется):

1
# ./build-key user

Генерируем ключи DH и TLS:

1
# ./build-dh
1
# openvpn --genkey --secret keys/ta.key

Теперь копируем наши ключи сервера в папку с openvpn:

1
# cd keys && cp server.crt server.key ca.crt dh1024.pem ta.key /etc/openvpn/

Клиенту копируем (если это обычный linux-клиент):

1
# cd keys && cp user.crt user.key ca.crt ta.key home/snake/openvpn

Если в качестве клиента выступает микротик, то нужны только файлы user.crt и user.key

Моя конфигурация выглядит вот так:

1
nano /etc/openvpn/server.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
port 1194
proto tcp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.0.0.0 255.255.0.0
ifconfig-pool-persist ipp.txt
client-config-dir /etc/openvpn/staticlients
keepalive 10 120
cipher AES-128-CBC   # AES
persist-key
persist-tun
status openvpn-status.log
log         openvpn.log
log-append  openvpn.log
verb 4

Связано это с тем, что она заточена под клиенты-микротики, которые не умеют компрессию, работу поверх udp и еще несколько «фишек» обычного vpn-клиента.

Наконец, последний штрих:

1
2
cd /etc/openvpn
mkdir staticlients

Здесь будут размещаться файлы с ip наших клиентов.

Настройка Mikrotik-клиентов

Остановлюсь, на минутку, на настройке клиента. Клиентом у нас будет выступать Mikrotik, и его конфигурация будет, примерно, такая (будем считать, что ключ и сертификат вы на микротик уже поставили.

1
2
/interface ovpn-client
add cipher=aes128 connect-to=$srv name=hs-ovpn-$project user=$project certificate=[/certificate find common-name="$name"]

Обещанный бонус

Теперь мы для каждого пользователя сгенерируем свой сертификат и ключ буквально одним взмахом
Обратите внимание: здесь мы явно указываем, какой ip будет выдан пользователю. Это может быть полезно в ряде случаев, хотя чаще всего совершенно не требуется. Скрипт при этом упрощается.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#! /bin/bash
# Script to automate creating new OpenVPN clients
# The client cert and key, along with the CA cert is
# zipped up and placed somewhere to download securely
#
# H Cooper - 05/02/11
# Snake - 18/09/15
#
# Usage: new-openvpn-client.sh <common-name> <ip-address>

# Set where we're working from
OPENVPN_RSA_DIR=/etc/openvpn/easy-rsa/
OPENVPN_KEYS=$OPENVPN_RSA_DIR/keys
KEY_DOWNLOAD_PATH=/var/www/vhosts/site/cfg
HSPOT_PATH=/opt/hotspot/var
# Either read the CN from $1 or prompt for it
if [ -z "$1" ]
        then echo -n "Enter new client common name (CN): "
        read -e CN
else
        CN=$1
fi

# Ensure CN isn't blank
if [ -z "$CN" ]
        then echo "You must provide a CN."
        exit
fi

# Enter the easy-rsa directory and establish the default variables
cd $OPENVPN_RSA_DIR
# Check the CN doesn't already exist
if [ -f $OPENVPN_KEYS/$CN.crt ]
        then echo "WARN: certificate with the CN $CN alread exists!"
                echo "    $OPENVPN_KEYS/$CN.crt"
else
        source ./vars > /dev/null

# Copied from build-key script (to ensure it works!)
        echo "Generating keys..."
        export EASY_RSA="${EASY_RSA:-.}"
        "$EASY_RSA/pkitool" --batch $CN

fi
# Take the new cert and place it somewhere it can be downloaded securely
#echo "Zip and moving"
zip -q $KEY_DOWNLOAD_PATH/$CN.zip keys/$CN.crt eys/$CN.key

# Write information about ip
echo "ifconfig-push $2 10.0.0.1" > /etc/openvpn/staticlients/$1
# Celebrate!

Скрипт простой, но, на всякий случай, поясню:
1. Принимаем два параметра — имя клиента и желаемый IP. IP берем не с потолка, а только тот, который согласуется с маской сети и адресом сервера, которые мы указали в server.conf
2. Сгенерированные ключи помещаются в zip-архив и копируются в KEY_DOWNLOAD_PATH. Это может быть, например, папка на сайте (только обязательно включите хотя бы basic-авторизацию по паролю), либо папка ftp-сервера, откуда можно эти ключи передать клиенту.
3. IP клиента записывается в специальный файлик в папке staticlients.

Будьте первым, кто оставит комментарий

Добавить комментарий

%d такие блоггеры, как: