Ocserv Advanced (разделение туннелей, поддержка IPv6, статический IP, индивидуальные настройки для пользователей, виртуальный хостинг)

В данном руководстве вы освоите профессиональное использование OpenConnect VPN (ocserv). Вы узнаете:

  • Деактивировать небезопасные протоколы TLS.
  • Конфигурации для пользователей и групп
  • Установить фиксированный частный IP-адрес.
  • Деление туннелей
  • Активировать IPv6
  • Виртуальный хостинг — это услуга, которая позволяет размещать веб-сайты на серверах, разделяемых между несколькими пользователями.
  • Как осуществлять запуск нескольких копий ocserv.

Требования

Чтобы воспользоваться этим руководством, необходимо, чтобы вы уже настроили сервер OpenConnect VPN с сертификатом TLS от Let’s Encrypt. Если у вас этого еще нет, пожалуйста, ознакомьтесь с одним из следующих руководств.

  • Настройка VPN-сервера OpenConnect (ocserv) на Ubuntu 20.04 с использованием сертификатов Let’s Encrypt.
  • Конфигурация сервера OpenConnect VPN (ocserv) на Debian 11 Bullseye с использованием сертификатов Let’s Encrypt.
  • Конфигурация сервера OpenConnect VPN (ocserv) на CentOS 8/RHEL 8 с использованием сертификатов Let’s Encrypt.

Как деактивировать TLS 1.0 и TLS 1.1 в ocserv

Совет PCI прекратил поддержку TLS 1.0 30 июня 2018 года, и крупные веб-браузеры планируют отключить TLS 1.0 и TLS 1.1 в 2020 году. Нам также следует сделать аналогичное для нашего VPN-сервера. Необходимо внести изменения в основной конфигурационный файл.

sudo nano /etc/ocserv/ocserv.conf

Отыщите следующую строку:

tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128"

Для отключения TLS 1.0 и TLS 1.1 на сервере OpenConnect VPN просто включите в команду параметры — VERS-TLS1.0 и — VERS-TLS1.1.

tls-priorities color: #008000;">-VERS-TLS1.0:-VERS-TLS1.1"

Сохраните изменения и закройте документ. После этого перезапустите ocserv.

sudo systemctl restart ocserv

Теперь ocserv будет поддерживать только TLS 1.3 и TLS 1.2. Чтобы узнать больше о том, как настроить параметры TLS в ocserv, обратитесь к строкам приоритетов GnuTLS.

Для проверки поддержки TLS 1.0 на вашем сервере OpenConnect VPN выполните эту команду.

openssl s_client - connect vpn. your-domain.com:443 - tls1

Проверьте наличие TLS 1.1.

openssl s_client - connect vpn. your-domain.com:443 - tls1_1

Если вы сталкиваетесь с данным сообщением в выводе, это указывает на то, что версия TLS не поддерживается.

New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported

Параметры для пользователей или групп.

Ocserv предоставляет возможность настраивать параметры для пользователей и групп. Для активации этой функции необходимо раскомментировать две строки в конфигурационном файле /etc/ocserv/ocserv.conf.

config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/

Сохраните файл и закройте его. После этого создайте папку для настройки пользователей и групп.

sudo mkdir /etc/ocserv/config-per-user/ sudo mkdir /etc/ocserv/config-per-group/

Теперь у вас есть возможность создать файл в указанных двух каталогах. К примеру, создайте файл user1 для настройки пользовательских параметров для user1.

sudo nano /etc/ocserv/config-per-user/user1

Вы можете также создать файл group1 для настройки индивидуальных параметров для группы, именуемой group1.

sudo nano /etc/ocserv/config-per-group/group1

Вы можете внести аналогичные изменения в файл для активации функции разделения туннелей.

Читайте также:  Установка кошелька Electrum Bitcoin на Linux (Debian, Ubuntu, Fedora, OpenSUSE, Arch Linux)

route = 10.10.10.0/255.255.255.0 tunnel-all-dns = false dns = 8.8.8.8 dns = 1.1.1.1

  • Первый пункт указывает на то, что после подключения пользователя user1 или пользователей из группы group1 к данному VPN-серверу, только трафик, предназначенный для сети 10.10.10.0/24, будет проходить через VPN. Трафик к другим IP-адресам будет направляться через основной шлюз.
  • Вторая строка предотвращает туннелирование DNS-запросов.
  • В третьей и четвертой строках настраиваются DNS-серверы для пользователей VPN.

Я применяю этот метод, чтобы мой другой VPS (виртуальный частный сервер) мог подключаться к VPN-серверу, не мешая обычному трафику. В результате TUN-устройство (vpns0) моего VPN-сервера всегда остается включенным, что означает, что его частный адрес 10.10.10.1 постоянно активен. Если у вас нет другого VPS, вы можете установить клиент OpenConnect через командную строку непосредственно на сервере и затем установить VPN-соединение с ним самим.

Сохраните файл и закройте его. Затем перезапустите ocserv, чтобы изменения были применены.

sudo systemctl restart ocserv

Учтите, что при активации IPv6 в ocserv необходимо также указать диапазон IPv6 для настройки разделенного туннелирования.

route = 10.10.10.0/255.255.255.0 route = fda9:4efe:7e3b:03ea::/48 tunnel-all-dns = false dns = 8.8.8.8 dns = 1.1.1.1

Чтобы исключить IP-адрес из стандартного маршрута, примените команду no-route.

no-route = 12.34.56.78/32

Это подразумевает, что весь остальной трафик будет направляться через VPN-туннель, за исключением трафика к IP-адресу 12.34.56.78. Параметры route и no-route могут использовать как маску сети (например, 10.10.10.0/255.255.255.0), так и CIDR-нотацию (например, 12.34.56.78/32).

Если после активации разделенного туннелирования возникает указанная ошибка, это, скорее всего, связано с тем, что вы не применили нотацию сетевой маски или CIDR.

could not parse proxy protocol header; discarding connection

Как установить статический IP-адрес для пользователя?

Ocserv не имеет возможности назначать каждому пользователю статический частный IP-адрес. Однако существует хитрый способ, позволяющий закрепить статический частный IP-адрес за определенным пользователем.

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

ipv4-network = 10.10.10.0 ipv4-netmask = 255.255.255.252

Маска сети установлена на 255.255.255.252 вместо обычной 255.255.255.0, что ограничивает количество доступных IP-адресов до четырех.

  • 10.10.10.0
  • 10.10.10.1
  • 10.10.10.2
  • 10.10.10.3

Фактически, этому VPN-пользователю можно назначить лишь один IP-адрес (10.10.10.2).

  • Сетевой адрес 10.10.10.0.
  • IP-адрес 10.10.10.1 постоянно используется сервером VPN.
  • 10.10.10.3 является адресом для широковещательной передачи.

Таким образом, пользователь VPN имеет возможность использовать лишь адрес 10.10.10.2.

Невозможно использовать указанный метод для всех пользователей. Если ваша цель — назначить статический IP-адрес каждому пользователю VPN, оптимальным вариантом будет WireGuard VPN.

Туннелирование, разделенное по регионам.

Предположим, вы желаете, чтобы трафик, поступающий исключительно из зарубежных государств, проходил через VPN, в то время как трафик внутри вашей страны использовал стандартный маршрут. Для достижения этой цели можно воспользоваться директивой no-route в конфигурационном файле ocserv.

Для начала необходимо загрузить диапазон IP-адресов вашей страны, посетив следующую страницу: https://www.ip2location.com/free/visitor-blocker. Там вы сможете скачать IP-адреса в формате CIDR.

Сохраните диапазон IP-адресов в текстовом файле ip2location. txt и выполните в терминале Linux следующую команду, чтобы добавить директиву no-route = в начале каждой строки.

Читайте также:  Два простых метода для установки Firefox Quantum на Debian 9 Stretch

sed 's/^/no-route = /' - i ip2localtion. txt

Теперь откройте файл с помощью текстового редактора и скопируйте все его строки. Эти строки необходимо внести в конфигурационный файл ocserv. Если количество строк велико, их можно добавлять в конфигурационный файл для каждого отдельного пользователя.

sudo nano /etc/ocserv/config-per-user/user1

Вы можете также внести их в файл настроек группы, после чего добавить пользователей в эту группу.

Перезапустите ocserv, чтобы изменения начали действовать.

sudo systemctl restart ocserv

Обратите внимание: в приложении AnyConnect для iOS есть опция Connect On Demand, позволяющая вам настраивать, какие домены следует использовать с VPN, а какие — нет.

Как активировать IPv6 в OpenConnect VPN

Если ваш VPN-сервер располагает общедоступным IPv6-адресом, вы можете активировать поддержку IPv6 в OpenConnect VPN. Для этого необходимо внести изменения в файл конфигурации ocserv.

sudo nano /etc/ocserv/ocserv.conf

Найдите эти две строки и удалите их комментарии.

ipv6-network = fda9:4efe:7e3b:03ea::/48 ipv6-subnet-prefix = 64

Сохраните файл и закройте его. Затем перезапустите ocserv, чтобы изменения были применены.

sudo systemctl restart ocserv

Теперь необходимо активировать пересылку IP для IPv6. Для этого откройте файл sysctl.conf для редактирования.

sudo nano /etc/sysctl.conf

Вставьте следующую строку в конец данного файла.

net. ipv6.conf.all. forwarding=1

Сохраните файл и закройте его. После этого внесите изменения, выполнив следующую команду.

sudo sysctl - p

Теперь необходимо сконфигурировать маскарадинг для IPv6 на межсетевом экране сервера, чтобы он функционировал как виртуальный маршрутизатор для клиентов VPN.

sudo nano /etc/ufw/before6.rules

В таблице фильтров по умолчанию установлены определённые правила. В конец этого файла добавьте указанные строки. Не забудьте заменить ens3 на название вашего сетевого интерфейса.

# Правила таблицы NAT *nat :POSTROUTING ACCEPT [0:0] - A POSTROUTING - o ens3 - j MASQUERADE # Завершите каждую таблицу строкой 'COMMIT', иначе эти правила не будут обработаны COMMIT

В текстовом редакторе Nano для перемещения в конец файла нажмите сочетание клавиш Ctrl+W, а затем Ctrl+V.

Маскарадный NAT для IPv6 в файрволе UFW

По умолчанию UFW блокирует пересылку пакетов. Мы можем разрешить пересылку для нашей частной сети IPv6. Найдите в этом файле цепочку ufw6-before-forward и добавьте три следующие строки, которые разрешат пересылку пакетов, если исходный или целевой IP-адрес находится в диапазоне fda9:4efe:7e3b:03ea::/48.

Разрешите пересылку пакетов для сети IPv6 с помощью ufw.

Сохраните файл и закройте его. Затем перезапустите UFW, чтобы изменения были применены.

sudo systemctl restart ufw

Теперь, если вы выведете список правил в цепочке POSTROUTING таблицы NAT с помощью следующей команды:

sudo ip6tables - t nat - L POSTROUTING

Вы сможете ознакомиться с правилом Маскарада.

Отключите действующее VPN-соединение, добавьте запись AAAA для адреса vpn. example.com, а затем снова подключитесь к VPN. После этого посетите https://test-ipv6.com/, чтобы проверить свою связь по IPv6.

При настройке собственного BIND DNS-резолвера на VPN-сервере добавьте следующую строку в файл /etc/ocserv/ocserv.conf, чтобы указать VPN-сервер в качестве DNS-резолвера для VPN-клиентов.

dns = fda9:4efe:7e3b::1

Закройте и сохраните файл. Для того чтобы запрашивать DNS-имена в IPv6, необходимо настроить BIND для разрешения адресов IPv6 для VPN-клиентов.

sudo nano /etc/bind/named.conf.options

Проведите поиск параметра allow-recursion и установите его значение на:

allow-recursion < 127.0.0.1; 10.10.10.0/24; fda9:4efe:7e3b:03ea::/48; >;

Сохраните файл и закройте его. Затем перезапустите BIND9.

Читайте также:  Photoshop в Linux – это GIMP

sudo systemctl restart named

Нам также необходимо включить поддержку IPv6 для VPN-клиента в файрволе.

sudo ufw allow in from fda9:4efe:7e3b:03ea::/48

Виртуальный хостинг — это услуга, которая позволяет размещать веб-сайты на серверах, разделяемых между несколькими пользователями.

