VPN

Как настроить VPN-сервер WireGuard на CentOS

WireGuard — это приложение, предназначенное для создания защищенной виртуальной частной сети (VPN) с удобным интерфейсом и простой настройкой. Используя надежные криптографические протоколы и алгоритмы, программа обеспечивает шифрование данных. Изначально разработанная для ядра Linux, программа WireGuard была расширена до совместимости с Windows, macOS, FreeBSD, iOS и Android.

Шаг 1. Установка сервера WireGuard на CentOS

Для начала получите последние обновления, выполнив следующие команды:

sudo yum update 

sudo dnf update

Для установки необходимых модулей ядра и инструментов WireGuard включите репозитории EPEL и Elrepo:

sudo dnf install epel-release elrepo-release -y

Убедитесь, что репозиторий PowerTools активен, поскольку пакеты EPEL могут полагаться на его компоненты:

sudo yum install ‘dnf-command(config-manager)’

sudo yum config-manager —set-enabled PowerTools

Перед установкой модуля ядра WireGuard активируйте его официальный репозиторий:

sudo yum copr enable jdoss/wireguard

Наконец, перейдите к установке WireGuard:

sudo yum install wireguard-dkms wireguard-tools

Шаг 2. Генерация закрытого и открытого ключей

WireGuard работает по принципу шифрования соединений с помощью пары криптографических ключей. При этом открытый ключ передается другой стороне, что позволяет ей шифровать сообщения таким образом, что расшифровать их может только соответствующий закрытый ключ. Для обеспечения безопасности двусторонней связи каждой стороне необходим свой набор закрытых и открытых ключей. Каждая пара ключей обеспечивает только односторонний обмен сообщениями.

Перед созданием пары ключей перейдите в каталог.

Перейдите в каталог WireGuard с помощью команды:

cd /etc/wireguard

Настройте разрешения для этого каталога:

umask 077

Для генерации пары ключей выполните следующую команду:

wg genkey | tee private.key | wg pubkey > public.key

Проверьте сгенерированные ключи с помощью команд:

ls -l privatekey publickey

sudo cat privatekey

sudo cat publickey

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

Шаг 3. Настройка серверной конфигурации

Для начала настройки сервера WireGuard перейдите в папку /etc/wireguard и создайте файл wg0.conf с помощью команды:

sudo nano /etc/wireguard/wg0.conf

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

[Interface]

PrivateKey = <contents-of-server-privatekey>

Address = 10.0.0.1/24

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

ListenPort = 51820

[Peer]

PublicKey = <contents-of-client-publickey>

AllowedIPs = 10.0.0.0.2/32

Извлеките сгенерированный ранее закрытый ключ и вставьте его в поле PrivateKey.

Затем сгенерируйте пару ключей для клиента, скопируйте открытый ключ клиента и вставьте его в поле PublicKey. Для копирования значения ключа воспользуйтесь следующими командами:

sudo cat /etc/wireguard/public.key

sudo cat /etc/wireguard/private.key

Шаг 4. Настройка FireWall

По умолчанию брандмауэр ограничивает все соединения между внутренней сетью (wg0) и публичной сетью (eth0). Давайте изменим эту конфигурацию с помощью следующих команд:

sudo firewall-cmd —add-interface=wg0 —zone=internal

sudo firewall-cmd —permanent —zone=internal

Шаг 5. Запуск WireGuard и включение его при загрузке

Теперь сервер готов к запуску. Для запуска WireGuard воспользуйтесь командой wg-quick и укажите имя нового интерфейса:

wg-quick up wg0

Если конфигурация верна, то на экране появится следующее окно:

[WireGuard for CentOS — Screenshot].

Чтобы проверить состояние сервера WireGuard, введите:

wg show

OpenVPN vs WireGuard: какой VPN лучше?

OpenVPN и WireGuard — популярные протоколы VPN, у которых есть несколько ключевых различий. Решение о том, какой из них лучше, зависит от ваших конкретных потребностей и предпочтений.

OpenVPN

OpenVPN известен своими сильными функциями безопасности. Он использует библиотеку OpenSSL и поддерживает различные алгоритмы шифрования, включая AES, Blowfish и Camellia.

OpenVPN широко поддерживается и может использоваться на различных операционных системах, включая Windows, macOS, Linux и мобильные платформы. Он также хорошо работает с брандмауэрами и трансляцией сетевых адресов (NAT).

OpenVPN обладает высокой конфигурируемостью, позволяя вам настраивать параметры в соответствии с вашими требованиями. Он поддерживает как UDP (User Datagram Protocol), так и TCP (Transmission Control Protocol) для связи.

WireGuard

