- Вопрос или проблема
- Конфигурация удаленной конечной точки (на основе предоставленной спецификации):
- Настройка strongSwan (/etc/ipsec.conf):
- /etc/ipsec.secrets:
- Ошибка при попытке установить соединение:
- Дополнительная информация:
- ipsec statusall output:
- Соответствующие записи в журнале:
- Вопросы:
- Ответ или решение
- 1. Изменения для увеличения совместимости с удаленной стороной
- 2. Включение PFS
- 3. Проблемы с версией strongSwan
- 4. Дополнительные диагностики
- 5. Проверка необходимости GRE туннеля
- 6. Проблемы с состоянием соединения
- 7. Валидность [SPECIFIED_INTERNAL_IP]
- 8. Возможные неудобства с интерпретацией спецификации
- Резюме
Вопрос или проблема
Я пытаюсь настроить IPsec VPN туннель между клиентом strongSwan (Ubuntu 22.04) и удаленной конечной точкой. У меня ограниченная информация о удаленной стороне, что усложняет настройку. Вот обзор того, что я понимаю о настройке:
+-------------------+ +-------------------+
| strongSwan | | Удаленная конечная точка |
| (Ubuntu 22.04) | | (Неизвестная конфигурация)|
| | | |
| [MY_SERVER_IP] | IPsec Tunnel |[REMOTE_ENDPOINT_IP]
| | ==================>| |
| 192.168.156.134/30| (Возможно, GRE | 192.168.156.134/30|
| | по IPsec) | (Предполагаемая) |
+-------------------+ +-------------------+
| |
| |
V V
Локальная сеть Возможно [SPECIFIED_INTERNAL_IP]/32
(Не уверен в этом)
Несмотря на многочисленные попытки, я постоянно получаю ошибку “NO_PROPOSAL_CHOSEN” во время переговоров Фазы 2 (CHILD_SA). Мне нужна помощь в диагностике и возможной переработке настройки.
Конфигурация удаленной конечной точки (на основе предоставленной спецификации):
Мне предоставили то, что выглядит как спецификация конфигурации Cisco IOS для подключения к удаленной конечной точке. Однако я не уверен, является ли это фактической конфигурацией или просто шаблоном, которому я должен следовать. Вот что мне предоставили:
crypto isakmp policy 6570
encr aes 256
hash md5
authentication pre-share
group 14
lifetime 28800
crypto isakmp key [REDACTED] address [MY_SERVER_IP]
crypto ipsec transform-set [VPN_NAME]-TS esp-aes 256 esp-sha-hmac
mode tunnel
crypto ipsec profile [VPN_NAME]-PF
set security-association lifetime seconds 28800
set transform-set [VPN_NAME]-TS
set pfs group5
interface Tunnel7040
description [VPN_NAME]
ip address 192.168.156.134 255.255.255.252
tunnel source [REMOTE_ENDPOINT_IP]
tunnel destination [MY_SERVER_IP]
tunnel protection ipsec profile [VPN_NAME]-PF
ip mtu 1400
ip access-list extended POST-NAT
permit ip any host [SPECIFIED_INTERNAL_IP]
ip nat inside source list POST-NAT interface tunnel 7040 overload
interface tunnel 7040
ip nat outside
interface XXXX => подключить к LAN
ip nat inside
ip route [SPECIFIED_INTERNAL_IP] 255.255.255.255 192.168.156.133 name X
Примечание: Я не уверен в значении [SPECIFIED_INTERNAL_IP] в этом контексте. Он был предоставлен в спецификации, но я не знаю, представляется ли он фактической внутренней сетью или это просто заполнитель.
Настройка strongSwan (/etc/ipsec.conf):
Я пробовал две разные конфигурации на своем сервере Ubuntu с работающим strongSwan, одну с GRE туннелем и одну без него. Обе имеют одни и те же проблемы, и я не могу подключиться на Фазе 2:
Конфигурация 1 (с GRE):
config setup
charondebug="ike 4, knl 4, cfg 4, net 4, esp 4, dmn 4, mgr 4"
uniqueids=yes
conn %default
ikelifetime=28800s
keylife=28800s
rekeymargin=540s
keyingtries=%forever
keyexchange=ikev1
authby=secret
conn [VPN_NAME]
left=[MY_SERVER_IP]
leftsubnet=192.168.156.132/30
right=[REMOTE_ENDPOINT_IP]
rightsubnet=[SPECIFIED_INTERNAL_IP]/32
auto=start
ike=aes256-md5-modp2048!
esp=aes256-sha1-modp1536!
aggressive=no
keyexchange=ikev1
ikelifetime=28800s
lifetime=28800s
dpddelay=10s
dpdtimeout=30s
dpdaction=restart
type=tunnel
leftprotoport=gre
rightprotoport=gre
Конфигурация 2 (без GRE):
config setup
charondebug="ike 2, knl 2, cfg 2"
uniqueids = yes
conn %default
ikelifetime=8h
keylife=8h
rekeymargin=3m
keyingtries=%forever
authby=secret
fragmentation=yes
conn [VPN_NAME]
left=[MY_SERVER_IP]
leftsubnet=0.0.0.0/0
right=[REMOTE_ENDPOINT_IP]
rightsubnet=[SPECIFIED_INTERNAL_IP]/32
auto=start
ikelifetime=28800s
lifetime=28800s
dpdaction=restart
dpddelay=30s
dpdtimeout=120s
keyexchange=ikev1
ike=aes256-md5-modp2048
esp=aes256-sha1
# pfs=yes
leftid=[MY_SERVER_IP]
rightid=[REMOTE_ENDPOINT_IP]
authby=secret
auto=start
forceencaps=yes
Примечание: Я не уверен, следует ли мне явно определять PFS, учитывая, что предоставленная спецификация Cisco IOS, похоже, использует более старый стиль конфигурации. Возможно, что она все еще требует явной конфигурации PFS, но я не совсем уверен.
/etc/ipsec.secrets:
[MY_SERVER_IP] [REMOTE_ENDPOINT_IP] : PSK "[REDACTED]"
Ошибка при попытке установить соединение:
root@[HOSTNAME]:~# sudo ipsec up [VPN_NAME]
generating QUICK_MODE request 3522219162 [ HASH SA No KE ID ID ]
sending packet: from [MY_SERVER_IP][500] to [REMOTE_ENDPOINT_IP][500] (380 bytes)
received packet: from [REMOTE_ENDPOINT_IP][500] to [MY_SERVER_IP][500] (92 bytes)
parsed INFORMATIONAL_V1 request 586344814 [ HASH N(NO_PROP) ]
received NO_PROPOSAL_CHOSEN error notify
establishing connection '[VPN_NAME]' failed
Дополнительная информация:
- Версия strongSwan: 5.9.5-2ubuntu2.3
- Версия Ubuntu: 22.04 LTS
- Настройка GRE туннеля (если нужно):
sudo ip tunnel add gre1 mode gre remote [REMOTE_ENDPOINT_IP] local [MY_SERVER_IP] sudo ip link set gre1 up sudo ip addr add 192.168.156.134/30 dev gre1 sudo ip route add [SPECIFIED_INTERNAL_IP]/32 dev gre1
ipsec statusall output:
root@[HOSTNAME]:~# sudo ipsec statusall
Status of IKE charon daemon (strongSwan 5.9.5, Linux 5.15.0-91-generic, x86_64):
uptime: 2 minutes, since Oct 15 15:23:01 2024
malloc: sbrk 3031040, mmap 0, used 1147456, free 1883584
worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 12
loaded plugins: charon test-vectors ldap pkcs11 tpm aes rc2 sha2 sha1 md5 mgf1 rdrand random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem gcrypt af-alg fips-prf gmp curve25519 chapoly xcbc cmac hmac ctr ccm ntru drbg curl attr kernel-netlink resolve socket-default forecast farp stroke updown eap-identity eap-aka eap-md5 eap-gtc eap-mschapv2 eap-dynamic eap-radius eap-tls eap-ttls eap-peap eap-tnc xauth-generic xauth-eap xauth-pam tnc-tnccs dhcp lookip error-notify certexpire led addrblock unity counters
Listening IP addresses:
[DOCKER_INTERFACE_IP]
[MY_SERVER_IP]
[DOCKER_INTERFACE_IP]
192.168.156.134
Connections:
[VPN_NAME]: [MY_SERVER_IP]...[REMOTE_ENDPOINT_IP] IKEv1, dpddelay=10s
[VPN_NAME]: local: [[MY_SERVER_IP]] использует аутентификацию по предварительно установленному ключу
[VPN_NAME]: remote: [[REMOTE_ENDPOINT_IP]] использует аутентификацию по предварительно установленному ключу
[VPN_NAME]: child: 192.168.156.132/30[gre] === [SPECIFIED_INTERNAL_IP]/32[gre] ТРАНСПОРТ, dpdaction=restart
Security Associations (1 up, 0 connecting):
[VPN_NAME][5]: УСТАНОВЛЕНО 9 секунд назад, [MY_SERVER_IP][[MY_SERVER_IP]]...[REMOTE_ENDPOINT_IP][[REMOTE_ENDPOINT_IP]]
[VPN_NAME][5]: IKEv1 SPIs: 890e3509158a8d1f_i 7c29fe705b4d5aa9_r*, повторная аутентификация по предварительно установленному ключу через 7 часов
[VPN_NAME][5]: IKE предложение: AES_CBC_256/HMAC_MD5_96/PRF_HMAC_MD5/MODP_2048
Примечание: В разделе Security Associations
изначально показывается 1 ассоциация как активная, но через некоторое время она отключается, отображая только следующее сообщение:
Security Associations (0 up, 0 connecting):
none
Соответствующие записи в журнале:
Oct 15 15:25:26 [HOSTNAME] charon: 09[CFG] no acceptable ENCRYPTION_ALGORITHM found
Oct 15 15:25:26 [HOSTNAME] charon: 09[CFG] selecting proposal:
Oct 15 15:25:26 [HOSTNAME] charon: 09[CFG] no acceptable ENCRYPTION_ALGORITHM found
Oct 15 15:25:26 [HOSTNAME] charon: 09[CFG] selecting proposal:
Oct 15 15:25:26 [HOSTNAME] charon: 09[CFG] proposal matches
Oct 15 15:25:26 [HOSTNAME] charon: 09[CFG] received proposals: IKE:AES_CBC_256/HMAC_MD5_96/PRF_HMAC_MD5/MODP_1024, IKE:AES_CBC_128/HMAC_MD5_96/PRF_HMAC_MD5/MODP_1024, IKE:3DES_CBC/HMAC_SHA1_96/PRF_HMAC_SHA1/MODP_1024, ...
Вопросы:
- Учитывая неопределенности в конфигурации удаленной конечной точки, какие изменения я должен внести в свою конфигурацию strongSwan, чтобы повысить вероятность совместимости?
- Как я могу включить PFS в этой версии strongSwan, чтобы соответствовать настройке
set pfs group5
в предоставленной спецификации? - Есть ли известные проблемы с strongSwan 5.9.5 и старыми VPN конечными точками, о которых мне следует знать?
- Стоит ли мне рассмотреть использование другой версии strongSwan? Если да, то какой?
- Какие дополнительные шаги по отладке или команды мне следует выполнить, чтобы собрать больше информации о том, почему соединение не удается установить?
- Учитывая неопределенность в необходимости GRE туннеля, как мне определить, необходим он или нет, и проверить, правильно ли он настроен, если это необходимо?
- Вывод
ipsec statusall
показывает соединение как УСТАНОВЛЕННОЕ, но я все равно получаю ошибки. Что может быть причиной этого несоответствия? - Как я могу проверить, действительно ли [SPECIFIED_INTERNAL_IP], упомянутый в предоставленной спецификации, имеет отношение к моей настройке, и если да, то как мне следует включить его в свою конфигурацию?
- Есть ли потенциальные ошибки конфигурации или недоразумения в том, как я интерпретирую предоставленную спецификацию Cisco IOS для моей настройки strongSwan?
Я пробовал различные конфигурации, включая изменение строк ike
и esp
, но я все еще не могу установить рабочее соединение. Любая помощь или руководство будут очень ценны. Я открыт для альтернативных решений или подходов, если есть лучший способ настроить это VPN соединение, особенно учитывая неопределенности в конфигурации удаленной конечной точки.
Спасибо всем.
Ответ или решение
Настройка IPsec VPN между strongSwan (Ubuntu) и удалённым конечным пунктом может представлять собой достаточно сложный процесс, особенно при наличии ограниченной информации о конфигурации удалённой стороны. В ответ на ваши вопросы и проблемы, попробуем систематизировать информацию и предложить потенциальные шаги для устранения неполадок.
1. Изменения для увеличения совместимости с удаленной стороной
С учетом представленной Cisco IOS конфигурации, стоит учесть следующие изменения в конфигурации strongSwan:
-
Шифрование и хеширование: Убедитесь, что используемые алгоритмы шифрования (AES 256) и хеширования (MD5) соответствуют тем, что поддерживаются на удалённой стороне. Попробуйте упростить параметры конфигурации для IKE и ESP, например, используя:
ike=aes256-md5-modp2048 esp=aes256-md5
-
Группы обмена ключами: Убедитесь, что группы модулей обмена соответствуют (используйте
modp2048
для первой фазы иgroup5
для PFS).
2. Включение PFS
Для активации PFS, укажите в конфигурации strongSwan следующее:
conn [VPN_NAME]
...
pfs=yes
pfs/group=5
Эти параметры позволят точно соответствовать настройкам, предоставленным в Cisco IOS.
3. Проблемы с версией strongSwan
В версиях 5.9.x могут возникнуть проблемы, связанные с совместимостью с более старыми VPN-устройствами. Если у вас есть возможность, протестируйте с более стабильной, но устаревшей версией strongSwan, чтобы определить, будут ли отличия в поведении.
4. Дополнительные диагностики
Для дальнейшей диагностики используйте более подробные логи:
sudo ipsec up [VPN_NAME]
tail -f /var/log/syslog
Это позволит вам видеть, какие конкретные ошибки возникают на этапе установления соединения.
5. Проверка необходимости GRE туннеля
GRE-туннель может не быть необходимым, если он не указан явным образом на удалённой стороне. Чтобы проверить, необходим ли GRE, попробуйте настроить VPN без него, как указано в вашей второй конфигурации, и следите за результатами. Вы также можете уточнить у администраторов удалённой стороны, требуется ли такой метод туннелирования.
6. Проблемы с состоянием соединения
Состояние соединения “ESTABLISHED” может сигнализировать о том, что первая фаза (IKE) прошла успешно, но проблемы возникают на уровне CHILD_SA, что может быть связано с несовпадением параметров шифрования или подсетей.
7. Валидность [SPECIFIED_INTERNAL_IP]
Необходимо выяснить, что именно представляет собой [SPECIFIED_INTERNAL_IP]. Обратитесь к администратору удаленной сети для прояснения, является ли это адресом конечного узла или представителем сети. Если это конечный узел, то добавьте его в блок rightsubnet
.
8. Возможные неудобства с интерпретацией спецификации
Важно четко понимать, что Cisco IOS спецификация может не охватывать все аспекты конфигурации. Например, обратите внимание на необходимость настройки NAT и правил доступа, если они используются на удалённой стороне.
Резюме
Настройка IPsec VPN требует внимательного подхода и тщательной проверки всех параметров конфигурации как на стороне strongSwan, так и на удалённой стороне. Предлагаемые шаги позволят вам выявить проблемы и повысить шансы на успешное установление VPN-соединения. Удачи в ваших усилиях, и если возникают дополнительные вопросы – не стесняйтесь задавать их!