1. Ставим все необходимые пакеты для OpenConnect v1.2.4

sudo apt update && sudo apt install -y vim nano git build-essential libgnutls28-dev libev-dev autoconf automake libtool libpam0g-dev liblz4-dev libseccomp-dev libreadline-dev libnl-route-3-dev libkrb5-dev libradcli-dev libcurl4-gnutls-dev libcjose-dev libjansson-dev liboath-dev libprotobuf-c-dev libtalloc-dev libhttp-parser-dev protobuf-c-compiler gperf iperf3 lcov libuid-wrapper libpam-wrapper libnss-wrapper libsocket-wrapper gss-ntlmssp haproxy iputils-ping freeradius gawk gnutls-bin iproute2 yajl-tools tcpdump

*ТУТ можно в теории не ставить iperf3 haproxy freeradius, но я ставлю все, чтобы собралось без проблем

2. Клонируем репо последней версии https://gitlab.com/openconnect/ocserv (можно перейти и посмотреть в браузере по тегу какая последняя версия, сейчас 1.2.4)

cd ~ && git clone -b 1.2.4 https://gitlab.com/openconnect/ocserv 

3. Собираем

cd ocserv
autoreconf -fvi
./configure && make
sudo make install

4. Скачаем конфиг

cd ~/ocserv/src && wget https://gitlab.com/openconnect/ocserv/-/raw/master/doc/sample.config

5. Генерируем сертификаты и ключи сервера

Первым делом создаем темплейт для генерации ключей

nano ca-cert.cfg

И вставим это:

# X.509 Certificate options

# The organization of the subject.
organization = "142.54.160.100"

# The common name of the certificate owner.
cn = "Example CA"

# The serial number of the certificate.
serial = 001

# In how many days, counting from today, this certificate will expire. Use -1 if there is no expiration date.
expiration_days = -1

# Whether this is a CA certificate or not
ca

# Whether this certificate will be used to sign data
signing_key

# Whether this key will be used to sign other certificates.
cert_signing_key

# Whether this key will be used to sign CRLs.
crl_signing_key
key encipherment
encryption_key
tls_www_server

А теперь генерируем ключи:

certtool --generate-privkey > ./ocserv-key.pem

certtool --generate-self-signed --load-privkey ocserv-key.pem --template ca-cert.cfg --outfile ocserv-cert.pem

И также создадим темплейт для dh.pem

nano dh.conf

И вставим это:

key_type = RSA
key_bits = 2048
dh_bits = 2048

И генерируем dh.pem

certtool --generate-dh-params --load-privkey dh.conf --outfile dh.pem

6. Теперь создаем АККАУНТЫ VPN

Создаем директорию с кофигами внутри ~/ocserv/src

mkdir ./clients

Создаем первого пользователя

ocpasswd -c ./clients/ocpasswd dmitry

Чтобы добавить клиента, также запускаем с другим именем

ocpasswd -c ./clients/ocpasswd test

И проверяем что там уже 2 пользователя:

cat ./clients/ocpasswd

7. Теперь работаем с конфигом сервера

nano ~/ocserv/src/sample.config

ВСЕ ПАРАМЕТРЫ ПРОВЕРЯЕМ ПОИСКОМ ЧТОБЫ НЕ ДУБЛИРОВАЛИСЬ!

server-cert = ocserv-cert.pem
server-key = ocserv-key.pem
dh-params = dh.pem
ca-cert = ocserv-cert.pem

ЭТО УДАЛЯЕМ
#server-cert = /etc/ocserv/server-cert.pem
#server-key = /etc/ocserv/server-key.pem
#server-cert = ../tests/certs/server-cert.pem
#server-key = ../tests/certs/server-key.pem


auth = "plain[passwd=./clients/ocpasswd]"
#auth = "certificate" - ВЫБИРАТЬ ЧТО-ТО ОДНО! либо pass, либо cert, а также важно, что с сертификатами camouflage не работает, его надо отключать camouflage = false, ЛИБО пытаться подружить с двойной аутентификацией и по паролю и по сертификату, что не очень удобно, но возможно кому-то понадобится в корп среде

tcp-port = 28855  # Порт из бота!
#udp-port = 443  - ОТРУБАЕМ udp, потому что он нам не нужен, так как мы москируемся под веб трафик

compression = true
max-clients = 0
max-same-clients = 2

# КОНФИГИ ДЛЯ ПОЛЬЗОВАТЕЛЕЙ ЕСЛИ НУЖНЫ
#config-per-user = /home/debian/ocserv/src/clients/configs

keepalive = 60
try-mtu-discovery = true
idle-timeout = 1200
mobile-idle-timeout = 2400

#Тут Либо так
#ipv4-network = 10.18.18.0
#ipv4-netmask = 255.255.255.0
#Либо так
ipv4-network = 10.18.18.0/24   # НАША ПОДСЕТЬ! Можно сделать любую

tunnel-all-dns = true

dns = 8.8.8.8    
dns = 1.1.1.1

