Содержание статьи
Такой выбор обусловлен тем, что ни OpenVPN, ни WireGuard не поддерживаются в iOS без программы‑клиента. Нам же для того, чтобы покопаться в правилах подключения, нужно будет загрузить на устройство кастомный профиль VPN, а это возможно, только если мы подключаемся системными средствами. Протокол IKEv2/IPSec, реализованный в strongSwan, как раз поддерживается на уровне системы. Причем не только в iOS — точно так же без всякого клиента к нему можно подключаться из Windows и Linux.
Ответ на вопрос, зачем тебе свой VPN, ты, думаю, уже знаешь. Например, через него часто настраивают подключение к приватной инфраструктуре или получают доступ к ресурсам, до которых трафик по тем или иным причинам не доходит напрямую. Да что там, может, тебе просто иногда любопытно, как выглядит главная страница Pornhub в стране, где ты только что арендовал недорогой VPS!
Ставим и настраиваем strongSwan на сервере
Начнем мы с развертывания strongSwan на частном сервере. Ниже я приведу краткий пересказ мануала по его настройке, предполагая, что у тебя установлена Ubuntu 20.04. Если у тебя другой Linux, команды могут отличаться, но принцип и конфиги будут по большей части те же.
Первый шаг стандартный для установки чего угодно:
sudo apt update
Теперь ставим нужные пакеты:
sudo apt install strongswan strongswan-pki \ libcharon-extra-plugins libcharon-extauth-plugins \ libstrongswan-extra-plugins libtss2-tcti-tabrmd-dev
Когда все скачается, перейдем к настройке.
Генерируем сертификаты
Создаем каталоги для сертификатов и ключей:
mkdir -p ~/pki/{cacerts,certs,private}
Убираем у этой папки лишние права — для надежности:
chmod 700 ~/pki
Генерируем корневой ключ RSA:
pki --gen --type rsa --size 4096 --outform pem \ > ~/pki/private/ca-key.pem
И корневой сертификат:
pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \ --type rsa --dn "CN=VPN root CA" --outform pem \ > ~/pki/cacerts/ca-cert.pem
Число 3650 — это десять лет (в днях), которые будет работать сертификат. Можешь изменить это значение на свое усмотрение.
Корневые сертификаты готовы, теперь нам нужен сертификат для нашего сервера.
Делаем приватный ключ:
pki --gen --type rsa --size 4096 --outform pem \ > ~/pki/private/server-key.pem
И сам сертификат. Обрати внимание, что IP в трех местах нужно изменить на IP твоего сервака.
pki --pub --in ~/pki/private/server-key.pem --type rsa \ | pki --issue --lifetime 1825 --cacert ~/pki/cacerts/ca-cert.pem \ --cakey ~/pki/private/ca-key.pem --dn "CN=NNN.NNN.NNN.NNN" \ --san @NNN.NNN.NNN.NNN --san NNN.NNN.NNN.NNN \ --flag serverAuth --flag ikeIntermediate --outform pem \ > ~/pki/certs/server-cert.pem
С этим закончили, можем перемещать ключи и сертификаты из домашнего каталога в папку настроек strongSwan:
sudo cp -r ~/pki/* /etc/ipsec.d/
Настраиваем strongSwan
На всякий случай переименуем старый файл с настройками, если он есть:
sudo mv /etc/ipsec.conf{,.original}
Откроем его /
в nano:
sudo nano /etc/ipsec.conf
Добавляем раздел config
:
config setup charondebug="ike 1, knl 1, cfg 0" uniqueids=no
Дальше добавляем настройки туннеля IKEv2 (не забудь подставить свой IP):
conn ikev2-vpn auto=add compress=no type=tunnel keyexchange=ikev2 fragmentation=yes forceencaps=yes dpdaction=clear dpddelay=300s rekey=no left=%any leftid=NNN.NNN.NNN.NNN leftcert=server-cert.pem leftsendcert=always leftsubnet=0.0.0.0/0 right=%any rightid=%any rightauth=eap-mschapv2 rightsourceip=10.10.10.0/24 rightdns=8.8.8.8,8.8.4.4 rightsendcert=never eap_identity=%identity ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024! esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
Здесь забиты адреса гугловского DNS (8.
и 8.
), ты можешь использовать их или заменить, например, адресом своего роутера (его можно узнать, набрав ip
).
Сохраняем конфиг и выходим из nano (Ctrl-X, Y, Enter).
Сервер VPN мы настроили, осталось создать креды, с которыми клиент сможет авторизоваться. За них отвечает файл /
. Открываем его в nano:
sudo nano /etc/ipsec.secrets
Добавляем в него строчку
: RSA "server-key.pem"
Двоеточие и пробел после него важны, не убирай их!
Дальше задаем логин и пароль пользователя. Замени их своей комбинацией. Хороший стойкий пароль можешь создать в парольном менеджере.
логин : EAP "пароль"
Сохраняй файл, и перезапустим strongSwan, чтобы он прочитал новые конфиги:
sudo systemctl restart strongswan-starter
Настраиваем сеть
Наш VPN уже работает и готов принимать соединения, но сетевой трафик до него пока не доходит. Нужно настроить файрвол и IP-форвардинг.
Разрешаем пропускать трафик OpenSSH, а также UDP на портах 500 и 4500:
sudo ufw allow OpenSSH
sudo ufw enablesudo ufw allow 500,4500/udp
Осталось сделать так, чтобы входящие пакеты IPSec обрабатывались нашей службой. Узнаем адрес нашего сетевого интерфейса:
ip route show default
Посмотри, что будет написано после слова dev
. Это может быть, например, eth0
или ens2
либо еще что‑нибудь в таком духе. Запомни или запиши куда‑нибудь эти буквы.
Открываем файл с настройками правил файрвола:
sudo nano /etc/ufw/before.rules
В самом начале файла, до секции *filter
, нам надо добавить два блока. Замени в трех местах ИНТЕРФЕЙС
тем, что мы нашли выше.
*nat
-A POSTROUTING -s 10.10.10.0/24 -o ИНТЕРФЕЙС -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o ИНТЕРФЕЙС -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o ИНТЕРФЕЙС -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
*filter
...
А в конце *filter
— такие две строки:
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
Закрываем, сохраняем. Теперь открываем файл с настройками службы файрвола:
sudo nano /etc/ufw/sysctl.conf
Добавляем в конец вот такие строки:
net/ipv4/ip_forward=1net/ipv4/conf/all/accept_redirects=0net/ipv4/conf/all/send_redirects=0net/ipv4/ip_no_pmtu_disc=1
Выключаем и включаем файрвол для применения настроек:
sudo ufw disable
sudo ufw enable
Если система запросит подтверждение, жми Y.
Настраиваем подключение
Нам нужно забрать с сервера свой сертификат, с которым мы будем подключаться. Он лежит в файле по такому пути:
/etc/ipsec.d/cacerts/ca-cert.pem
Можешь вывести его командой cat
, скопировать и сохранить в файл на своем компьютере либо забрать, подключившись по SFTP.
Для подключения к VPN тебе понадобятся три вещи: IP твоего сервера, файл с сертификатом и пара из логина и пароля, которые ты задал в файле /
. Все это у тебя есть!
Настройки в разных ОС выполняются немного по‑разному.
В macOS тебе нужно:
- Дважды кликнуть на файл с сертификатом и подтвердить его добавление в цепочку ключей, введя пароль.
- Открыть цепочку (Keychain Access), найти VPN root CA и задать нужные разрешения. Дважды кликни по нему, раскрой раздел «Доверять» (Trust) и выбери «Доверять всегда» (Always Trust) напротив строки IPSec.
- Создать соединение в настройках сети. Нажимай плюсик внизу, выбирай VPN, IKEv2 и жми «Создать» (Create), вписывай IP сервера в строки «Адрес сервера» и «Удаленный ID».
- В настройках соединения выбирай «Имя пользователя» и укажи свои логин и пароль.

В Windows процесс немного другой:
- Открывай «Консоль управления», выбирай «Файл → Добавить или удалить оснастку → Сертификаты → Добавить».
- Чтобы VPN работал для любого пользователя, выбирай «Учетная запись компьютера» и жми «Далее». Затем жми «Локальный компьютер» и «Закончить».
- В «Корне консоли» выбирай «Доверенные корневые центры сертификации для доверия федерации» и «Сертификаты».
- В меню «Действия» в правой панели нажми «Все задачи» и «Импортировать».
- Вызови меню выбора файла, выставь тип X.509 и импортируй свой сертификат.
- Теперь нужно создать подключение к VPN. Зайди в «Панель управления → Сеть интернет». В Windows 7 может понадобиться создать новое подключение к рабочему месту, в Windows 10 и 11 должен быть специальный раздел VPN. В любом случае вписывай адрес сервера, логин и пароль.
- Можешь подключаться!
На iOS установка схожа с тем, что мы делали на macOS. Но поскольку я обещал продемонстрировать возможность автоматически включать и выключать VPN, мы вместо этого создадим файл с профилем, который заодно будет содержать и все настройки.
На Android, увы, strongSwan не поддерживается на уровне ОС, поэтому тебе придется скачать клиентское приложение и настроить его. Впрочем, эта статья ориентирована на пользователей iOS, так что я не предполагаю, что речь о твоем основном телефоне.
Куем профиль для iOS
А теперь самая важная часть нашего приключения, ради которой все и затевалось. Мы создадим кастомный профиль для iOS, где пропишем, при каких условиях устройство должно подключаться к VPN. Не волнуйся — полностью полагаться на автоматизацию необязательно, и при желании ты сможешь деактивировать такое поведение в настройках, чтобы включать и выключать VPN вручную.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее