Устранение неполадок IPsec VPN между strongSwan (Ubuntu) и удаленной конечной точкой – требуется помощь в настройке.

Вопрос или проблема

Я пытаюсь настроить 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, ...

Вопросы:

  1. Учитывая неопределенности в конфигурации удаленной конечной точки, какие изменения я должен внести в свою конфигурацию strongSwan, чтобы повысить вероятность совместимости?
  2. Как я могу включить PFS в этой версии strongSwan, чтобы соответствовать настройке set pfs group5 в предоставленной спецификации?
  3. Есть ли известные проблемы с strongSwan 5.9.5 и старыми VPN конечными точками, о которых мне следует знать?
  4. Стоит ли мне рассмотреть использование другой версии strongSwan? Если да, то какой?
  5. Какие дополнительные шаги по отладке или команды мне следует выполнить, чтобы собрать больше информации о том, почему соединение не удается установить?
  6. Учитывая неопределенность в необходимости GRE туннеля, как мне определить, необходим он или нет, и проверить, правильно ли он настроен, если это необходимо?
  7. Вывод ipsec statusall показывает соединение как УСТАНОВЛЕННОЕ, но я все равно получаю ошибки. Что может быть причиной этого несоответствия?
  8. Как я могу проверить, действительно ли [SPECIFIED_INTERNAL_IP], упомянутый в предоставленной спецификации, имеет отношение к моей настройке, и если да, то как мне следует включить его в свою конфигурацию?
  9. Есть ли потенциальные ошибки конфигурации или недоразумения в том, как я интерпретирую предоставленную спецификацию 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-соединения. Удачи в ваших усилиях, и если возникают дополнительные вопросы – не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...