Користувальницькькі налаштування

Налаштування сайту


vpn

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Both sides previous revision Попередня ревізія
Наступна ревізія
Попередня ревізія
vpn [2014/11/21 23:01]
wombat Удалил TAP'ы
vpn [2023/07/30 23:05] (поточний)
wombat [Сервер] Налаштування сервера
Рядок 1: Рядок 1:
-====== ​VPN ======+====== ​OpenVPN ​======
  
 ===== Установка ===== ===== Установка =====
Рядок 33: Рядок 33:
 ''<​SERVER_IP>''​ -- это IP-адрес сервера на внешнем сетевом интерфейсе. ''<​SERVER_IP>''​ -- это IP-адрес сервера на внешнем сетевом интерфейсе.
  
 +**Примечание:​** Если на сервере запустить несколько копий OpenVPN, указывая им один и тот же IP сервера,​ то сетевые пакеты будут свободно перемещаться из одной VPN в другую. Т.е. получается нечто вроде моста.
  
 ===== Клиент ===== ===== Клиент =====
Рядок 47: Рядок 47:
  
   sudo openvpn --proto tcp-client --remote <​SERVER_IP>​ <​SERVER_PORT>​ --http-proxy <​PROXY>​ <​PROXY_PORT>​ --dev tun1 --ifconfig 10.9.8.2 10.9.8.1   sudo openvpn --proto tcp-client --remote <​SERVER_IP>​ <​SERVER_PORT>​ --http-proxy <​PROXY>​ <​PROXY_PORT>​ --dev tun1 --ifconfig 10.9.8.2 10.9.8.1
- 
-  ssh -f -N -L 1194:​localhost:​1194 -p 443 vova@wombat.org.ua -J '​corkscrew proxy.opu.ua 3128 wombat.org.ua 443' 
-  openvpn --proto tcp-client --secret /​jffs/​etc/​openvpn/​WOU.key --remote localhost 1194 --dev tap1 --ifconfig 10.9.9.3 255.255.255.0 
  
  
Рядок 56: Рядок 53:
   ssh -f -N -L5611:​localhost:​1194 -p <​SERVER_SSH_PORT>​ <​SERVER_IP> ​   ssh -f -N -L5611:​localhost:​1194 -p <​SERVER_SSH_PORT>​ <​SERVER_IP> ​
   sudo openvpn --proto tcp-client --secret /​etc/​openvpn/​static.key --remote localhost 5611 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1   sudo openvpn --proto tcp-client --secret /​etc/​openvpn/​static.key --remote localhost 5611 --dev tun1 --ifconfig 10.9.8.2 10.9.8.1
 +
 +=== DD-WRT ===
 +
 +Если в качестве SSH-клиента используется [[https://​matt.ucc.asn.au/​dropbear/​dropbear.html | Dropbear]] (как в [[dd-wrt|DD-WRT]]),​ тоннель через прокси нужно устанавливать следующим образом:​
 +
 +  ssh -f -N -L 1194:​localhost:​1194 -p <​SSH_SERVER_PORT>​ <​SSH_SERVER -J '​corkscrew <​PROXY_SERVER>​ <​PROXY_PORT>​ <​SSH_SERVER>​ <​SSH_SERVER_PORT>'​
 +  openvpn --proto tcp-client --secret /​jffs/​etc/​openvpn/​static.key --remote localhost 1194 --dev tun1 --ifconfig 10.9.9.3 255.255.255.0
 +
 +Для маршрутизатора удобнее сгенерировать SSH-ключ,​ чтобы обеспечить его беспарольное подключение к серверу.
 +
 +  ssh-keygen
 +
 +Затем загрузить полученные файлы ''​id_rsa''​ и ''​id_rsa.pub''​ в папку ''/​jffs/''​ маршрутизатора (подразумевается наличие файловой системы JFFS в маршрутизаторе),​ и сконвертировать закрытый ключ в формат Dropbear:
 +
 +  dropbearconvert openssh dropbear /​jffs/​id_rsa /​jffs/​id_rsa_dropbear ​
 +
 +Открытый ключ нужно загрузить на VPN-сервер,​ к которому будет подключаться маршрутизатор в домашний каталог пользователя,​ от имени которого будет производиться подключение. Например,​ если это будет пользователь "​stavrida",​ то дописать содержимое только что сгенерированного файла ''​id_rsa.pub''​ в файл ''/​home/​stavrida/​.ssh/​authorized_keys''​ на VPN-сервере.
 +
 +SSH-тоннель в этом случае следует устанавливать так:
 +  ​
 +  ssh -y -i /​jffs/​id_rsa_dropbear -f -N -L 1194:​localhost:​1194 -p <​SSH_SERVER_PORT>​ <​SSH_SERVER -J '​corkscrew <​PROXY_SERVER>​ <​PROXY_PORT>​ <​SSH_SERVER>​ <​SSH_SERVER_PORT>'​
  
 ==== Новый маршрут ==== ==== Новый маршрут ====
  
 +  sudo route add -net 10.9.8.0 netmask 255.255.255.0 gw 10.9.8.1
   sudo route del default   sudo route del default
   sudo route add default gw 10.9.8.1   sudo route add default gw 10.9.8.1
Рядок 88: Рядок 107:
  
 https://​wiki.debian.org/​OpenVPN https://​wiki.debian.org/​OpenVPN
 +
 +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
 +
 +
 +
 +===== Клієнт =====
 +
vpn.1416603668.txt.bz2 · В останнє змінено: 2014/11/21 23:01 by wombat