WireGuard — легкий и простой в использовании протокол. Он имеет более простую кодовую базу по сравнению с OpenVPN, что делает его более легким для аудита и потенциально более безопасным.

WireGuard разработан для обеспечения высокой эффективности и предлагает более высокую скорость по сравнению с OpenVPN. В нем используются современные криптографические протоколы, такие как ChaCha20 для шифрования и Curve25519 для обмена ключами, что обеспечивает преимущество в скорости.

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

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

Заключение

OpenVPN известен своей надежной безопасностью, совместимостью и гибкостью, в то время как WireGuard ставит во главу угла простоту, производительность и поддержку мобильных устройств. Если вам требуется проверенное решение с широкими возможностями конфигурирования, OpenVPN — это надежный выбор. С другой стороны, если вы отдаете предпочтение скорости, простоте и эффективному мобильному использованию, WireGuard может оказаться более предпочтительным вариантом.

Как настроить VPN IPsec

Виртуальная частная сеть (VPN) часто используется для создания безопасного туннеля передачи данных между локальным компьютером и удаленным сервером. Существуют различные протоколы туннелирования VPN, и в этой статье мы сосредоточимся на настройке L2TP через IPSec для Windows.

L2TP, или Layer 2 Tunneling Protocol, сам по себе не обеспечивает надежного шифрования. Именно здесь в игру вступает IPSec, поскольку он обеспечивает надежное шифрование данных, которыми обмениваются удаленный сервер и локальная машина. Комбинируя L2TP и IPSec, можно создать безопасное и зашифрованное VPN-соединение, обеспечивающее конфиденциальность и целостность передаваемых данных.

Введение

Технология IPsec VPN позволяет создать туннель для передачи трафика из частных сетей через публичный интернет. Это достигается путем шифрования данных для обеспечения их безопасности. VPN на базе IPsec обычно используются для соединений site-to-site, соединяющих две географически разделенные сети, например, различные центры обработки данных, когда выделенные каналы связи нецелесообразны.

В этой статье мы продемонстрируем, как запустить виртуальную машину с IPsec VPN для маршрутизации трафика из облачной сети в удаленную точку подключения. В качестве примера мы будем использовать демон strongSwan. Во второй части мы рассмотрим пример схемы обхода отказа с двумя виртуальными машинами IPsec VPN, обеспечивая избыточность и высокую доступность.

Исходные данные 

  • виртуальная машина с Ubuntu 20.04
  • 1 порт имеет подключение к публичной сети (как default route)
  • 2 порт подключается к частной сети, в которой необходимо настроить маршрутизацию

Схема адресации

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

На стороне *** ваша виртуальная машина оснащена двумя портами, настроенными на IPsec. Первый порт имеет адрес 188.68.206.154 и подключен к публичной сети. Второй порт имеет адрес 192.168.10.10 и подключен к частной сети.

Настройка VPN с одним инстансом

Подключитесь к виртуальной машине по SSH и начните настройку. Первое, что нужно сделать, это установить демон strongSwan и включить его в автозагрузке:

sudo apt update

sudo apt install -y strongswan

sudo systemctl enable strongswan-starter

Далее необходимо включить пересылку пакетов между интерфейсами, поскольку ваша виртуальная машина будет служить шлюзом для частной сети, пересылая трафик через публичную сеть с шифрованием.

sudo cat << EOF > /etc/sysctl.d/99-vpn-ipsec.conf

net.ipv4.ip_forward = 1

net.ipv6.conf.all.forwarding = 1

net.ipv4.conf.all.accept_redirects = 0

net.ipv4.conf.all.send_redirects = 0

EOF

sudo sysctl -p /etc/sysctl.d/99-vpn-ipsec.conf

Создайте файл конфигурации IPsec для strongSwan:

sudo cat << EOF > /etc/ipsec.conf

config setup

        charondebug=»all»

        uniqueids=yes

        strictcrlpolicy=no

conn site-to-site-vpn

        type=tunnel

        authby=secret

        left=%defaultroute

        leftid=188.68.206.154

        leftsubnet=192.168.10.0/24

        right=51.250.46.166

        rightsubnet=192.168.20.0/24

        ike=aes256-sha2_256-modp1024!

        esp=aes256-sha2_256!

        keyingtries=0

        ikelifetime=1h

        lifetime=8h

        dpddelay=30

        dpdtimeout=120

        dpdaction=restart

        auto=start