Если вам нужно использовать несколько хостов для VPN-сервера, можно воспользоваться certbot для получения сертификатов, поддерживающих несколько доменов. После этого перезапустите ocserv, и все будет готово.

Для добавления нового виртуального хоста в ocserv, сперва необходимо воспользоваться методом из третьего шага для получения TLS-сертификата для данного хоста. После этого требуется внести изменения в конфигурационный файл ocserv.

sudo nano /etc/ocserv/ocserv.conf

Прокрутите файл до самого конца. В редакторе Nano можно использовать комбинацию клавиш Ctrl+W, затем Ctrl+V для перехода в конец. Вставьте следующие строки и замените vpn2.example.com на имя второго виртуального хоста.

[vhost:vpn2.example.comВключение аутентификации по паролю и сертификатам

enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]"
auth = "certificate"
tcp-port = 443

Уберите комментарии с двух строк, если ocserv используется за HAProxy:

listen-host = 127.0.0.1

listen-proxy-proto = true

Настройки SSL/TLS

ca-cert = /etc/ocserv/ssl/ca-cert. pem
server-cert = /etc/letsencrypt/live/vpn2.example.comПуть к полному сертификату:

/fullchain. pem

, ключ сервера:

/etc/letsencrypt/live/

.vpn2.example.comФайл /privkey. pem cert-user-oid = 0.9.2342.19200300.100.1.1 #Настройка сети. Для данного виртуального хоста рекомендуется выбрать другой сетевой диапазон. Устройство = vpns ipv4-сеть =10.10.20.0 ipv4-netmask = 255.255.255.0 route = default dns = 8.8.8.8 tunnel-all-dns = true compression = true max-clients = 0 max-same-clients = 0 try-mtu-discovery = true idle-timeout=1200 mobile-idle-timeout=2400 config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/

Сохраните изменения и закройте документ. После этого перезапустите ocserv.

sudo systemctl restart ocserv

Измените конфигурационный файл UFW.

sudo nano /etc/ufw/before. rules

В файле найдите цепочку ufw-before-forward и добавьте две строки, которые разрешат пересылку пакетов, если исходный или целевой IP-адрес принадлежит диапазону 10.10.20.0/24.

-A ufw-before-forward - s 10.10.20.0/24 - j ACCEPT - A ufw-before-forward - d 10.10.20.0/24 - j ACCEPT

Закройте файл после сохранения и перезапустите UFW.

sudo systemctl restart ufw

Учтите, что демон ocserv может уведомить вас о том, что некоторые настройки будут проигнорированы для виртуального хоста. Тем не менее, я заметил, что некоторые из этих игнорируемых параметров действительно необходимы. Например, если удалить строку device = vpns из конфигурации виртуального хоста, это может привести к ошибке при попытке установить VPN-соединение с ним.

Служба VPN недоступна; причина: Ошибка конфигурации сервера

Сервер VPN зафиксирует в журнале следующее сообщение об ошибке.

сети не настроены; отклонение клиента

Обратите внимание, что VPN-клиент AnyConnect для iOS не поддерживает TLS SNI. В связи с этим пользователи iOS будут подключаться к виртуальному хосту по умолчанию.

Как запустить несколько копий ocserv.

Один экземпляр ocserv может быть связан лишь с одним TCP или UDP портом на вашем сервере. Если вы хотите, чтобы ocserv имел возможность связываться с несколькими TCP или UDP портами, необходимо запустить несколько экземпляров ocserv. Это довольно просто: скопируйте файл /lib/systemd/system/ocserv.service в новый файл.

sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service

После этого внесите изменения в новый файл.

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

/etc/ocserv/ocserv.conf

/etc/ocserv/ocserv2.conf

Сохраните изменения и закройте файл. Затем откройте для редактирования файл /etc/ocserv/ocserv2.conf, чтобы внести ваши пользовательские настройки. После завершения редактирования запустите второй экземпляр сервиса ocserv.

sudo systemctl start ocserv2

Итоговый анализ

Вот и всё! Надеюсь, этот гайд оказался полезным для вас в процессе установки и настройки сервера OpenConnect VPN. Как всегда, если вы считаете этот материал ценным, подписывайтесь на нашу бесплатную рассылку, чтобы получать больше полезных советов и рекомендаций.