В даний час технологія 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” на 1.
Щоб застосувати зміни без перезавантаження комп'ютера, виконайте команду
sudo sysctl -p /etc/sysctl.conf
Трансляція мережевих адрес налаштовується за допомогою iptables . Спочатку перевірте ім'я вашого зовнішнього мережевого інтерфейсу, виконавши команду «ip link show» — воно знадобиться вам на наступному кроці. Наше ім'я — «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-options» . Замість «*» можна вказати фіксовану IP-адресу. У результаті файл «chap-secrets» має виглядати так:
Щоб застосувати налаштування, скиньте налаштування служби pptpd та додайте її до автозавантаження.
sudo systemctl restart pptpd
sudo systemctl enable pptpd
Налаштування сервера завершено.
Конфігурація клієнта
Відкрийте «Пуск» - «Налаштування» - «Мережа та Інтернет» - «VPN» і натисніть «Додати VPN-з’єднання»
Введіть параметри підключення у вікні, що відкрилося, та натисніть «Зберегти»
- Провайдер VPN: «Windows (вбудований)»
- Назва підключення: «vpn_connect» (ви можете вибрати будь-яку назву)
- Ім'я або адреса сервера: (вкажіть зовнішню IP-адресу сервера)
- Тип VPN: «Авто»
- Тип інформації для входу: «Ім’я користувача та пароль»
- Ім'я користувача: vpnuser (ім’я вказано у файлі «chap-secrets» на сервері)
- пароль: 1 (як у файлі «chap-secrets»)
Після збереження параметрів ви побачите нове VPN-з’єднання у вікні. Клацніть лівою кнопкою миші на з’єднанні та виберіть «Підключитися» . У разі успішного підключення ви побачите статус «Підключено» .
У розділі «Налаштування» ви знайдете внутрішні адреси клієнта та сервера. У полі «Адреса призначення» відображається адреса зовнішнього сервера.
Після підключення внутрішня 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
Змініть власника каталогу та всіх файлів “~/client1/” , щоб мати змогу розповсюджувати їх клієнту. У нашому випадку зробимо власником “mihail” .
chown -R mihail:mihail ~/client1
Перейдіть на клієнтський комп’ютер і скопіюйте вміст папки «~/client1/» . Ви можете зробити це за допомогою утиліти «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 GUI».
Клацніть правою кнопкою миші на значку програми на панелі завдань і виберіть «Підключитися» . Якщо підключення встановлено успішно, значок стане зеленим.
Скористайтеся будь-якою онлайн-службою, щоб переконатися, що ваша загальнодоступна IP-адреса змінилася та тепер збігається з IP-адресою сервера.