Краткое описание: Инструкция по установке и настройке OpenVPN на Ubuntu Server, LDAP авторизация через службу Microsoft AD. Бесплатный VPN сервер на LInux, удалённый доступ к компьютеру.

Нужна консультация или помощь в решении IT вопроса?

Настройка OpenVPN Ubuntu Server, удаленный доступ

 

Альтернативой инструкции в данной статье есть упрощенный вариант, описанный в статье «Установка и настройка OpenVPN Access Server и LDAP«. Этот пакет включает в себе OpenVPN Server, а также web интерфейс для администратора(admin UI) и пользователя с уже готовыми для скачивания vpn клиентами.

VPN — виртуальная частная сеть, которая дает возможность удалённого подключения любого устройства для объединения в общую сеть. В виде объектов сети могут быть:

  • удалённые офисы, которые объединяются между собой;
  • частные подключения ноутбуков(windows и linux) и смартфонов(android и ios).

Решений для обоих вариантов множество: аппаратные устройства(cisco, mikrotik) и программные комплексы(pfsense, KerioControl, Windows маршрутизация и прочие VPN сервисы).

Среди решений выделяется OpenVPN как opensource продукт с высоким уровнем защиты(используя SSL), качественным сопровождением и поддержкой абсолютно любыми устройствами.

Сервис VPN можно отнести к корпоративному сегменту, поэтому настройка будет включать LDAP авторизацию на базе Microsoft AD.

Взаимодействие между элементами VPN будет содержать серверную и клиентские части.

Установка OpenVPN сервера на Ubuntu

В исходной позиции имеется сервер ОС Ubuntu Server 18.04 с последними пакетами обновлений. На данном сервере будет установлен и центр сертификации(CA) и служба OpenVPN Server.

установка утилиты Easy-RSA и генерация ключа и сертификата

Все ситуации требующие подтверждения нужно проходить в режиме «Далее\Yes\Enter».

cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
tar xzf EasyRSA-nix-3.0.5.tgz
cd ~/EasyRSA-3.0.5/
cp vars.example vars
nano ~/EasyRSA-3.0.5/vars
set_var EASYRSA_REQ_COUNTRY "UA"
set_var EASYRSA_REQ_PROVINCE "ODESA"
set_var EASYRSA_REQ_CITY "ODESA"
set_var EASYRSA_REQ_ORG "TOPNET"
set_var EASYRSA_REQ_EMAIL "admin@topnet.com.ua"
set_var EASYRSA_REQ_OU "TOPNET"
./easyrsa init-pki
./easyrsa build-ca nopass

установка OpenVPN сервера

sudo apt update
sudo apt install openvpn -y

генерация ключей Диффи-Хелмана(займет некоторое время)

./easyrsa gen-dh
sudo cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/
openvpn --genkey --secret ta.key
sudo cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/

создание сертификата и ключа сервера

./easyrsa gen-req openvpn-server nopass

верификация в центре сертификации(CA)

sudo cp ~/EasyRSA-3.0.5/pki/private/openvpn-server.key /etc/openvpn/
./easyrsa sign-req server openvpn-server
sudo cp ~/EasyRSA-3.0.5/pki/issued/openvpn-server.crt /etc/openvpn/
sudo cp ~/EasyRSA-3.0.5/pki/ca.crt /etc/openvpn/

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

sudo sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/openvpn-server.conf"

конфигурация OpenVPN сервера

sudo nano /etc/openvpn/openvpn-server.conf
cert openvpn-server.crt
key openvpn-server.key
dh dh.pem
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
user nobody
group nogroup
auth SHA256

запуск и проверка работы службы OpenVPN Server

sudo systemctl start openvpn@openvpn-server
sudo systemctl status openvpn@openvpn-server
sudo systemctl enable openvpn@openvpn-server
ip a show tun0
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p

определение рабочего сетевого интерфейса

