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

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


vpn

OpenVPN

Установка

в Debian GNU/Linux

sudo apt-get install openvpn

Настройка

Сервер

Чтобы организовать защищённое подключение, нужно сгенерировать секретный ключ доступа:

# openvpn --genkey --secret static.key

Для подключения со статическим ключом доступа:

sudo openvpn --secret /etc/openvpn/static.key --proto tcp-server --lport 1194 --dev tun1 --ifconfig 10.9.8.1 10.9.8.2

Если планируется подключаться к серверу только через SSH-тоннель (либо через SSLH), то нужно добавить к параметрам IP-адрес, к которому будет прикреплён сервер:

sudo openvpn --secret /etc/openvpn/static.key --proto tcp-server --local 127.0.0.1 --lport 1194 --dev tun1 --ifconfig 10.9.8.1 10.9.8.2

Это позволит объединить сервер и подключившийся к нему компьютер в одну локальную сеть, однако ещё не даёт доступа подключённому компьютеру в интернет. Чтобы получить выход в интернет через такой сервер, на нём нужно включить NAT:

# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -A FORWARD -i <NET_IF> -o tun1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A FORWARD -s 10.9.8.0/24 -o <NET_IF> -j ACCEPT
# iptables -t nat -A POSTROUTING -s 10.9.8.0/24 -o <NET_IF> -j SNAT --to <SERVER_IP>

<NET_IF> – это “внешний” сетевой интерфейс сервера (через который осуществляется доступ в Интернет). <SERVER_IP> – это IP-адрес сервера на внешнем сетевом интерфейсе.

Примечание: Если на сервере запустить несколько копий OpenVPN, указывая им один и тот же IP сервера, то сетевые пакеты будут свободно перемещаться из одной VPN в другую. Т.е. получается нечто вроде моста.

Клиент

Для начала нужно скопировать секретный ключ доступа, сгенерированный на сервере, к себе на компьютер. Расположить его можно в /etc/openvpn/static.key, как и на сервере.

Прямое подключение

sudo openvpn --proto tcp-client --remote <SERVER_IP> <SERVER_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-тоннель

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

DD-WRT

