VPN

Установка 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 адрес сервера.