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

Настройка OpenVPN сервера на Linux

19 июня 2019
OpenVPN

Введение

Потребность в VPN сервере может быть очень разной, начиная от подключения своего телефона, заканчивая объединением филиалов и серверов. Не важно являетесь вы IT-специалистом или нет, он может обеспечить вам защищенный доступ к сети и использовать интернет этой сети. Например если вы находитесь в другой стране где действуют свои ограничения на доступ, можно подключиться через VPN и обойти все ограничения. Может вы работаете в организации где доступ предоставлятся через Proxy и действуют масса ограничений? Тогда OpenVPN поможет обойти это.

Необходимые условия

Прежде всего вам необходимо иметь сервер или ПК с Ubuntu 18.04.

1. Установка OpenVPN

Обновим пакеты и установим OpenVPN на наш сервер. OpenVPN доступен в стандартных репозиториях, поэтому используем пакетный менеджер для его установки.

sudo apt update 
sudo apt install openvpn easy-rsa -y

Пакет easy-rsa необходим для создания сертификатов, сейчас мы их и будем создавать.

2. Создание сертификатов

Копиреум шаблонную директорию:

make-cadir ~/openvpn-ca
cd ~/openvpn-ca

Настраиваем под себя переменные центра сертификации

nano -w vars

Нам нужно изменить всего несколько переменных:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="Primorye"
export KEY_CITY="Vladivostok"
export KEY_ORG="My LTD"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="IT"

Подготовка к созданию сертификатов, выполняем следующее:

echo KEY_CONFIG=`pwd`/openssl-1.0.0.cnf >> ./vars
source ./vars
./clean-all

2.1. Сертификаты сервера

Создаем корневой сертификат (CA) центра сертификации:

./build-ca

Нажимаем ENTER, когда нас спросят про "Common Name" и "Name", вписывем server

Далее создаем сертификат сервера:

./build-key-server server

Делаем все тоже самое, что и при создании CA. В самом конце отвечам для подписи и создания сертификата, пароль можно не указывать

Создаем ключ Диффи-Хеллмана:

./build-dh

Создаем подкпись HMAC для усиления способности сервера проверять целостность TLS:

openvpn --genkey --secret keys/ta.key

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

2.2. Сертификаты клиентов

Создаем клиента, который будет иметь доступ к серверу:

./build-key client1

Поле "Common Name" и "Name" указваем так же, как и название клиента (в нашем случае client1), пароль можно не ставить (по желанию), В самом конце отвечаем два раза y, все сертификат готов.

Если необходимо дополнительная защита паролем, тогда клиента необходимо создавать командой:

./build-key-pass client1

3. Настройка OpenVPN сервера

Копируем сгенерированные сертификаты сервера в директорию с OpenVPN:

cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

Далее нам надо настроить сам сервер, учтите один момент, если вы будете подключать Mikrotik (RouterOS) как клиент к своему серверу, тогда используйте "Конфигурацию №2", если RouterOS не планируется, тогда используйте "Конфигурацию №1".

Открываем файл в текстовом редакторе:

sudo nano -w /etc/openvpn/server.conf

И вставляем одну из конфигураций ниже.

Конфигурация №1

port 1194

proto udp

topology subnet
dev tun

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem

tls-auth /etc/openvpn/ta.key 0
key-direction 0
cipher AES-128-CBC
auth sha256

server 192.168.254.0 255.255.255.0

ifconfig-pool-persist /etc/openvpn/ipp.txt
client-config-dir /etc/openvpn/ccd

status /etc/openvpn/openvpn-status.log
log-append /etc/openvpn/openvpn.log

# Клиенты будут использовать OpenVPN сервер как основной шлюз
push "redirect-gateway def1"

# Клиенты могут видеть друг друга
client-to-client

user nobody
group nogroup

persist-key
persist-tun

keepalive 10 120
verb 0
mute 10

Самое основное на что следует обратить внимание - это параметр server 192.168.254.0 255.255.255.0 тут вы указываете подсеть которую будет использовать OpenVPN. Далее push "redirect-gateway def1" - клиенты будут использовать сервер OpenVPN как основной шлюз сети, если вам это не нужно, тогда просто закоментируйте эту сторку. Параметр client-to-client разрешает видеть клиентам друг друга, вы можете закоментировать эту строку если не хотите, чтобы клиенты имели доступ к друг другу.

Конфигурация №2 - Поддержка Mikrotik (RouterOS)

Если планируется подключать Mikrotik, тогда ниже я привел конфигурацию с его поддержкой. Все альтернативно "Конфигурацит №1" кроме некоторых пунктов.

port 1194

# Mikrotik (RouterOS) поддерживает только TCP
proto tcp
# UDP коментируем
;proto udp

topology subnet
dev tun

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem

# tls-auth и key-direction Mikrotik (RouterOS) 
# не поддерживает, коментируем.
;tls-auth /etc/openvpn/ta.key 0
;key-direction 0

cipher AES-128-CBC

# Поддержка только md5 и sha1
auth sha1
# SHA256 коментируем
;auth sha256

server 192.168.254.0 255.255.255.0

ifconfig-pool-persist /etc/openvpn/ipp.txt
client-config-dir /etc/openvpn/ccd

status /etc/openvpn/openvpn-status.log
log-append /etc/openvpn/openvpn.log

# Клиенты будут использовать OpenVPN сервер как основной шлюз
push "redirect-gateway def1"

# Клиенты могут видеть друг друга
client-to-client

user nobody
group nogroup

persist-key
persist-tun

keepalive 10 120
verb 0
mute 10

Сохраняем CTRL+o и выходим CTRL+x.

4. Настройка сети

Разрешаем перенаправление трафика IPv4:

sudo sed -i -- 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p

Сейчас необходимо узнать наш публичный интерфейс, вы можете посмотреть его командой ip route | grep default, после слова dev идет название (что-то вроде eth0 или enp0s1, либо еще как то).

Я подготовил команду, которая выведет вам название этого интерфейся (если вам лень смотреть самому):

i=0; for val in `ip route | grep default | head -n 1`; do if [[ $i == '4' ]]; then dev=$val; fi; i=$((i+1)); done; echo $dev

Теперь добавим правила трансляции адресов в файрвол, откроем файл для редактирования:

sudo nano -w /etc/ufw/before.rules

И добавим в самое начало файла строки:

# OpenVPN Rules
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0] 
# Allow traffic from OpenVPN client to provider
-A POSTROUTING -s 192.168.254.0/24 -o eth0 -j MASQUERADE
COMMIT
# END OpenVPN Rules

За место eth0 пишем свой интерфейс. Так же обратите внимание, если в настройках OpenVPN вы указывали другую подсеть (я указал 192.168.254.0) тогда вписываем свою.

Сохраняем CTRL+o и выходим CTRL+x.

Далее, разрешить фаерволу перенаправлять пакеты:

sudo sed -i -- 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw

Далее открываем порт, если вы использовали конфигурацию №1 - тогда udp, если №2 - тогда tcp:

sudo ufw allow 1194/udp # либо tcp

На всякий случай, разрешим SSH:

sudo ufw allow OpenSSH

Деактивируем и активируем файрвол:

sudo ufw disable
sudo ufw enable

4. Включение OpenVPN сервера

Пора включить наш сервер:

sudo systemctl start openvpn@server

Убедимся, что сервер успешно запущен командой:

sudo systemctl status openvpn@server

Если все получилось, в выводе статусе Active должно быть написано active (running).

Добавляем сервер в автозагрузку:

sudo systemctl enable openvpn@server

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

Design by Popov Aleksey

Copyright S-VL © 2010. All rights reserved.