Шпаргалка сисадмина

OpenVPN сервер на Ubuntu 22.04

27.03.2025 | Категория: Linux

OpenVPN сервер на Ubuntu 22.04

Где взять VPS(виртуальную машину) и как к ней подключится?

Я лично использовал justhost или Айхор и брал самую дешёвую виртуалку в Нидерландах.

Далее будет инструкция по подключению:

  1. Зарегистрироваться, оплатить VPS

  2. Пока Вы ждёте её включение, скачайте PuTTy (скачать)

  3. Когда VPS запустилась, Вам на почту по которой вы регистрировались приходит письмо, в котором есть пароль от пользователя root, и IPv4 адрес, запоминаем их

  4. Открываем PuTTy и в поле Host Name (or IP address) вводим ip (IPv4) адрес который мы запомнили из письма и нажимаем Open

  5. Соглашаемся (Accept) с предупреждением о безопасности (оно появляется 1 раз)

  6. Если вы увидели надпись login as: , то Вы подключились

  7. Вводим root и при запросе пароля вводим пароль из письма

Создание нового пользователя и вход под ним (по соображениям безопасности)

  1. useradd -m <любое имя пользователя>
  2. passwd <имя созданного ранее пользователя>
  3. usermod -aG sudo <имя созданного ранее пользователя>

  4. sudo chsh -s /bin/bash <имя созданного ранее пользователя>

Подключаемся заново и входим под ранее созданным пользователем

Предварительная подготовка

Установка пакетов

  1.  sudo apt install easy-rsa
  2.  sudo apt install openvpn
  3.  sudo apt install iptables-persistent

Настройка  FireWall

  1.  sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
  2.  sudo netfilter-persistent save