# РОУТЫ МОЖЕМ ЗАКОММЕНТИРОВАТЬ ВСЕ, ЕСЛИ ОНИ НАМ НЕ НУЖНЫ, ЕСЛИ НУЖНЫ - СОЗДАЙТЕ СВОЙ ДЛЯ НУЖНОЙ ПОДСЕТИ
#route = 10.10.10.0/255.255.255.0
#route = 192.168.0.0/255.255.0.0
#route = fef4:db8:1000:1001::/64
#route = default
#no-route = 192.168.5.0/255.255.255.0

#for iOS comment line
#user-profile = profile.xml

camouflage = true
camouflage_secret = "mysecretkluch"

#URL СЕРВЕРА В КЛИЕНТЕ, И ПОМЕНЯЙТЕ КЛЮЧ !!! https://142.54.160.100:28855/?mysecretkluch

8. Создаем директорию clients/configs где будем хранить клиентские конфиги с нужными IP и маршрутами

nano ./clients/configs/dmitry

explicit-ipv4 = 10.18.18.24
route = 10.17.17.0/24 (к примеру маршрут в соседнюю подсеть wireguard)

Имя конфигов должны совпадать с именами пользователей, то есть для dmitry будет также имя ./clients/configs/dmitry

9. Включим ipforwarding на сервере

sudo nano /etc/sysctl.conf

Поправить в конфиге:

net.ipv4.ip_forward = 1

И выполнить команду:

sudo sysctl -p

10. Создаем автозапуск правил iptables (ВНИМАТЕЛЬНО СМОТРИМ НАШУ ПОДСЕТЬ, ЛОКАЛЬНЫЙ IP, И ПОРТ ИЗ КОНФИГА)

sudo nano /etc/systemd/system/ocserv-iptables.service

[Unit]
Before=network.target
[Service]
Type=oneshot

ExecStart=/usr/sbin/iptables -t nat -A POSTROUTING -s 10.18.18.0/24 ! -d 10.18.18.0/24 -j SNAT --to 10.10.10.101
ExecStart=/usr/sbin/iptables -I INPUT -p tcp --dport 28855 -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD -s 10.18.18.0/24 -j ACCEPT
ExecStart=/usr/sbin/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

ExecStop=/usr/sbin/iptables -t nat -D POSTROUTING -s 10.18.18.0/24 ! -d 10.18.18.0/24 -j SNAT --to 10.10.10.101
ExecStop=/usr/sbin/iptables -D INPUT -p tcp --dport 28855 -j ACCEPT
ExecStop=/usr/sbin/iptables -D FORWARD -s 10.18.18.0/24 -j ACCEPT
ExecStop=/usr/sbin/iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

RemainAfterExit=yes
[Install]
WantedBy=multi-user.target

И команды для запуска сервиса iptables

sudo systemctl daemon-reload
sudo systemctl enable ocserv-iptables.service
sudo systemctl start ocserv-iptables.service
sudo systemctl status ocserv-iptables.service

11. Запускаем OpenConnect Server с логированием для первого теста

  sudo ./ocserv -d 9 -f -c sample.config

12. Подключаемся с помощью клиентов Андроид/iOS и linux

Android/iOS в поиске вводим OpenConnect и ставим Cisco AnyConnect либо нативный OpenConnect
Linux: Ставим openconnect из репозитория - утилита

sudo openconnect https://142.54.160.100:28855/?mysecretkluch

Еще вариант GUI:
Для gnome лучше плагином networkmanager-openconnect или любым openconnect GUI

13. Проверяем работает ли маскировка camouflage

Открываем в браузере https://142.54.160.100:28855/

14. Создаем сервис ocserv (Можно убрать в ExecStart флаг -d 9, чтобы писалось меньше логов, либо выставить -d 4)

sudo nano /etc/systemd/system/ocserv.service

[Unit]
After=network.target
[Service]
WorkingDirectory=/home/debian/ocserv/src
Type=simple
ExecStart=/home/debian/ocserv/src/ocserv -d 9 -f -c /home/debian/ocserv/src/sample.config
ExecStop=/bin/kill $(cat /run/ocserv.pid)
Restart=on-failure
[Install]
WantedBy=multi-user.target

И команды для запуска сервисов

sudo systemctl daemon-reload
sudo systemctl enable ocserv.service
sudo systemctl start ocserv.service
sudo systemctl status ocserv.service

Доп материал:

https://ocserv.openconnect-vpn.net/ocserv.8.html https://www.linuxbabe.com/ubuntu/openconnect-vpn-server-ocserv-ubuntu-20-04-lets-encrypt https://www.linuxbabe.com/ubuntu/certificate-authentication-openconnect-vpn-server-ocserv

МОИ ПРОЕКТЫ:

✅ БЕСПЛАТНЫЕ + ПЛАТНЫЕ СЕРВЕРА

https://t.me/root_cheap_bot

🎉 Бесплатный ChatGPT в Телеграм

https://t.me/botangpt_bot

Я В ТЕЛЕГРАМ https://t.me/worldranger ТЕЛЕГРАМ КАНАЛ https://t.me/linuxlife ТЕЛЕГРАМ ЧАТ https://t.me/linuxlife_chat

$$$ Поддержать канал: $$$

https://yoomoney.ru/to/4100116391953093

ВК сообщество https://vk.com/club198153108

ЯндексДзен https://dzen.ru/linuxlifepage