Если в качестве SSH-клиента используется Dropbear (как в 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 add default gw 10.9.8.1

Чтобы сохранить доступ к DNS-серверам своего провайдера (на всякий случай):

sudo route add <DNS1_IP> eth0
sudo route add <DNS2_IP> eth0

Доступ к прокси-серверу, если он есть, обязательно нужно сохранить:

sudo route add <PROXY_IP> eth0

Чтобы использовать DNS-серверы, отличные от предоставленных провайдером, можно изменить файл

"/etc/resolv.conf"
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 4.2.2.1
nameserver 4.2.2.2

Следует заменить tun1 на tap1 в случае TAP-подключения.

sudo openvpn --proto tcp-client --secret /etc/openvpn/static.key --remote localhost 5611 --dev tap1 --ifconfig 10.9.8.2 255.255.255.0

https://wiki.debian.org/OpenVPN

https://openvpn.net/index.php/open-source/documentation.html

OpenConnect VPN

Сервер

OpenConnect VPN Server

Встановити сервер OpenConnect у Debian-подібних системах можна наступним чином:

apt install ocserv

1. Спочатку нам знадобиться доменне ім'я, прив'язане до зовнішньої IP-адреси нашого сервера.

2. Далі потрібно отримати дійсний SSL-сертифікат для цього домену. Наприклад, сертифікат від Let's Encrypt!.

3. Наступним кроком потрібно налаштувати сервер у файлі /etc/ocserv/ocserv.conf:

Якщо хочемо організувати підключення з логіном та паролем, то коментуємо усі зайві рядки символом “#” та залишаємо лише рядок із вказанням шляху до файлу з паролями:

#auth = "pam"
#auth = "pam[gid-min=1000]"
auth = "plain[passwd=/etc/ocserv/ocpasswd]"

Тут ми вважаємо, що паролі зберігаються у файлі “/etc/ocserv/ocpasswd”. Створити його та додати в нього дані про якогось користувача, наприклад, з іменем “username1”, можна відповідною командою ocpasswd:

ocpasswd -c /etc/ocserv/ocpasswd username1

Треба налаштувати порти для TCP та UDP з'єднань (якщо такі дозволено):

tcp-port = 443
udp-port = 443

Зауважимо, що порт 443 типово використовується веб-сервером для протоколу HTTPS. Тому якщо на цьому ж сервері передбачається одночасно робота веб-сервера, то потрібно обрати інший номер порту.

Вказуємо шляхи до файлів SSL-сертифікату та відповідного приватного ключа. Якщо ці файли ми отримали за допомогою “Let's Encrypt”, то вони зазвичай будуть зберігатися у шляхах на кшталт:

server-cert = /etc/letsencrypt/live/example.com.ua/fullchain.pem
server-key  = /etc/letsencrypt/live/example.com.ua/privkey.pem

Тут для прикладу використано доменне ім'я “example.com.ua”. Звісно, для вашого домену воно буде якимось іншим.

Можна змінити кількість дозволених одночасних клієнтів та одночасних з'єднань від одного клієнта:

max-clients = 32
max-same-clients = 32

Також варто встановити період надсилання даних для підтримання з'єднання активним в залежності від параметрів вашої мережі та очікуваного режиму використання:

keepalive = 30

try-mtu-discovery = true

Якщо ми не хочемо, щоб клієнти автоматично від'єднувалися після тривалої відсутності активності з їхнього боку, треба закоментувати наступні рядки:

#idle-timeout = 1200
#mobile-idle-timeout = 1800

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

#min-reauth-time = 300

Вказуємо наш справжній домен, прив'язаний до нашого сервера:

default-domain = example.com.ua

Вказуємо базову IP-адресу та маску для віртуальної мережі, яку створить наш VPN сервер по підключенню клієнта:

ipv4-network = 10.9.8.0
ipv4-netmask = 255.255.255.0

Вкажемо, що усі DNS-запити від клієнта потрібно передавати також через VPN, а також надаємо перелік DNS-серверів, доступних для сервера:

tunnel-all-dns = true

dns = 127.0.0.53
dns = 8.8.8.8
dns = 1.1.1.1

Тут IP-адреса “127.0.0.53” – це типова локальна адреса, яку використовує сервіс systemd-resolved.service. Замість неї можна вказати IP-адреси, надані провайдером.

Якщо ми хочемо, щоб усі з'єднання клієнта після підключення до нашого VPN сервера, проходили через наш сервер (а саме для цього найчастіше і використовують VPN у побуті), то потрібно закоментувати усі рядки з вказанням маршрутів:

#route = 10.0.0.0/8
#route = 172.16.0.0/12
#route = 192.168.0.0/16
#route = fd00::/8

Звісно, це найпростіший випадок. Якщо потрібна якась диференціація маршрутів, то можна їх вказати, а також додати маршрут за замовчуванням у кінці:

route = default

4. Якщо сервер знаходиться за NAT'ом (наприклад, підключений до інтернету через маршрутизатор), то потрібно переспрямувати порти, які ми потім надамо користувачам для налаштування з'єднання, з маршрутизатора на наш сервер.

В нашому прикладі ми вказали порт 443 для TCP та UDP-з'єднань. І якщо ми хочемо, щоб користувачі підключалися за зовнішньою адресою нашого сервера (власне, за доменним ім'ям) до порту 443, то переспрямовуємо цей порт з маршрутизатора до нашого сервера. Це робиться у налаштуваннях маршрутизатора.

5. Коли усі попередні кроки зроблено, можна перезапустити сервер OpenConnect, і все має працювати.

sudo systemctl -l restart ocserv.service

Клієнт

vpn.txt · В останнє змінено: 2023/07/30 23:05 by wombat