Для настройки каналов IPsec требуется:
Непосредственно работа с IPsec в ядрах 2.6.x осуществляется на уровне самого ядра, заполнение таблиц SPD и SAD, а также реализация IKE осуществляются дополнительными утилитами. IPsec-Tools (пакет ipsec-tools
) - один из возможных наборов утилит, включающий в себя утилиту для работы с таблицами SAD и SPD setkey
и демон обмена ключами по протоколу IKE racoon
.
Рассмотрим сеть вида
Gateway1 {192.168.0.0/24} <-> 192.168.0.254 Gateway2 172.16.0.1 < ...... > 172.31.255.1 10.0.0.254 <-> {10.0.0.0/24}
Пусть требуется обеспечить туннель IPsec между хостами Gateway1 и Gateway2 для обеспечения связи
сетей 192.168.0.0/24 и 10.0.0.0/24. Внешние IP шлюзов известны и не меняются.
Для создания туннеля IPsec требуется два SA, для передачи трафика в каждую из сторон. Таблица SPD заполняется с помощью утилиты setkey, описания политик хранятся в /etc/racoon/setkey.conf. Описание политик на Gateway1 (/etc/racoon/setkey.conf):
# /usr/sbin/setkey -f # # Flush SAD and SPD flush; spdflush; # Create policies for racoon spdadd 192.168.0.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.0.1-172.31.255.1/require; spdadd 10.0.0.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/172.31.255.1-172.16.0.1/require;
Для Gateway2 описание политик зеркальное:
spdadd 10.0.0.0/24 192.168.0.0/24 any -P out ipsec esp/tunnel/172.31.255.1-172.16.0.1/require; spdadd 192.168.0.0/24 10.0.0.0/24 any -P in ipsec esp/tunnel/172.16.0.1-172.31.255.1/require;
Содержимое файла /etc/racoon/setkey.conf загружается в SPD при запуске/перезапуске сервиса racoon. Просмотреть текущее содержание SPD можно командами 'setkey -DP
' или 'ip xfrm policy
'. Политики для проходящих через шлюз пакетов (-P fwd) setkey добавляет самостоятельно.
Минимальная конфигурация racoon (/etc/racoon/racoon.conf):
# File with key ID/key pairs, for pre-shared key authentication. path pre_shared_key "/etc/racoon/psk.txt"; # "log" specifies logging level. It is followed by either "notify", "debug" or "debug2". log notify; # "padding" defines some padding parameters. You should not touch these. padding { maximum_length 20; # maximum padding length. randomize off; # enable randomize length. strict_check off; # enable strict check. exclusive_tail off; # extract last one octet. } # Specify various default timers. timer { # These value can be changed per remote node. counter 5; # maximum trying count to send. interval 20 sec; # maximum interval to resend. persend 1; # the number of packets per send. # maximum time to wait for completing each phase. phase1 30 sec; phase2 15 sec; } # if no listen directive is specified, racoon will listen on all # available interface addresses. listen { isakmp 172.16.0.1 [500]; # IP [port] for ISAKMP protocol # isakmp_natt 172.16.0.1 [4500]; # IP [port] for NAT-T protocol strict_address; # requires that all addresses must be bound. } remote 172.31.255.1 { exchange_mode main; # nat_traversal on; proposal { encryption_algorithm 3des; hash_algorithm md5; authentication_method pre_shared_key; dh_group modp1024; } } sainfo address 192.168.0.0/24 any address 10.0.0.0/24 any { pfs_group modp1024; lifetime time 30 min; encryption_algorithm 3des; authentication_algorithm hmac_md5; compression_algorithm deflate; }
Для Gateway конфигурация racoon аналогична, за исключением адреса внешнего интерфейса в listen и секций remote и sainfo:
remote 172.0.0.1 { exchange_mode main; # nat_traversal on; proposal { encryption_algorithm aes; hash_algorithm md5; authentication_method pre_shared_key; dh_group modp1024; } } sainfo address 10.0.0.0/24 any address 192.168.0.0/24 any { pfs_group modp1024; lifetime time 30 min; encryption_algorithm aes; authentication_algorithm hmac_md5; compression_algorithm deflate; }
Выбираемые алгоритмы должны быть одинаковыми для обоих сторон туннелей. От выбора алгоритма encryption_algorithm зависит скорость получаемого канала, наилучший выбор - AES. Выбор, например, 3DES приведёт к существенному (в разы) падению скорости соединения.
В /etc/racoon/psk.txt хранятся пары ID/ключ для хостов,
# file for pre-shared keys used for IKE authentication # format is: 'identifier' 'key' # For example: # # IPv4/v6 addresses # 10.160.94.3 mekmitasdigoat # 172.16.1.133 mekmitasdigoat # 192.168.55.1 whatcertificatereally # 3ffe:501:410:ffff:200:86ff:fe05:80fa mekmitasdigoat # 3ffe:501:410:ffff:210:4bff:fea2:8baa mekmitasdigoat # USER_FQDN # foo@www.example.com micropachycephalosaurus # FQDN # www.example.com 12345 172.31.255.1 some_output_of_pwgen
На Gateway используется тот же ключ, с IP Gateway1 в качестве идентификатора.
После запуска racoon (chkconfig racoon –add && chkconfig racoon on && service racoon start
) вносятся записи в SPD и начинает работу демон racoon. Обмен ключами и создание записей в SAD инициируется при появлении трафика, который согласно SPD должен обрабатываться через IPsec.
При этом пакеты из 192.168.0.0/24, предназначающиеся для 10.0.0.0/24, должны согласно правилам маршрутизации уходить с 172.16.0.1, и не обрабатываться SNAT на шлюзе Gateway1. (Т.е., надо помнить, что IPsec пришёл в IPv4 из IPv6, где NAT не нужен).
После появления необходимости в создании записи в SAD racoon запускает процесс обмена ключами, при успешном завершении которого в syslog должны появится записи вида
Oct 24 15:29:46 gateway1 racoon: INFO: IPsec-SA established: ESP/Tunnel 17.31.255.1[0]->17.16.0.1[0] spi=125146770(0x7759692) Oct 24 15:29:46 gateway1 racoon: INFO: IPsec-SA established: ESP/Tunnel 17.16.0.1[0]->17.31.255.1[0] spi=3389063184(0xca010010)
При обращении со шлюза Gateway1 к хостам в сети 10.0.0.0/24 требуется, чтобы пакеты уходили со шлюза с IP 192.168.0.254. Т.е., требуется что-то вида
$ ping -I 192.168.0.254 10.0.0.100
В противном случае пакет не совпадёт с SPD и не будет обрабатываться IPsec.
При анализе трафика tcpdump показывает пакеты непосредственно на интерфейсе.
В случае запуска указанного выше ping команда
tcpdump -i reth0 -nv host 172.16.0.1 and host 172.31.255.1
tcpdump -i reth0 -nv host 10.0.0.100
Дата создания: 2010-10-24 21:44:11 (Фетисов Н. А. (naf))
Последнее изменение: 2010-10-24 21:45:16 (Фетисов Н. А. (naf))
Владелец: Фетисов Н. А. (naf)
Версия: 2 Все версии
Wiki::Admin Карта раздела Оглавление Изменения за сутки Изменения за неделю Изменения за месяц