Налаштовуємо OpenVPN сервер на Linux за 20 кроків

Налаштовуємо OpenVPN сервер на Linux за 20 кроків

Навіщо потрібен свій VPN.

Virtual Private Network (VPN) — це технологія, яка дозволяє створити віртуальну приватну мережу між кількома пристроями. Дані, що передаються в такій мережі, шифруються. За допомогою VPN користувач може:

  • приховати своє місцезнаходження, наприклад, для DDoS-атаки;
  • обійти блокування сайтів за географічною прив'язкою;
  • приховати свій трафік під час роботи у відкритих Wi-Fi мережах.

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

Розбираємось, як налаштувати власний VPN під Linux.

Налаштування сервера та клієнта

Сервер для VPN потрібно розгортати на віддаленій машині або у хмарі. Для сервера ми будемо використовувати дистрибутив Ubuntu 21.10 та OpenVPN — реалізацію VPN з відкритим вихідним кодом. Для клієнтської машини можна обрати будь-яку операційну систему.

1. Встановлюємо OpenVPN на сервер.

sudo apt install openvpn

2. Встановлюємо Easy-Rsa. Ця програма допомагає управляти сертифікатами (.crt файли) та генерувати ключі для OpenVPN (.key файли). Сертифікати використовуються для криптографічного захисту та при підключенні до сервера підтверджують, що клієнт той, за кого він себе видає.

sudo apt install easy-rsa

3. Створюємо папку та копіюємо туди налаштування та сертифікати.

sudo mkdir /etc/openvpn/easy-rsa
sudo cp -r /usr/share/easy-rsa /etc/openvpn/

4. Створюємо центр сертифікації та його інфраструктуру.

cd /etc/openvpn/easy-rsa/
sudo ./easyrsa init-pki

5. Створюємо кореневий сертифікат — вводимо пароль та ім'я.

sudo ./easyrsa build-ca

6. Створюємо ключі для протоколу Діффі-Хеллмана. Ця команда може виконуватися досить довго.

sudo ./easyrsa gen-dh

7. Також створюємо сертифікат для відкликання підписаних сертифікатів. Якщо якийсь сертифікат буде скомпрометований, його можна відізвати, закривши доступ конкретному клієнту. Вводимо пароль.

sudo ./easyrsa gen-crl

8. Створюємо сертифікати для сервера та копіюємо їх у папку openvpn.

sudo ./easyrsa build-server-full server nopass
sudo cp ./pki/ca.crt /etc/openvpn/ca.crt
sudo cp ./pki/dh.pem /etc/openvpn/dh.pem
sudo cp ./pki/crl.pem /etc/openvpn/crl.pem
sudo cp ./pki/issued/server.crt /etc/openvpn/server.crt
sudo cp ./pki/private/server.key /etc/openvpn/server.key

9. У папці examples лежать шаблони для конфігурації сервера. Копіюємо шаблон, а потім відкриваємо його для редагування.

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn
sudo nano server.conf

10. Розкоментуємо наступні рядки та зробимо VPN шлюзом за замовчуванням. Щоб розкоментувати рядок, необхідно видалити символ «;» на його початку.

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
набір курсів: ОПАНУЙТЕ СКІЛИ ДЛЯ НОВОЇ ПРОФЕСІЇ В IT
 

11. Змінюємо назву dh2048.pem на dh.pem і закоментовуємо рядок tls-auth ta.key 0. Цей рядок відповідає за перевірку ключа для HMAC. У нашому прикладі він не використовується.

12. Включаємо IP-переадресацію. З нею ми зможемо пересилати транзитні пакети.

sysctl -w net.ipv4.ip_forward=1

13. Додаємо правила iptables для передачі пакетів.

sudo iptables -I FORWARD -i tun0 -o ens3 -j ACCEPT
sudo iptables -I FORWARD -i ens3 -o tun0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

У лівій частині ми вказували дію, а у правій — правило, яке буде застосовуватись до неї. ACCEPT дає дозвіл на проходження пакетів, а MASQUERADE замінює адресу транзитних пакетів.

14. Ключі для клієнтів створюються на сервері, а потім передаються клієнту.

sudo chmod -r 700 pki/revoked
sudo cp -r pki/revoked/ renewed
sudo cp -a openssl-easyrsa.cnf /etc/openvpn/pki
sudo ./easyrsa build-client-full client nopass

15. Створюємо папку clients для всіх ключів і папку client для конкретного клієнта.

sudo mkdir /etc/openvpn/clients
sudo mkdir /etc/openvpn/clients/client

16. Копіюємо в папку client ключі та конфігурацію клієнта.

cd /etc/openvpn/clients/client
sudo cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/clients/client/
sudo cp /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/clients/client/
sudo cp /etc/openvpn/easy-rsa/pki/private/client.key /etc/openvpn/clients/client/
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ./client.conf

17. Відкриваємо конфігурацію для редагування.

sudo nano ./client.conf

18. Змінюємо my-server-1 на IP сервера та приховуємо коментарем tls-auth ta.key 1, а потім додаємо рядок auth-nocache. Він відповідає за те, щоб логін та пароль клієнта не зберігалися у віртуальній пам'яті.

19. Запускаємо сервер.

sudo openvpn /etc/openvpn/server.conf

Тепер потрібно передати клієнту готові ключі та конфігураційний файл. Клієнт мусить закинути їх у config директорію OpenVPN на своїй ОС і просто під'єднатися. Готово.

Важливо пам'ятати, що VPN не може повністю приховати дані користувача та забезпечує лише часткову анонімність. Також, якщо VPN використовується на рівні компанії, власник сервера може відстежувати весь трафік співробітників і так само блокувати окремі ресурси.

Ещё статьи
Платформи для волонтерів, пошук житла, корисні карти та ігри.
Как работать с данными: специалисты делятся опытом.