EOF

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

  • leftid: Это публичный IP-адрес самой виртуальной машины IPsec. В вашем случае это 188.68.206.154. Однако в другой среде этот адрес будет другим.
  • leftsubnet: Это относится к частной сети, созданной в облаке Selectel для других виртуальных машин. Это сеть, из которой вам нужен доступ к виртуальным машинам в другом облаке.
  • right: Это публичный IP-адрес удаленной виртуальной машины. В вашем случае это 51.250.46.166.
  • rightsubnet: Это удаленная частная сеть. Это сеть, созданная в другом облаке и используемая для виртуальных машин.

Для получения более подробной информации о других опциях рекомендуется обратиться к официальной документации, поскольку могут существовать дополнительные опции, специфичные для вашей установки.

Создайте файл, который будет содержать ключ для подключения:

sudo cat << EOF > /etc/ipsec.secrets

188.68.206.154 51.250.46.166 : PSK «<SECRET>»

EOF

SECRET — пароль, указанный с обеих сторон тоннеля, то есть на обеих виртуальных машинах VPN IPsec.

Перезагружаем IPsec демон и проверяем статус подключения:

sudo systemctl restart strongswan-starter
ipsec status

Настройка отказоустойчивой схемы

В отличие от предыдущей схемы, в этой конфигурации используются VIP-адреса в качестве IP-адреса шлюза в приватной сети и основного адреса для VPN-туннеля. Перемещение VIP-адресов между виртуальными машинами осуществляется при помощи протокола VRRP.

Для настройки отказоустойчивой схемы необходимо добавить еще одну виртуальную машину для VPN. Она будет называться vpn2, а первая виртуальная машина — vpn1.

Настройки по умолчанию установите также на 2 ВМ:

sudo apt update
sudo apt install -y strongswan
sudo systemctl enable strongswan-starter
sudo cat << EOF > /etc/sysctl.d/99-vpn-ipsec.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
EOF
sudo sysctl -p /etc/sysctl.d/99-vpn-ipsec.conf

Прежде чем настраивать IPsec, требуется установить и сконфигурировать демон keepalived для использования протокола VRRP. Следуйте инструкциям ниже для установки этой службы:

sudo apt install -y keepalived

Для достижения требуемой VRRP-конфигурации:

  1. Убедитесь, что оба VIP-адреса находятся в одной группе и перемещаются одновременно между виртуальными машинами. Это гарантирует, что обе виртуальные машины могут выступать в качестве MASTER и BACKUP для обслуживания запросов.
  2. Когда статус инстанса изменяется с MASTER на BACKUP и обратно, необходимо включать и отключать IPsec соответственно. Это обеспечит построение VPN-туннеля только с одной виртуальной машины в определенный момент времени.

Теперь перейдем к настройке VRRP на виртуальной машине vpn2:

sudo cat << EOF > /usr/local/sbin/notify-ipsec.sh

#!/bin/bash

TYPE=\$1

NAME=\$2

STATE=\$3

case \$STATE in

        «MASTER») /usr/sbin/ipsec restart

                  ;;

        «BACKUP») /usr/sbin/ipsec stop

                  ;;

        «FAULT»)  /usr/sbin/ipsec stop

                  exit 0

                  ;;

        *)        /usr/bin/logger «ipsec unknown state»

                  exit 1

                  ;;

esac

EOF

sudo chmod a+x /usr/local/sbin/notify-ipsec.sh

sudo cat << EOF > /etc/keepalived/keepalived.conf

vrrp_sync_group G1 {

    group {

        EXT

        INT

    }

    notify «/usr/local/sbin/notify-ipsec.sh»

}

vrrp_instance INT {

    state BACKUP

    interface eth1

    virtual_router_id 11

    priority 25

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass <SECRET>

    }

    virtual_ipaddress {

        192.168.120.100/24

    }

    nopreempt

    garp_master_delay 1

}

vrrp_instance EXT {

    state BACKUP

    interface eth0

    virtual_router_id 22

    priority 25

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass <SECRET>

    }

    virtual_ipaddress {

        188.68.206.158/29

    }

    nopreempt

    garp_master_delay 1

}

EOF

Следующие команды выполняют две задачи:

  1. Создают файл /usr/local/sbin/notify-ipsec.sh, который представляет собой скрипт, вызываемый при изменении статуса VRRP. Этот скрипт будет отвечать за выключение и включение IPsec соответствующим образом.
  2. Создают файл конфигурации /etc/keepalived/keepalived.conf, который будет использоваться keepalived для настройки двух групп.

После создания этих файлов необходимо перезагрузить keepalived и включить его автоматически при запуске системы.

sudo systemctl restart keepalived

sudo systemctl enable keepalived

После выполнения этих шагов можно приступить к настройке IPsec на виртуальной машине vpn2. Новая конфигурация файла будет отличаться, так как теперь туннель должен быть установлен с использованием VIP-адреса, а не адреса, связанного с интерфейсом.

