В даний час технологія VPN стає все більш популярною. Звичайні користувачі використовують VPN для безпечного доступу до Інтернету. Це також допомагає обійти локально заблоковані веб-сайти та служби та захистити від можливої зовнішньої зловмисної поведінки. Коли ви підключаєтеся до сервера VPN, між вашим комп’ютером і сервером існує безпечний тунель, до якого неможливо отримати доступ ззовні, тому сервер VPN стає вашою точкою доступу до Інтернету. Існує багато служб VPN, як безкоштовних, так і платних, але якщо вони вам з якихось причин не підходять, ви завжди можете налаштувати власний сервер VPN.
Щоб запустити свою VPN, ви повинні оренда VPS сервера. Існує різне програмне забезпечення, яке дозволяє створити з’єднання VPN. Він відрізняється один від одного підтримуваними операційними системами та використовуваними алгоритмами. Ми розглянемо два незалежних підходи до налаштування сервера VPN. Перший заснований на протоколі PPTP, який вже вважається застарілим і небезпечним, але його дуже легко налаштувати. Інший використовує сучасне та безпечне програмне забезпечення OpenVPN, але вимагає встановлення клієнтської програми стороннього виробника та більш ретельного процесу налаштування.
У нашому тестовому середовищі ми будемо використовувати віртуальний сервер на базі Ubuntu Server 18.04. На сервері планується вимкнути брандмауер, оскільки його конфігурація заслуговує окремої статті. Ми опишемо процес налаштування на Windows 10.
Підготовка
Незалежно від того, який сервер VPN ви виберете, доступ до Інтернету буде налаштовано інтегрованими засобами операційної системи. Щоб відкрити доступ до Інтернету через інтерфейс зовнішньої служби, необхідно дозволити пересилання пакетів між інтерфейсами та налаштувати трансляцію мережевих адрес.
Щоб увімкнути пересилання пакетів, відкрийте файл “/etc/sysctl.conf” і змінити “net.ipv4.ip_forward” значення параметра into 1.
Щоб застосувати зміни без перезавантаження комп'ютера, виконайте команду
sudo sysctl -p /etc/sysctl.conf
Трансляція мережевих адрес налаштовується за допомогою Iptables. Спочатку перевірте ім’я зовнішнього мережевого інтерфейсу, на якому виконується команда «показати IP-посилання» - це вам знадобиться на наступному кроці. Наше ім'я "ens3".
Увімкніть трансляцію мережевих адрес на зовнішньому інтерфейсі для всіх вузлів локальної мережі.
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Зверніть увагу, що вам потрібно вказати справжнє ім'я інтерфейсу вашого сервера, воно може відрізнятися від нашого.
За замовчуванням усі правила, створені iptables, скидаються після перезапуску сервера. Щоб цього не сталося, використовуйте «iptables-persistent» корисність. Встановіть наступний пакет:
sudo apt install iptables-persistent
У якийсь момент під час процесу інсталяції ви побачите вікно конфігурації, у якому буде запропоновано зберегти поточні правила iptables. Оскільки правила вже визначено, просто підтвердьте та натисніть "Так" двічі. Оскільки тепер правила застосовуватимуться автоматично після перезапуску сервера.
PPTP -сервер
Конфігурація сервера
Встановіть пакет:
sudo apt install pptpd
Після завершення встановлення відкрийте файл “/etc/pptpd.conf” у будь-якому текстовому редакторі та відредагуйте його так:
option /etc/ppp/pptpd-options #path to the settings file
logwtmp #client connections logging mechanism
connections 100 #number of simultaneous connections
localip 172.16.0.1 #the address that will serve as a client gateway
remoteip 172.16.0.2-200 #range of addresses
Після цього відредагуйте файл “/etc/ppp/pptpd-options”. Більшість параметрів налаштовано за замовчуванням.
#name of the service for new client records
name pptpd
#restrict obsolete authentication methods
refuse-pap
refuse-chap
refuse-mschap
#allow a more secure authentication method
require-mschap-v2
#enable encryption
require-mppe-128
#specify dns servers for clients (use any available servers)
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
novj
novjccomp
nologfd
На наступному етапі вам потрібно буде створити запис для клієнтських підключень. Припустімо, ви хочете додати користувача «vpnuser» з паролем "1" і дозволити йому динамічну адресацію. Відкрийте файл “/etc/ppp/chap-secrets” і додайте наступний рядок із параметрами користувача в кінці файлу:
vpnuser pptpd 1 *
"pptpd" значення - це назва служби, яку ми вказали у файлі «pptpd-параметри». Замість "*" можна вказати фіксовану IP-адресу. У результаті файл “секрети хлопця” повинен виглядати так:
Щоб застосувати налаштування, скиньте pptpd і додайте його в автозавантаження.
sudo systemctl restart pptpd
sudo systemctl enable pptpd
Налаштування сервера завершено.
Конфігурація клієнта
відкритий "Старт" - "Налаштування" - Мережа та Інтернет - "VPN" і натисніть кнопку «Додати VPN-з'єднання»
У вікні введіть параметри підключення та натисніть “Зберегти”
- Провайдер VPN: «Windows (вбудований)»
- Назва підключення: «vpn_connect» (ви можете вибрати будь-яку назву)
- Ім'я або адреса сервера: (вкажіть зовнішню IP-адресу сервера)
- Тип VPN: «Авто»
- Тип інформації для входу: «Ім’я користувача та пароль»
- Ім'я користувача: vpnuser (ім’я вказано у файлі «chap-secrets» на сервері)
- пароль: 1 (як у файлі «chap-secrets»)
Після збереження параметрів у вікні ви побачите нове VPN-підключення. Клацніть підключення лівою кнопкою миші та виберіть "Connect". У разі успішного підключення ви побачите “Підключено” Статус.
У Параметрах ви знайдете внутрішні адреси клієнта та сервера. Поле «Адреса призначення» відображає адресу зовнішнього сервера.
При підключенні внутрішня IP-адреса сервера, 172.16.0.1 у нашому випадку стає шлюзом за замовчуванням для всіх вихідних пакетів.
За допомогою будь-якого онлайн-сервісу ви можете переконатися, що зовнішня IP-адреса комп’ютера тепер збігається з IP-адресою вашого VPN-сервера.
OpenVPN сервер
Конфігурація сервера
Давайте підвищимо рівень дозволів поточного користувача, оскільки для подальшої конфігурації нам знадобиться root-доступ.
sudo -s
Встановіть всі необхідні пакети. Нам знадобиться “Easy-RSA” пакет для керування ключами шифрування.
apt install openvpn easy-rsa iptables-persistent
Дозволити вхідні з'єднання на порту 1194 через протокол UDP та застосувати правила iptables.
sudo iptables -I INPUT -p udp --dport 1194 -j ACCEPT
sudo netfilter-persistent save
Створіть каталог зі скопійованими файлами з пакета «Easy-RSA» та перейдіть до нього.
make-cadir ~/openvpn
cd ~/openvpn
Створення інфраструктури відкритих ключів (PKI).
./easyrsa init-pki
Згенеруйте кореневий сертифікат центру сертифікації (CA).
./easyrsa build-ca
Під час процесу створення вам буде запропоновано встановити та запам’ятати пароль. Вам також потрібно буде відповісти на запитання та ввести інформацію про власника ключа. Ви можете залишити значення за замовчуванням, вказані в квадратних дужках. Натисніть «Enter», щоб завершити введення.
Згенеруйте закритий ключ та запит на сертифікат. Як аргумент вкажіть довільне ім'я; у нашому випадку це «vpn-server».
./easyrsa gen-req vpn-server nopass
Залиште значення «Загальна назва» за замовчуванням.
Підпишіть згенерований запит на сертифікат сервера.
./easyrsa sign-req server vpn-server
На цьому кроці дайте відповідь «так», щоб підтвердити підпис, а потім введіть пароль, створений під час створення кореневого сертифіката.
Генерувати параметри Діффі-Хеллмана. Ці параметри використовуються для безпечного обміну ключами між сервером і клієнтом.
./easyrsa gen-dh
Всі необхідні файли згенеровано. Створимо папку "keys" у робочому каталозі OpenVPN для зберігання ключів та скопіюємо туди створені файли.
mkdir /etc/openvpn/keys
sudo cp pki/ca.crt pki/issued/vpn-server.crt pki/private/vpn-server.key pki/dh.pem /etc/openvpn/keys
Налаштуйте NAT за допомогою iptables правила. Створіть файл з назвою nat та відкрийте його для редагування в /etc/openvpn/ каталог.
#!/bin/sh
# Reset firewall settings
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow OpenVPN connections (eth0 in our case, may vary)
iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
iptables -A INPUT -i tun0 -j ACCEPT
# (eth0 in our case, may vary):
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
# (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Enable masquerading for the local network (eth0 in our case, may vary)
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# Deny incoming connections from outside
iptables -A INPUT -i eth0 -j DROP
# Deny transit traffic from outside (eth0 in our case, may vary)
iptables -A FORWARD -i eth0 -o tun0 -j DROP
sudo netfilter-persistent save
Збережіть файл і зробіть його виконуваним.
sudo chmod 755 /etc/openvpn/nat
Скопіюйте шаблон конфігурації сервера.
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
Відкрийте файл “/etc/openvpn/server.conf” для редагування переконайтеся, що він містить наступні рядки, і відредагуйте їх, якщо потрібно:
#Port, protocol, and interface
port 1194
proto udp
dev tun
#Path to the encryption keys
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/vpn-server.crt
key /etc/openvpn/keys/vpn-server.key
dh /etc/openvpn/keys/dh.pem
#SHA256 Hashing Algorithm
auth SHA256
#Switching off additional encryption
#tls-auth ta.key 0
#Network parameters
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
#Ping every 10 seconds to check the connection.
keepalive 10 120
#Set up AES-256 encryption for the tunnel.
cipher AES-256-GCM
#Demoting the service OpenVPN after launch
user nobody
group nogroup
#Switching on parameters saving after reboot
persist-key
persist-tun
#Set log verbosity
verb 3
#Redirecting logs
log-append /var/log/openvpn/openvpn.log
#Script the rule installation launch.
up /etc/openvpn/nat
Увімкнути переадресацію трафіку на сервері.
sudo sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
Запустіть OpenVPN, щоб застосувати конфігурацію.
systemctl restart openvpn@server
Налаштування сервера завершено!
Конфігурація клієнта
Перейдіть на офіційний сайт OpenVPN “https://openvpn.net”, перейдіть до «ГРОМАДА» .
Прокрутіть униз та завантажте інсталятор для вашої версії операційної системи. У нашому випадку це Windows 11 ARM64.
Встановіть програму, залишивши всі параметри за замовчуванням.
На наступному етапі вам необхідно підготувати наступний файл на сервері та перенести їх на клієнтський комп’ютер:
- відкритий і закритий ключі;
- копія ключа сертифікаційного центру;
- шаблон конфігураційного файлу.
Підключіться до сервера, підвищте привілеї та перейдіть до створеного нами каталогу. "~/openvpn".
sudo -s
cd ~/openvpn
Згенеруйте закритий ключ та запит на сертифікат для клієнта. Як аргумент вкажіть довільне ім'я; у нашому випадку це «client1».
./easyrsa gen-req client1 nopass
Введіть пароль, який ми встановили під час створення кореневого сертифіката, і залиште значення Загальне ім'я за замовчуванням.
Підпишіть згенерований запит на сертифікат клієнта.
./easyrsa sign-req client client1
На цьому кроці дайте відповідь «так», щоб підтвердити підпис, а потім введіть пароль, створений під час створення кореневого сертифіката.
Для зручності створимо папку з назвою «client1» у домашньому каталозі та скопіюємо туди всі файли, призначені для перенесення на клієнтський комп’ютер.
mkdir ~/client1
cp pki/issued/client1.crt pki/private/client1.key pki/ca.crt ~/client1/
Скопіюйте шаблон файлу конфігурації клієнта в той же каталог. Змініть розширення файлу на «.ovpn» під час копіювання.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client1/client.ovpn
Змініть власника каталогу та всіх файлів “~/клієнт1/” мати можливість розповсюдити їх клієнту. Давайте зробимо “михайло” власник у нашому випадку.
chown -R mihail:mihail ~/client1
Перейдіть на клієнтський комп’ютер і скопіюйте вміст “~/клієнт1/” папку. Зробити це можна за допомогою «PSCP» утиліта, яка йде разом із Putty.
PSCP -r mihail@[IP_сервера]:/home/mihail/client1 c:\client1
Ви можете зберігати ключові файли “ca.crt”, “client1.crt”, «client1.key» куди хочеш. У нашому випадку вони знаходяться в цій папці «c:\Program Files\OpenVPN\keys», і ми модифікуємо файл конфігурації “client.ovpn” в «c:\Program Files\OpenVPN\config» каталог.
Тепер перейдемо до налаштування клієнта. Відкрийте файл «c:\Program Files\OpenVPN\config\client.ovpn» у текстовому редакторі та відредагуйте такі рядки:
#announce that this is the client
client
#interface and protocol just like on the server
dev tun
proto udp
#IP address of the server and port
remote ip_address 1194
#saving parameters after reload
persist-key
persist-tun
#key paths
ca “c:\\Program Files\\OpenVPN\\keys\\ca.cert”
cert “c:\\Program Files\\OpenVPN\\keys\\client1.crt”
key “c:\\Program Files\\OpenVPN\\keys\\client1.key”
#enable server verification
remote-cert-tls server
#disable extra encryption
#tls-auth ta.key 1
cipher AES-256-CBC
auth-nocache
verb 3
Решту залиште недоторканою.
Збережіть файл і запустіть клієнтську програму «Графічний інтерфейс OpenVPN».
Клацніть правою кнопкою миші значок програми на панелі завдань і виберіть "Connect". Якщо підключення вдалось, значок стане зеленим.
Скористайтеся будь-якою онлайн-службою, щоб переконатися, що ваша загальнодоступна IP-адреса змінилася та тепер збігається з IP-адресою сервера.