Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Both sides previous revision Попередня ревізія Наступна ревізія | Попередня ревізія | ||
vpn [2014/11/24 01:21] wombat [Новый маршрут] |
vpn [2023/07/30 23:05] (поточний) wombat [Сервер] Налаштування сервера |
||
---|---|---|---|
Рядок 1: | Рядок 1: | ||
- | ====== VPN ====== | + | ====== OpenVPN ====== |
===== Установка ===== | ===== Установка ===== | ||
Рядок 33: | Рядок 33: | ||
''<SERVER_IP>'' -- это IP-адрес сервера на внешнем сетевом интерфейсе. | ''<SERVER_IP>'' -- это IP-адрес сервера на внешнем сетевом интерфейсе. | ||
+ | **Примечание:** Если на сервере запустить несколько копий OpenVPN, указывая им один и тот же IP сервера, то сетевые пакеты будут свободно перемещаться из одной VPN в другую. Т.е. получается нечто вроде моста. | ||
===== Клиент ===== | ===== Клиент ===== | ||
Рядок 109: | Рядок 109: | ||
https://openvpn.net/index.php/open-source/documentation.html | https://openvpn.net/index.php/open-source/documentation.html | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====== OpenConnect VPN ====== | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Сервер ===== | ||
+ | |||
+ | [[https://ocserv.gitlab.io/www/index.html|OpenConnect VPN Server]] | ||
+ | |||
+ | Встановити сервер OpenConnect у Debian-подібних системах можна наступним чином: | ||
+ | |||
+ | apt install ocserv | ||
+ | |||
+ | |||
+ | 1. Спочатку нам знадобиться доменне ім'я, прив'язане до зовнішньої IP-адреси нашого сервера. | ||
+ | |||
+ | 2. Далі потрібно отримати дійсний SSL-сертифікат для цього домену. Наприклад, [[ssl|сертифікат від Let's Encrypt!]]. | ||
+ | |||
+ | 3. Наступним кроком потрібно налаштувати сервер у файлі ''/etc/ocserv/ocserv.conf'': | ||
+ | |||
+ | Якщо хочемо організувати підключення з логіном та паролем, то коментуємо усі зайві рядки символом "''#''" та залишаємо лише рядок із вказанням шляху до файлу з паролями: | ||
+ | |||
+ | <file> | ||
+ | #auth = "pam" | ||
+ | #auth = "pam[gid-min=1000]" | ||
+ | auth = "plain[passwd=/etc/ocserv/ocpasswd]" | ||
+ | </file> | ||
+ | |||
+ | Тут ми вважаємо, що паролі зберігаються у файлі "''/etc/ocserv/ocpasswd''". Створити його та додати в нього дані про якогось користувача, наприклад, з іменем "''username1''", можна відповідною командою ''ocpasswd'': | ||
+ | |||
+ | ocpasswd -c /etc/ocserv/ocpasswd username1 | ||
+ | |||
+ | Треба налаштувати порти для TCP та UDP з'єднань (якщо такі дозволено): | ||
+ | |||
+ | <file> | ||
+ | tcp-port = 443 | ||
+ | udp-port = 443 | ||
+ | </file> | ||
+ | |||
+ | Зауважимо, що порт 443 типово використовується веб-сервером для протоколу HTTPS. Тому якщо на цьому ж сервері передбачається одночасно робота веб-сервера, то потрібно обрати інший номер порту. | ||
+ | |||
+ | Вказуємо шляхи до файлів SSL-сертифікату та відповідного приватного ключа. Якщо ці файли ми отримали за допомогою "Let's Encrypt", то вони зазвичай будуть зберігатися у шляхах на кшталт: | ||
+ | |||
+ | <file> | ||
+ | server-cert = /etc/letsencrypt/live/example.com.ua/fullchain.pem | ||
+ | server-key = /etc/letsencrypt/live/example.com.ua/privkey.pem | ||
+ | </file> | ||
+ | |||
+ | Тут для прикладу використано доменне ім'я "''example.com.ua''". Звісно, для вашого домену воно буде якимось іншим. | ||
+ | |||
+ | Можна змінити кількість дозволених одночасних клієнтів та одночасних з'єднань від одного клієнта: | ||
+ | |||
+ | <file> | ||
+ | max-clients = 32 | ||
+ | max-same-clients = 32 | ||
+ | </file> | ||
+ | |||
+ | Також варто встановити період надсилання даних для підтримання з'єднання активним в залежності від параметрів вашої мережі та очікуваного режиму використання: | ||
+ | |||
+ | <file> | ||
+ | keepalive = 30 | ||
+ | </file> | ||
+ | |||
+ | try-mtu-discovery = true | ||
+ | |||
+ | Якщо ми не хочемо, щоб клієнти автоматично від'єднувалися після тривалої відсутності активності з їхнього боку, треба закоментувати наступні рядки: | ||
+ | |||
+ | <file> | ||
+ | #idle-timeout = 1200 | ||
+ | #mobile-idle-timeout = 1800 | ||
+ | </file> | ||
+ | |||
+ | Також корисна функція для захисту від автоматизованих атак, але яка може виявитися незручною для певних користувачів, це пауза після невдалої спроби увести пароль. В залежності від ситуації, також можна закоментувати: | ||
+ | |||
+ | <file> | ||
+ | #min-reauth-time = 300 | ||
+ | </file> | ||
+ | |||
+ | Вказуємо наш справжній домен, прив'язаний до нашого сервера: | ||
+ | |||
+ | <file> | ||
+ | default-domain = example.com.ua | ||
+ | </file> | ||
+ | |||
+ | Вказуємо базову IP-адресу та маску для віртуальної мережі, яку створить наш VPN сервер по підключенню клієнта: | ||
+ | |||
+ | <file> | ||
+ | ipv4-network = 10.9.8.0 | ||
+ | ipv4-netmask = 255.255.255.0 | ||
+ | </file> | ||
+ | |||
+ | Вкажемо, що усі DNS-запити від клієнта потрібно передавати також через VPN, а також надаємо перелік DNS-серверів, доступних для сервера: | ||
+ | |||
+ | <file> | ||
+ | tunnel-all-dns = true | ||
+ | |||
+ | dns = 127.0.0.53 | ||
+ | dns = 8.8.8.8 | ||
+ | dns = 1.1.1.1 | ||
+ | </file> | ||
+ | |||
+ | Тут IP-адреса "''127.0.0.53''" -- це типова локальна адреса, яку використовує сервіс ''systemd-resolved.service''. Замість неї можна вказати IP-адреси, надані провайдером. | ||
+ | |||
+ | Якщо ми хочемо, щоб усі з'єднання клієнта після підключення до нашого VPN сервера, проходили через наш | ||
+ | сервер (а саме для цього найчастіше і використовують VPN у побуті), то потрібно закоментувати усі рядки з вказанням маршрутів: | ||
+ | |||
+ | <file> | ||
+ | #route = 10.0.0.0/8 | ||
+ | #route = 172.16.0.0/12 | ||
+ | #route = 192.168.0.0/16 | ||
+ | #route = fd00::/8 | ||
+ | </file> | ||
+ | |||
+ | Звісно, це найпростіший випадок. Якщо потрібна якась диференціація маршрутів, то можна їх вказати, а також додати маршрут за замовчуванням у кінці: | ||
+ | |||
+ | <file> | ||
+ | route = default | ||
+ | </file> | ||
+ | |||
+ | |||
+ | |||
+ | 4. Якщо сервер знаходиться за NAT'ом (наприклад, підключений до інтернету через маршрутизатор), то потрібно переспрямувати порти, які ми потім надамо користувачам для налаштування з'єднання, з маршрутизатора на наш сервер. | ||
+ | |||
+ | В нашому прикладі ми вказали порт ''443'' для TCP та UDP-з'єднань. І якщо ми хочемо, щоб користувачі підключалися за зовнішньою адресою нашого сервера (власне, за доменним ім'ям) до порту ''443'', то переспрямовуємо цей порт з маршрутизатора до нашого сервера. Це робиться у налаштуваннях маршрутизатора. | ||
+ | |||
+ | 5. Коли усі попередні кроки зроблено, можна перезапустити сервер OpenConnect, і все має працювати. | ||
+ | |||
+ | sudo systemctl -l restart ocserv.service | ||
+ | |||
+ | |||
+ | |||
+ | ===== Клієнт ===== | ||
+ |