sudo cat << EOF > /etc/ipsec.conf

config setup

        charondebug=»all»

        uniqueids=yes

        strictcrlpolicy=no

conn site-to-site-vpn

        type=tunnel

        authby=secret

        left=%defaultroute

        leftid=188.68.206.158

        leftsubnet=192.168.10.0/24

        right=51.250.46.166

        rightsubnet=192.168.20.0/24

        ike=aes256-sha2_256-modp1024!

        esp=aes256-sha2_256!

        keyingtries=0

        ikelifetime=1h

        lifetime=8h

        dpddelay=30

        dpdtimeout=120

        dpdaction=restart

        auto=start

EOF

После завершения настройки vpn2 мы переходим к настройке vpn1. На первой виртуальной машине также необходимо запустить VRRP и внести некоторые изменения в конфигурацию IPsec.

Поскольку данная схема разработана для обеспечения отказоустойчивости, большинство конфигурационных файлов будут идентичны настройкам vpn2. Единственное отличие заключается в том, что роль VRRP на этом инстансе будет MASTER. Сначала устанавливаем keepalived, затем создаем конфигурацию и скрипт для контроля IPsec:

sudo apt install -y keepalived

sudo cat << EOF > /usr/local/sbin/notify-ipsec.sh

#!/bin/bash

TYPE=\$1

NAME=\$2

STATE=\$3

case \$STATE in

        «MASTER») /usr/sbin/ipsec restart

                  ;;

        «BACKUP») /usr/sbin/ipsec stop

                  ;;

        «FAULT»)  /usr/sbin/ipsec stop

                  exit 0

                  ;;

        *)        /usr/bin/logger «ipsec unknown state»

                  exit 1

                  ;;

esac

EOF

sudo chmod a+x /usr/local/sbin/notify-ipsec.sh

sudo cat << EOF > /etc/keepalived/keepalived.conf

vrrp_sync_group G1 {

    group {

        EXT

        INT

    }

    notify «/usr/local/sbin/notify-ipsec.sh»

}

vrrp_instance INT {

    state MASTER

    interface eth1

    virtual_router_id 11

    priority 25

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass <SECRET>

    }

    virtual_ipaddress {

        192.168.120.100/24

    }

    nopreempt

    garp_master_delay 1

}

vrrp_instance EXT {

    state MASTER

    interface eth0

    virtual_router_id 22

    priority 25

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass <SECRET>

    }

    virtual_ipaddress {

        188.68.206.158/29

    }

    nopreempt

    garp_master_delay 1

}

EOF

sudo systemctl enable keepalived

Важно, чтобы пароль <SECRET>, указанный в конфигурации, был одинаковым на обеих виртуальных машинах VPN.

Далее необходимо обновить конфигурацию IPsec и конфигурацию секрета IPsec. В этих конфигурационных файлах необходимо изменить основной адрес на VIP-адрес. Таким образом, конфигурация IPsec и конфигурация секрета будут идентичными на vpn1 и vpn2.

sudo cat << EOF > /etc/ipsec.conf

config setup

        charondebug=»all»

        uniqueids=yes

        strictcrlpolicy=no

conn site-to-site-vpn

        type=tunnel

        authby=secret

        left=%defaultroute

        leftid=188.68.206.158

        leftsubnet=192.168.10.0/24

        right=51.250.46.166

        rightsubnet=192.168.20.0/24

        ike=aes256-sha2_256-modp1024!

        esp=aes256-sha2_256!

        keyingtries=0

        ikelifetime=1h

        lifetime=8h

        dpddelay=30

        dpdtimeout=120

        dpdaction=restart

        auto=start

EOF

sudo cat << EOF > /etc/ipsec.secrets

188.68.206.158 51.250.46.166 : PSK «<SECRET>»

EOF

После внесения изменений необходимо перезагрузить keepalived и проверить статус IPsec:

sudo systemctl restart keepalived

ipsec status

Установка OpenVPN сервера на Linux и настройка клиента для подключения к нему

Требование к оборудованию

Виртуализация — KVM. Сервер — VPS/VDS на Linux.

Установка OpenVPN

