Вопрос или проблема
Я следовал этой статье, чтобы настроить IKEv2 VPN на AWS Lightsail VPS с Ubuntu 24.04.1
Когда я пытаюсь подключиться к VPN с macOS, используя имя пользователя, пароль и сертификат, я получаю эти ошибки в консоли macOS:
ошибка 10:49:12.549339+0800 NEIKEv2Provider IKEv2Session[1, B93E8A0C8B3195AE-0000000000000000] Не удалось получить ответ IKE SA Init (connect)
ошибка 10:49:13.082739+0800 NEIKEv2Provider IKEv2Session[2, A655498A54D72B0C-0000000000000000] Не удалось получить ответ IKE SA Init (connect)
ошибка 10:49:18.415019+0800 neagent __plugin endUsing для '46B3D0ED-0FA1-4378-9F8E-668F937D41EF' вернул ошибку: [u 200C1217-B935-54B8-90D4-6D1B124F4EF6:m (null)] [com.apple.NetworkExtension.IKEv2Provider(1.0)] endUsingRequest: вызвано с неизвестным/с истекшим сроком запросом [010E220F-2B88-45C1-831B-22169228BA28]
ошибка 10:49:35.988519+0800 runningboardd [xpcservice<com.apple.NetworkExtension.IKEv2Provider([osservice<com.apple.neagent(501)>:18076:18076])(501)>{vt hash: 0}:29644] Мемори статус не удалось из-за неожиданной ошибки: Неправильный аргумент (22)
ошибка 10:49:36.015419+0800 NEIKEv2Provider Инициализация; внешняя подсистема UIKit_PKSubsystem отказалась от настройки
ошибка 10:49:36.031420+0800 NEIKEv2Provider не удается открыть файл на строке 49450 из [1b37c146ee]
ошибка 10:49:36.031435+0800 NEIKEv2Provider os_unix.c:49450: (2) open(/private/var/db/DetachedSignatures) - Файл или каталог не существует
ошибка 10:50:07.073364+0800 NEIKEv2Provider IKEv2Session[1, 45029BCAF6EA8C7E-0000000000000000] Не удалось получить ответ IKE SA Init (connect)
ошибка 10:50:38.102365+0800 NEIKEv2Provider IKEv2Session[2, 05C87694B50DCD36-0000000000000000] Не удалось получить ответ IKE SA Init (connect)
ошибка 10:50:38.104871+0800 NEIKEv2Provider Не удалось найти подходящий адрес, путь поддерживает IPv4 да IPv6 нет
ошибка 10:51:09.134447+0800 NEIKEv2Provider IKEv2Session[3, 1578A7063FB21322-0000000000000000] Не удалось получить ответ IKE SA Init (connect)
ошибка 10:51:09.137326+0800 NEIKEv2Provider Не удалось найти подходящий адрес, путь поддерживает IPv4 да IPv6 нет
ошибка 10:51:09.146182+0800 NEIKEv2Provider [Extension com.apple.NetworkExtension.IKEv2Provider]: Запущено с ошибкой VPN сервер не ответил.
ошибка 10:51:14.169812+0800 neagent __plugin endUsing для 'DEC188BD-2719-407B-A2A7-2ABBD747352A' вернул ошибку: [u 200C1217-B935-54B8-90D4-6D1B124F4EF6:m (null)] [com.apple.NetworkExtension.IKEv2Provider(1.0)] endUsingRequest: вызвано с неизвестным/с истекшим сроком запросом [C6A95481-223A-46AB-A593-CF9B06E84B59]
На сервере ничего не записывается в /var/log/syslog
, когда я пытаюсь подключиться к VPN. Я могу подключиться к серверу через ssh как обычно с моего Mac, только VPN, кажется, не работает.
Что я могу сделать, чтобы продолжать диагностировать, почему VPN не подключается?
Вот /etc/ipsec.conf
сервера
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=адрес_моего_сервера
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!
/etc/ipsec.secrets
: RSA "server-key.pem"
myusername : EAP "mypassword"
/etc/ufw/sysctl.conf
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/default/accept_redirects=0
net/ipv6/conf/all/accept_redirects=0
net/ipv6/conf/default/accept_redirects=0
net/ipv4/icmp_echo_ignore_broadcasts=1
net/ipv4/icmp_ignore_bogus_error_responses=1
net/ipv4/icmp_echo_ignore_all=0
net/ipv4/conf/all/log_martians=0
net/ipv4/conf/default/log_martians=0
net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o ens5 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o ens5 -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o ens5 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
-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
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT
COMMIT
sudo ufw status
Статус: активен
Для Действие Из
-- ------ ----
OpenSSH РАЗРЕШИТЬ Откуда угодно
500,4500/udp РАЗРЕШИТЬ Откуда угодно
OpenSSH (v6) РАЗРЕШИТЬ Откуда угодно (v6)
500,4500/udp (v6) РАЗРЕШИТЬ Откуда угодно (v6)
Ответ или решение
Конфигурация и установка VPN IKEv2 иногда могут вызывать проблемы, особенно в случае настройки на серверах Linux, таких как Ubuntu, и при подключении клиентов macOS. В данном случае вы сталкиваетесь с проблемой, когда VPN-соединение не удается установить с использованием стандартных методов подключения. Рассмотрим возможные причины и пути их устранения.
Теория:
Первая задача — понять, как работает IKEv2 VPN и как он должен быть правильно настроен. IKEv2 — это протокол обмена ключами, который используется для настройки защищенного обмена данными. Он обычно используется в сочетании с IPsec для создания безопасных туннелей. У Ubuntu, будучи сервером, установлен framework StrongSwan для поддержки IKEv2, который также требует правильной настройки конфигурационных файлов. Эти файлы — основная точка, где могут возникнуть проблемы, препятствующие успешной установке соединения.
Проблемы, которые могут возникнуть:
-
Сертификаты и ключи. Сертификаты и ключи должны быть корректно созданы и размещены. Например, серверный сертификат должен быть подписан доверенным центром сертификации, либо вашим собственным корневым сертификатом, который клиент должен доверять.
-
Настройки сети и брандмауэра. Все необходимые порты должны быть открыты. Для IKEv2 это обычные порты UDP 500 и 4500. Также следует убедиться, что сетевые интерфейсы правильно настроены и поддерживают пересылку пакетов между разными сегментами сети.
-
Конфигурационные файлы. Очевидной проблемой может быть неправильное format или ошибки в конфигурационных файлах:
/etc/ipsec.conf
,/etc/ipsec.secrets
и других связанных файлах, таких какufw
конфигурации. -
Журналы и отладка. Отсутствие записей в журналах может указывать на проблемы с запуском службы или отсутствие попыток соединения. Убедитесь, что в конфигурации включено ведение журналов.
Пример:
В вашей ситуации, следующие действия помогут в диагностике:
-
Проверка журналов на сервере. Начните с проверки наличия записей в
/var/log/syslog
. Возможно, службаcharon
(компонент StrongSwan) не запускается или не регистрирует попытки подключения. -
Проверка конфигурации StrongSwan. Ваша конфигурация
ipsec.conf
должна быть тщательно проверена. Например, убедитесь, что все сертификаты, упомянутые вleftcert
, существуют и правильно читаются StrongSwan. Тем не менее, ваш конфиг выглядит правильно:left=%any
,right=%any
и другие параметры кажутся корректными. -
Сетевые настройки и UFW. Проверьте правила UFW и подтвердите, что порты 500 и 4500 действительно открыты для входящего и исходящего трафика. Воспользуйтесь командой
sudo ufw status numbered
для более детальной картины, исключите возможность конфликтов с другими правилами. -
Команды проверки. Используйте
sudo strongswan start
для перезапуска службы иsudo ipsec status
для проверки состояния соединений IPsec. -
Отладка на стороне клиента. В на клиента, особенно если вы используете macOS, можно также проверить наличие сетевых ошибок в системных утилитах. Например, командой
socat
можно отладить соединение на UDP-порту:socat UDP4-LISTEN:500,fork -
. Это поможет исключить проблемы с маршрутизацией. -
Параметры протоколов. Проверьте конфигурацию IKE и ESP для поддержки шифров, совместимых с вашим клиентом. Возможно, macOS требует других параметров IKE/ESP, чем те, что вы настроили.
Применение:
Практическое исправление заключается в следующем:
- Перезапустите службу StrongSwan и убедитесь, что она начала записывать логи о попытках подключения.
- Проверьте правильность сертификатов и их соответствие серверу и клиенту.
- Подтвердите, что на клиентах macOS установлены и доверены корневые сертификаты, из которого был подписан серверный сертификат.
- Убедитесь, что у клиента правильные сетевые параметры (например, в сертификатах
rightid
клиента иleftid
сервера должны совпадать). - Еще раз проверьте все параметры в
sysctl.conf
иufw
— убедитесь, что включено пересылка IP-пакетов (net/ipv4/ip_forward=1
), что необходимо для работы VPN. - Если возможно, временно отключите UFW и попробуйте подключиться, чтобы изолировать проблему безопасности.
- Убедитесь, что не только порты, но и IP-пакеты (например, ESP) разрешены в брандмауэре.
Если все эти шаги приведут к успеху, последней задачей станет документирование процесса и выявленных проблем для последующего контроля и предотвращения повторений в будущем. Если они не помогли, вероятно, стоит обратиться за поддержкой к сообществу StrongSwan или вашему провайдеру облачных услуг.