Настройка директорий VPN

  1. sudo mkdir -p /etc/openvpn/keys
  2. sudo mkdir /etc/openvpn/easy-rsa
  3. cd /etc/openvpn/easy-rsa
  4. sudo cp -r /usr/share/easy-rsa/* .

  5. Создадим директорию для конфигураций клиентов

    sudo mkdir /etc/openvpn/ccd

 

Настройка VPN

Конфигурируем конфиги

Настройка vars

  1. sudo nano /etc/openvpn/easy-rsa/vars
  2.  В открывшийся интерфейс вставляем:

    export KEY_COUNTRY="RU" 
    export KEY_PROVINCE="Moscow"
    export KEY_CITY="Moscow"
    export KEY_ORG="sten"
    export KEY_ORG="sten@example.com"
    export KEY_CN="sten"
    export KEY_OU="sten"
    export KEY_NAME="vpn.StenLi.com"
    export KEY_ALTNAMES="vpn2.StenLi.com"

    KEY_ORG, KEY_ORG, KEY_CN, KEY_OU, KEY_NAME, KEY_ALTNAMES — можно указывать всё, что угодно

  3. Для выхода с сохранением нажимаем по порядку: ctrl+x, y, enter

Настройка /etc/nat (FireWall)

  1. sudo nano /etc/nat
  2. В открывшийся интерфейс вставляем:

    #!/bin/sh
    
    # Включаем форвардинг пакетов
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    # Сбрасываем настройки брандмауэра
    iptables -F
    iptables -X
    iptables -t nat -F
    iptables -t nat -X
    
    # Разрешаем инициированные нами подключения извне
    iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # Разрешаем подключения по SSH
    iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
    
    # Разрешаем подключения к OpenVPN
    iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
    
    # Разрешает входящий трафик из tun0
    iptables -A INPUT -i tun0 -j ACCEPT
    
    # Разрешает транзитный трафик между eth0 и tun0 (Название eth0 может отличаться):
    iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
    iptables -A FORWARD -i tun0 -o eth0 -j ACCEP
    
    # Запрещаем входящие извне
    iptables -A INPUT -i eth0 -j DROP
    
    # Разрешаем инициированные нами транзитные подключения извне
    iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j A
    
    # Запрещаем транзитный трафик извне
    iptables -A FORWARD -i eth0 -o tun0 -j DROP
    
    # Включаем маскарадинг для локальной сети
    iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE
    Узнать имена сетевых интерфейсов
    ip link show
  3. Что бы сохранить и выйти нажимаем по порядку: ctrl+x, y, enter

  4. sudo chmod 755 /etc/nat

 

Создание ключей сервера

  1. sudo ./easyrsa init-pki - Создаём каталог PKI
  2. sudo ./easyrsa build-ca - Создаем корневой сертификат
    Вводим пароль сертификата CA и запоминаем его "Enter New CA Key Passphrase"
    Полученные файлы будут расположены в:
    /etc/openvpn/easy-rsa/pki/ca.crt
    /etc/openvpn/easy-rsa/pki/private/ca.key

  3. Создаем запрос на сертификат для сервера и генерируем сам сертификат
    (вместо имени «vpn-server» указать своё имя сервера). Добавить опцию nopass.
    Без этого файл запроса будет защищен паролем, что впоследствии может привести к проблемам с разрешениями

    sudo  ./easyrsa gen-req vpn-server nopass

    sudo  ./easyrsa sign-req server vpn-server
    После ввода команды подтверждаем правильность данных, введя yes, и вводим пароль, который указывали при создании корневого сертификата.
    Полученные файлы будут расположены в:
    /etc/openvpn/easy-rsa/pki/issued/server.crt
    /etc/openvpn/easy-rsa/pki/private/server.key

  4. Формируем ключ dh Диффи-Хеллмана:

    sudo ./easyrsa gen-dh
    Полученный файл будет расположен в:
    /etc/openvpn/easy-rsa/pki/dh.pem

     

  5. Создадим ta ключ, чтобы использовать параметр tls-auth, добавив дополнительную проверку целостности.  Это обеспечит дополнительный уровень безопасности протокола SSL/TLS:

    sudo openvpn --genkey --secret pki/ta.key
    Полученный файл будет расположен в:
    /etc/openvpn/easy-rsa/pki/ta.key

     

  6. Далее копируем всё созданное в папку /etc/openvpn/keys/

    sudo cp pki/ca.crt /etc/openvpn/keys/
    sudo cp pki/issued/vpn-server.crt /etc/openvpn/keys/
    sudo cp pki/private/vpn-server.key /etc/openvpn/keys/ 
    sudo cp pki/dh.pem /etc/openvpn/keys/
    sudo cp pki/ta.key /etc/openvpn/keys/

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

Создадим конфигурационный файл сервера:

sudo nano /etc/openvpn/server.conf

И приводим его к виду:

 local 999.999.999.999 
port 1194
proto udp
dev tun
ca keys/ca.crt
cert keys/vpn-server.crt
key keys/vpn-server.key
dh keys/dh.pem
tls-auth keys/ta.key 0
server 10.0.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-to-client
client-config-dir /etc/openvpn/ccd
keepalive 10 120
max-clients 32
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 4
mute 20
daemon
mode server
tls-server
comp-lzo
tun-mtu 1500
mssfix 1620
cipher AES-256-GCM
topology subnet

push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"

up /etc/nat

  • client-to-client даёт возможность клиентам видеть и общаться друг с другом в локальной сети

  • client-config-dir /etc/openvpn/ccd мы указываем директорию  в которой задаём статические ip адреса клиентам. Об этом позже

Меняем local 999.999.999.999 на local <внешний ip VPS(IP по которому вы подключались через PuTTy)

 

Запуск сервера

  1. sudo systemctl start openvpn@server
  2. sudo systemctl status openvpn@server

  3. Сервер запустился!!!! УРА!!!!

 

Генерация сертификатов

  1. cd /<Любая удобная вам директория>
  2. sudo nano gen_sert.sh
  3. Вставляем в открывшееся окно:

    #!/bin/bash
    
    if [ $# -ne 1 ]; then
        echo "Usage: $0 --client-name"
        exit 1
    fi
    
    client_name=$1
    password=""
    rm -r /tmp/keys
    mkdir /tmp/keys
    cd /etc/openvpn/easy-rsa
    export EASYRSA_CERT_EXPIRE=1460
    echo "$password" | ./easyrsa build-client-full $client_name nopass
    cp pki/issued/$client_name.crt pki/private/$client_name.key pki/ca.crt pki/ta.key /tmp/keys/
    chmod -R a+r /tmp/keys
    
    cat << EOF > /tmp/keys/$client_name.ovpn
    client
    resolv-retry infinite
    nobind
    remote 999.999.999.999 1194
    proto udp
    dev tun
    comp-lzo
    ca ca.crt
    cert $client_name.crt
    key $client_name.key
    tls-client
    tls-auth ta.key 1
    float
    keepalive 10 120
    persist-key
    persist-tun
    tun-mtu 1500
    mssfix 1620
    cipher AES-256-GCM
    verb 0
    
    EOF
    
    echo "OpenVPN client configuration file created: /tmp/keys/$client_name.ovpn"
    Сгенерированный набор клиентских файлов скрипт будет складывать сюда: /tmp/keys/
    Забираем их при помощи WinSCP
  4. Заменяем remote 999.999.999.999 1194 на remote <IP сервера> 1194

  5. Перейти в директорию которую создали в первом пункте "cd /<Любая удобная вам директория>" (каждый раз при создании нового сертификата пользователя)
  6. sudo bash ./gen_sert.sh <Имя сертификата>

например:

sudo bash ./gen_sert.sh user1

Система попросит ввести сначала пароль sudo а потом спросит пароль "ca" (который установили ранее)

Конфиг *.ovpn будет лежать тут: /tmp/keys, а сертификат и ключ клиента будут расположены в:
/etc/openvpn/easy-rsa/pki/issued/user1.crt
/etc/openvpn/easy-rsa/pki/private/user1.key

Посмотрим что там:

cd /tmp/keys

С помощью winscp достаем из этих директорий файлы.

Вот такой список файлов должен получиться для передачи клиенту:

/tmp/keys/user1.ovpn
/etc/openvpn/easy-rsa/pki/ta.key
/etc/openvpn/easy-rsa/pki/ca.crt
/etc/openvpn/easy-rsa/pki/issued/user1.crt
/etc/openvpn/easy-rsa/pki/private/user1.key

С помощью winscp скачиваем всё в одну папку, архивируем и передаём клиенту.

 

Задание статических адресов клиентам

  1. cd /etc/openvpn/ccd
  2. sudo nano  <Имя сертификата который вы указали при создании>
    Например: sudo nano user1
  3. Вставляем в открывшееся окно:

     ifconfig-push 10.0.0.<адрес который не будет меняться, адреса не должны повторяться> 255.255.255.0

Например:

ifconfig-push 10.0.0.3 255.255.255.0

и так далее...  Готово !

 

 

Источник

Дополнительные материалы:

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

Как настроить OpenVPN Server на Ubuntu 20.04

Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.