С помощью Docker

  • apt install curl docker.io
  • yum install docker curl 
  • docker run —name dockovpn —cap-add=NET_ADMIN \

     -p 1194:1194/udp -p 80:8080/tcp \

   -e HOST_ADDR=$(curl -s https://api.ipify.org) \

 alekslitvinenk/openvpn

Когда ваша конфигурацию подготовиться, скачайте ее по ссылке — http://ваш IP/

С помощью скрипта

Скачайте скрипт: 

  • curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh

Права для файла:

  • chmod +x openvpn-install.sh

Запуск скрипта:

  • ./openvpn-install.sh

Перед запуском VPN, укажите во время исполнения скрипта IP-адрес. Шлюз лучше не указывать, чтобы избежать ошибок исполнения.

Вы можете добавить пароль на подключение. Чтобы не инициализировать ключ для подключения, введите цифру 1.

Client name: openvpn

Do you want to protect the configuration file with a password?

(e.g. encrypt the private key with a password)

  1) Add a passwordless client

  2) Use a password for the client

Select an option [1-2]: 1

Создан файл, располагающийся в /root/client.ovpn

  • client — имя пользователя

Чтобы скачать файл конфигурации, проведите аналогичную процедуру (ваш IP). При повторном запуске скрипта, вы можете:

  • удалить пользователя OpenVPN
  • удалить OpenVPN
  • добавить пользователя OpenVPN

Ручная установка OpenVPN

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

  • apt install -y openvpn

Разархивируйте ключи: 

mkdir /src; cd /src && wget https://github.com/OpenVPN/easy-rsa/archive/master.zip

unzip master.zip

cd easy-rsa-master/easyrsa3

./easyrsa init-pki

Создайте центр сертификации. Пароль, который будет необходим для завершения сохраните:

./easyrsa build-ca

Вывод:

./pki/ca.crt

./pki/private/ca.key

Сгенерируйте запрос, чтобы создать сертификат, позволяющий осуществлять подключение к серверу, не используя пароль:

./easyrsa gen-req server nopass

Подпишите запрос. Для этого используйте пароль, который установили при создании центра сертификации:

./easyrsa sign-req server server

Вывод:

./pki/issued/server.crt

Сгенерируйте ключи для клиента:

./easyrsa gen-req client nopass

./easyrsa sign-req client client

Вывод (два файла):

./pki/private/client.key

./pki/issued/client.crt

Сгенерируйте файл с параметрами Диффи-Хеллмана:

./easyrsa gen-dh

Вывод:

./pki/dh.pem

Перенесите файлы:

mv ./pki/dh.pem /etc/openvpn/dh1024.pem

mv ./pki/private/client.key /etc/openvpn/

mv ./pki/private/server.key /etc/openvpn/

mv ./pki/ca.crt /etc/openvpn/

mv ./pki/issued/client.crt /etc/openvpn/

mv ./pki/issued/server.crt /etc/openvpn/

client.crt, client.key, ca.crt переместите на устройство (компьютер) пользователя, который инициирует подключение к серверу OpenVPN:

cd /etc/openvpn

mkdir ovpn-client

cp -rp  client.crt client.key ca.crt ./ovpn-client/