ip -o -4 route show to default | awk '{print $5}'

изменение правил firewall-а

sudo nano /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
sudo nano /etc/ufw/before.rules

после последнего COMMIT добавить

#NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE
COMMIT
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
sudo ufw disable
sudo ufw enable

проверка правил в таблице маршрутизации

sudo iptables -nvL POSTROUTING -t nat

Конфигурация VPN клиента

создание конфигурации клиента OpenVPN

mkdir -p ~/openvpn-clients/{configs,base,files}
sudo cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/
sudo cp /etc/openvpn/ca.crt ~/openvpn-clients/base/
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-clients/base/
nano ~/openvpn-clients/base/client.conf
ca ca.crt
cert client.crt
key client.key
remote openvpn.topnet.com.ua 1194
auth SHA256

создание скрипта для генерации пользовательских конфигураций

nano ~/openvpn-clients/gen_config.sh
#!/bin/bash

FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs

BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key

CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key

# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
if [[ ! -f $i ]]; then
echo " The file $i does not exist"
exit 1
fi

if [[ ! -r $i ]]; then
echo " The file $i is not readable."
exit 1
fi
done

# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF
chmod u+x ~/openvpn-clients/gen_config.sh

генерация пользовательской конфигурации

~/EasyRSA-3.0.5/easyrsa gen-req vpn-client nopass
cp ~/EasyRSA-3.0.5/pki/private/vpn-client.key ~/openvpn-clients/files/
~/EasyRSA-3.0.5/easyrsa sign-req client vpn-client
cp /home/adminse/EasyRSA-3.0.5/pki/issued/vpn-client.crt ~/openvpn-clients/files
cd ~/openvpn-clients
sudo chmod 775 ./base/{ca.crt,ta.key}
~/openvpn-clients/gen_config.sh vpn-client
ls ~/openvpn-clients/configs

вывод должен содержать строку с файлом пользовательской конфигурации, который нужно передать пользователю для подключения, в данном случае это файл «vpn-client.ovpn«.

Удаленный доступ, подключение к OpenVPN серверу

Со стороны Windows клиента нужно установить приложение с официального сайта(ссылка) и положить файл конфигурации или в каталог пользователя или в «Programm Files» в соответствующую папку OpenVPN. Пример успешного подключения:Настройка OpenVPN Access Server, успешное Windows подключение

 

LDAP авторизация для OpenVPN

Важно! Первые попытки авторизации были не успешными, логи содержали ошибку «не найдет пользователь». Причиной было то, что в дереве AD были разделы на кириллице.

Со стороны сервера:

sudo apt install openvpn-auth-ldap -y
sudo mkdir /etc/openvpn/ldap
sudo nano /etc/openvpn/ldap/ldap.conf
<LDAP>
URL ldap://dc.topnet.com.ua
BindDN cn=adminX,DC=dc,DC=topnet,DC=com,DC=ua
Password DomainUserPassword
Timeout 15
</LDAP>

<Authorization>
BaseDN "DC=dc,DC=topnet,DC=com,DC=ua"
SearchFilter "(&(sAMAccountName=%u)(memberOf=CN=VPN,OU=Groups,DC=dc,DC=topnet,DC=com,DC=ua))"
RequireGroup false
</Authorization>
sudo nano /etc/openvpn/openvpn-server.conf
username-as-common-name
plugin /usr/lib/openvpn/openvpn-auth-ldap.so /etc/openvpn/ldap/ldap.conf
sudo systemctl restart openvpn@openvpn-server

со стороны клиента нужно добавить в конфигурацию пользователя(файл vpn-client.ovpn)

auth-user-pass

Данные действия приведут к выводу формы запроса на LDAP авторизацию с проверкой службой Microsoft Active Directory.Настройка OpenVPN Access Server, Windows авторизация Ldap

 

Если у вас есть профессиональный интерес в расширении данной статьи — заполните форму запроса.