Краткое описание: Инструкция по установке и настройке 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

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