zip ovpn-client.zip ./ovpn-client/*

Настройка файла конфигурации

Расположение файла — /etc/openvpn. Имя файла — server.conf. Пример конфигурации:

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.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo

persist-key

persist-tun

status openvpn-status.log

log         openvpn.log

log-append  openvpn.log

verb 3

push «redirect-gateway def1»

push «dhcp-option DNS 8.8.8.8»

В  конфигурационном файле в опциях ca, cert, key, dh можно использовать абсолютные пути до файлов или пути относительно директории /etc/openvpn.

Абсолютные пути:

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt

cert /etc/openvpn/easy-rsa/2.0/keys/server.crt

key /etc/openvpn/easy-rsa/2.0/keys/server.key

dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

Сохранение файла, настройка маршрутизации для OpenVPN server:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

Запуск OpenVPN:

systemctl start openvpn

Настройка OpenVPN

Если сервер был установлен при помощи скрипта или с использованием Docker, то конфигурационный файл openvpn.conf генерируется автоматически, его необходимо импортировать в ваш OpenVPN клиент. Если настройка производилась вручную, то и файл конфигурации для клиента необходимо корректировать вручную. Далее о том, как это сделать.

Windows

Клиент для Windows: https://openvpn.net/

Скрипт или контейнер

Импортируйте конфигурацию:

Выберите необходимый файл:

Конфигурация успешно импортирована:

Чтобы подключиться:

Подключение после ручной корректировки

Перейдите в директорию, где расположена программа (например, C:\Program and Files\OpenVPN\sample-config).

Откройте в текстовом редакторе файл client.ovpn, внесите дополнение:

remote my-server-1 1194

Скачивайте данные файлы (скачать нужно в ту директорию, где проводили корректировки):

/etc/openvpn/easy-rsa/keys/ca.crt

/etc/openvpn/easy-rsa/keys/client.crt

/etc/openvpn/easy-rsa/keys/client.key

Выберите Start OpenVPN on this config file. Сообщение в случае успешного соединения:

Linux

Установка клиента:

Centos 7 (yum install -y openvpn)

Debian/Ubuntu (apt install -y openvpn)

Скрипт или контейнер

Разместите файл .conf в /etc/openvpn/client.conf, выполните подключение:

 openvpn —config /etc/openvpn/openvpn.conf

Загрузите 3 файла, созданных на сервере в директорию /etc/openvpn/:

client1.key

client1.crt

ca.crt

Вы получите файл с кодом:

remote <IP.вашего.сервера> 1194

push «redirect-gateway def1»

tls-client

remote-cert-tls server

nobind

proto tcp-client

dev tun0

pull

resolv-retry infinite

comp-lzo

ca ca.crt

cert client1.crt

key client1.key

persist-tun

persist-key

verb 3

route-method exe

route-delay 2

Подключение после ручной корректировки

openvpn —config /etc/openvpn/openvpn.conf

Для чего использовать OpenVPN

Что такое OpenVPN

OpenVPN — это популярная реализация технологии VPN. Используется для создания виртуальных корпоративных сетей. Более стабильный и надежный, чем SSTP, Wireguard, SoftEther. OpenVPN — кроссплатформенный open-source продукт. Может работать со многими маршрутизаторами. Новые реализации работают быстрее OpenVPN, но возможно компенсировать потерю скорости, заменив TCP-порт на UDP.

*TCP & UDP -протоколы транспортного уровня, отвечающие за логическую маршрутизацию данных в сети.

Конфиденциальность данных в OpenVPN обеспечена с помощью OpenSSL, 256-битный ключей-шифрования и сложных алгоритмов шифрования. Проект развивается динамично, новые обновления выходят, баги и уязвимости исправляются.

Как работает OpenVPN

Инициализируется защищенное соединение между VPN-клиентом и сервером. OpenVPN применяется повсеместно. Например, при организации удаленной работы для сотрудника (ов). VPN также является инструментом защиты данных при взаимодействии с публичными точками доступа. VPN часто находит применение как инструмент обхода интернет-блокировок. 

OpenVPN — реализация VPN, позволяющая гибко настраивать VPN-соединение, используя дополнительные опции (например, улучшение авторизации/аутентификации). 

Одна из привлекательных для пользователей возможностей — организация туннелирования (два хоста в связке через безопасное соединение). Хосты друг друга идентифицируют через специальные сгенерированные ключи, адреса не задействуются. OpenVPN удобно использовать для организации соединения “site-to-site”.

Начало работы с OpenVPN

В настройках сетевых соединений найдите пункт Предустановленно ПО, выберите OpenVPN. Про настройку OpenVPN — link

Установка Wireguard VPN на VPS

Данное руководство поможет последовательно установить, настроить и отладить WireGuard VPN. Для работы вам понадобится виртуальный сервер под управлением OS Linux. В нашем случае, был выбран Ubuntu 20 с минимальными расширениями. Редактирование файлов будет происходить в программе VIM.

Удалённый сервер

С помощью авторизации по SSH произведите подключение к серверу, на котором будет развернут VPN.

  1. обновление репозиториев apt — sudo apt update -y 
  2. установка WG — sudo apt install -y wireguard
  3. переход в папку с VPN — cd/etc/wireguard/
  4. генерация ключей для соединения с VPN — wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey.Команда tee сохраняет ключи в файл, далее скрипт создает публичный ключ на основе секретного, передает в директорию, полученный файл, сохраняет изменения. 
  5. Командой cat проверьте существование ключей в файлах:
cat publickey
cat privatekey

Следующим шагом в VIM создайте файл конфигурации VPN-сервера. Вставляем:

[Interface]
PrivateKey = <privatekey> # Приватный ключ из файла privatekey.
Address = 10.0.0.1/24 #Адрес VPN-сервера в частной сети.
ListenPort = 51830  #Порт, который будет слушать VPN-сервер.
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  #Команды, который будут выполнять при поднятии сервера
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE  #Команды, который будут выполнять при выключении сервера.

Вместе privatekey вставьте приватный ключ. 

Настройте форвардинг (прохождение трафика через VPN) — 

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

Включите автоматический запуск VPN после выключения, а также перезагрузки виртуального сервера — systemctl enable wg-quick@wg0.service. Команда вернет сообщение:

Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service.

Произведите запуск WG — systemctl start wg-quick@wg0.service. Обязательно, уточните статус сервера VPN — systemctl status wg-quick@wg0.service. Настройка сервера завершена. 

Подключение к WG

Создайте пары ключей для клиента — wg genkey | tee /etc/WireGuard/katkov_privatekey | wg pubkey | tee /etc/WireGuard/katkov_publickey

Папка сервера содержит файлы:
.
├── katkov_privatekey — частный ключ клиента
├── katkov_publickey — публичный ключ клиента
├── privatekey — частный ключ WG сервера
├── publickey — публичный ключ WG сервера
└── wg0.conf — конфигурационный файл WG сервера

Откройте файл — vim /etc/WireGuard/wg0.conf

Добавьте в конец файла строки ниже:
[Peer]
PublicKey = <katkov_publickey> #Публичный ключ клиента
AllowedIPs = 10.0.0.2/32 #IP-адрес в час

Добавили, теперь перезагрузите сервер и проверьте статус:

systemctl restart wg-quick@wg0
systemctl status wg-quick@wg0

Вывод:

Настраиваем машину клиента

Мы показываем процесс на примере Windows 11, но любая версия Windows настраивается таким же образом. Не закрывайте сессию SSH на удаленном сервере, потому что нам необходимы ключи из директории /etc/WireGuard/

  1. скачайте WG — https://www.wireguard.com/install/
  2. создайте текстовый документ, файл конфигурации для соединения к серверу WG, местоположение значения не имеет.
    В созданный wgvpn_connect.conf вставьте:

    [Interface] 
    PrivateKey = <CLIENT-PRIVATE-KEY> #Клиентский приватный ключ. В нашем случае katkov_privetkey. 
    Address = 10.0.0.2/32 #IP-адрес клиента, который настроен на WG сервере 
    DNS = 8.8.8.8 #DNS, который будет использовать при подключении 
    [Peer] 
    PublicKey = <SERVER-PUBKEY> #Публичный ключ сервера 
    Endpoint = <SERVER-IP>:51830 #IP адрес удаленного сервера и порт прослушивания 
    AllowedIPs = 0.0.0.0/0 #Если указаны все нули — весь трафик клиента будет проходить через WG сервер 
    PersistentKeepalive = 20 #Интервал проверки соединения между клиентом и сервером (сек).

    Чтобы узнать IP сервера, воспользуйтесь панелью управления или введите команду — curl ifconfig.me

  3. Подготовленный файл загрузите в клиент WG:
  4. Когда будет совершено подключение, индикатор загорится зеленым, трафик будет увеличиваться
  5. ifconfig.me — для проверки IP 

Вы настроили WG VPN-сеть. Чтобы подключать новых пользователей (новые устройства), генерируйте новые ключи и не забывайте давать им осмысленные названия. Также, следите за файлами конфигурации, они тоже должны присутствовать на каждом устройстве в сети. 

 

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

*VPN — инструмент, реализующий технологию виртуальной частной сети. Главной задачей *VPN является обеспечение должного уровня безопасности сети, состоящей из нескольких кластеров локальных сетей или между отдельными клиентами (звеньями) в сетевой инфраструктуре. Конфиденциальность и цельность передаваемых данных поддерживаются с помощью туннелей шифрования.

Механизм работы:

В первую очередь необходимо настроить и запустить север. После запуска сервер сможет принимать и перенаправлять запросы/ответы через защищенные SSL-туннели, передавая информацию на сетевой адаптер. Также, возможна настройка proxy сети, так как инструмент позволяет производить гибкую маршрутизацию трафика.

Требования к ОС

Перед развёрткой *VPN проверьте правильность базовых параметров сервера. У сервера должен быть статический белый IP адрес, если нужен динамический, необходимо интегрировать динамический DNS. В настройках должна быть разрешена установка файлов конфигурации из директорий официальных источников. cat /etc/apt/sources.list — команда проверки директорий (проверяйте наличие комментариев, обычно комментарии содержат полную ссылку на файл конфигурации с официальным поставщиком ОС). Внимательно проверьте валидность параметров сети ( DNS-hosts, hostname).

Установка ПО

  1.  Производим обновление файлов директории и системы
apt-get update
apt-get upgrade
  1.  Устанавливаем *VPN

git clone …

  1.  Необходимо установить easy-rsa, разместить скрипты в нужную директорию, подготовить ключи шифрования
apt-get install easy-rsa
cd /etc/*vpn/ && make-cadir easy-rsa
  1.  Перейти в директорию:
cd /etc/*vpn/easy-rsa
  1.  Создание симлинка файла, отвечающего за настройки *vpn

ln -s *vpn… *vpn.cnf

  1.  Активация скрипта vars

source ./vars

  1.  Провести очистку дефолтных ключей

./clean-all

  1.  Развертывание сертификации

./build-ca

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

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

./build-key-server server

  1.  Сгенерируйте специальной командой клиентскую пару ключей

./build-key-pass client1

Скрипт потребует установить сид-фразу по соображениям безопасности

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

    cd /etc/*vpn/easy-rsa
    source ./vars
    ./build-key client3

Приватный канал сообщения

Ключи Диффи-Хеллмана — надежный способ установления конфиденциальной связи в сети. Генерируется пара ключей, один из них — секретный.

./build-dh

После выполнения, в директории /etc/*vpn/easy-rsa/keys/ появится файл dh2048.pem

Командой захватываем необходимые файлы для сервера

cp ca.crt ca.key dh2048.pem server.crt server.key /etc/*vpn

Ключи храните надежно, иначе злоумышленники, совершив подмену или компрометацию секретных данных, нанесут весомый ущерб.

Клиенты

Клиенту понадобится всего 3 файла ca.crt, client1.crt, client1.key. Каждому клиенту необходимо отдавать только его ключи. Данные файлы можно разместить в директории /etc/*vpn на оборудовании клиента, если оно под управлением ОС группы Linux.

В ОС Windows их следует разместить в пользовательский каталог.

Отладка клиента и сервера

*VPN содержит sample файлы. В данных файлах содержатся варианты настроек (шаблоны).

gunzip -c /usr/share/doc/*vpn/examples/sample-config-files/server.conf.gz > /etc/*vpn/server.conf

С полученным файлом сервер уже готов к работе. Он сконфигурирован с возможностью туннелирования, однако не имеет возможности к проксированию, т.е. пересылки клиентского трафика от своего имени. Исправим это.

Для начала, проверяем какие файлы оказались в директории /etc/*vpn:

ls /etc/*vpn
nano /etc/*vpn/server.conf

Проверяем соответствуют ли файлы конфигурации с файлами в каталоге. Главное, чтобы ключи и сертификаты были валидными.

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

/etc/init.d/*vpn start

Чтобы определить статус сервера

/etc/init.d/*vpn status

 Копируем файлы настроек клиента и ключи, заранее сгенерированные в /root

cp /usr/share/doc/*vpn/examples/sample-config-files/client.conf /root - настройки
cd /etc/openvpn/easy-rsa/keys - взять ключи
cp client1.key client1.crt ca.crt /root - скопировать в директорию root

Немного измените конфигурационный файл клиента

nano /root/client.conf

Находим строки “# The hostname/IP and port of the server”. Для remote изменяем my-server-1 на IP сервера или его домен. Далее, редактируем ключи в графе ssl/tls. Переносим файлы на устройство, которое будет клиентом.

*vpn *vpn.conf

На этом этапе настройка пока не завершена. Можно заметить, что машина не имеет доступ в интернет во время подключения к *VPN, потому что виртуальный адаптер и сервер существуют как шлюз.

Настройте маршрутизацию трафика

Для этого отредактируйте файл server на сервере

nano /etc/*vpn/server.conf    

Из строки push «redirect-gateway def1 bypass-dhcp» удалите (;). В файле sysctl.conf добавьте net.ipv4.ip_forward=1. Эта команда позволяет ОС осуществлять движение трафика между интерфейсами(форвардинг). Чтобы редактирование вступило в силу — перезагрузите оборудование. Мы прекрасно понимаем, что постоянная перезагрузка ни к чему. Командой echo 1 > /proc/sys/net/ipv4/ip_forward разрешить перенаправлять данные без перезагрузок серверной машины.

Список команд для настройки NAT сети

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A INPUT -i tap+ -j ACCEPT
iptables -A FORWARD -i tap+ -j ACCEPT

В завершающий этап отладки сервера входит настройка форвардинга DNS. Для этого установите dnsmaq — apt-get install dnsmasq. Отредактируйте файл конфигурации dnsmaq — nano /etc/dnsmasq.conf, добавив listen-address=10.8.0.1 и bind-interfaces. Также измените файл настроек сети — nano /etc/network/interfaces. Укажите соответствующий секциям настроек адаптера адрес DNS серверов —  dns-nameservers 8.8.8.8 8.8.4.4

На аварийный случай учитывайте возможность перезагрузки соединения с DNS.

/etc/init.d/dnsmasq restart

Поставьте разрешение клиентам *VPN на использование настроенного DNS. Для этого снимите комментарии в строке

push "dhcp-option DNS 10.8.0.1"

Перезагрузите сервер, чтобы обновить соединение и загруженные надстройки.

reboot

Выполните подключение к серверу. Откройте  сайт, проверяющий адрес устройства в сети(IP). Сайт должен показать IP адрес сервера.