Настройка site-to-site vpn с помощью туннеля ipsec между Microsoft Forefront TMG и Racoon (linux) с использованием pre-shared ключа иногда вызывает затруднения. Хочу поделиться своим опытом настройки подобного туннеля.
В этой статье будет рассмотрена только настройка linux-стороны туннеля, на стороне Forefront TMG достаточно выполнить стандартные шаги по настройке туннеля ipsec, указав в качестве алгоритма шифрования в обоих фазах 3DES, и хеш-алгоритм SHA1.
Я использовал операционную систему Gentoo (gentoo-sources-3.6.11, ipsec-tools-0.8.0-r5).
Для работы пакет ipsec-tools требует включить в ядре следующие опции (во время установки производится проверка):
[*] Networking support ---> Networking options ---> < *> Transformation user configuration interface < *> PF_KEY sockets [*] TCP/IP networking [*] IP: AH transformation [*] IP: ESP transformation [*] IP: IPComp transformation [*] IP: IPsec transport mode [*] IP: IPsec tunnel mode [*] IP: IPsec BEET mode [*] Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration ---> < *> IPsec "policy" match support
-*- Cryptographic API ---> < *> Null algorithms
Для настройки необходимо знать два IP адреса, между которыми будет установлено соединение и список внутренних подсетей, пакеты которых должны проходить через туннель.
Для определенности адреса, между которыми устанавливается туннель — xx1.xx1.xx1.xx1 (linux) и xx2.xx2.xx2.xx2 (TMG), внутренние подсети yya.yya.yya.yya/24, yyb.yyb.yyb.yyb/25, yyc.yyc.yyc.yyc/24, yyd.yyd.yyd.yyd/26. Подсети с инддексами yya и yyb находятся за адресом xx1.xx1.xx1.xx1, подсети с индексами yyc и yyd — за адресом xx2.xx2.xx2.xx2.
Так же необходимо задать какой-то pre-shared ключ для аутентификации Forefront TMG. Пусть ключем будет фраза $MyPreSharedKey$.
Настройку начнем с файла /etc/racoon/psk.txt, который содержит список pre-shared ключей (в нашем случае ключ один):
xx2.xx2.xx2.xx2 $MyPreSharedKey$
Следующий шаг — настройка файла /etc/racoon/racoon.conf, в котором находятся параметры туннеля:
# Путь до файла с pre-shared ключами path pre_shared_key "/etc/racoon/psk.txt"; # Задаем режим логирования log error; # Указываем адреса, на которых raoon должен ожидать соединения listen { isakmp xx1.xx1.xx1.xx1 [500]; isakmp_natt xx1.xx1.xx1.xx1 [4500]; } remote xx2.xx2.xx2.xx2 { exchange_mode main,aggressive; # разрешаем работу в режиме NAT traversal nat_traversal on; # отключаем автоматическую генерацию ACL generate_policy off; rekey on; # разрешаем фрагментацию IKE ike_frag on; proposal_check claim; # режим ожидания входящих соединений passive on; # область интерпретации doi ipsec_doi; # идентификатор linux сервера my_identifier address xx1.xx1.xx1.xx1; # идентификатор TMG сервера peers_identifier address xx2.xx2.xx2.xx2; verify_identifier on; # Параметры для первой фазы proposal { # алгоритм шифрования encryption_algorithm 3des; # алгоритм хеширования hash_algorithm sha1; # метод авторизации authentication_method pre_shared_key; # Diffie-Hellman группа (2 = 1024 бит) dh_group 2; lifetime time 28800 sec; } } sainfo anonymous { # Perfect Forward Secrecy (2 = 1024 бит) pfs_group 2; # алгоритм шифрования encryption_algorithm 3des; # алгоритм хеширования authentication_algorithm hmac_sha1; lifetime time 3600 sec; compression_algorithm deflate; }
Далее задаем список (ACL) подсетей, которые могут общаться через туннель. Файл /etc/ipsec-tools.conf:
#!/usr/sbin/setkey -f flush; spdflush; # Доступ yya.yya.yya.yya/24 -> yyc.yyc.yyc.yyc/24 spdadd yya.yya.yya.yya/24 yyc.yyc.yyc.yyc/24 any -P out ipsec esp/tunnel/xx1.xx1.xx1.xx1-xx2.xx2.xx2.xx2/unique; # Доступ yyc.yyc.yyc.yyc/24 -> yya.yya.yya.yya/24 (далее по аналогии) spdadd yyc.yyc.yyc.yyc/24 yya.yya.yya.yya/24 any -P in ipsec esp/tunnel/xx2.xx2.xx2.xx2-xx1.xx1.xx1.xx1/unique; spdadd yyb.yyb.yyb.yyb/25 yyc.yyc.yyc.yyc/24 any -P out ipsec esp/tunnel/xx1.xx1.xx1.xx1-xx2.xx2.xx2.xx2/unique; spdadd yyc.yyc.yyc.yyc/24 yyb.yyb.yyb.yyb/25 any -P in ipsec esp/tunnel/xx2.xx2.xx2.xx2-xx1.xx1.xx1.xx1/unique; spdadd yya.yya.yya.yya/24 yyd.yyd.yyd.yyd/26 any -P out ipsec esp/tunnel/xx1.xx1.xx1.xx1-xx2.xx2.xx2.xx2/unique; spdadd yyd.yyd.yyd.yyd/26 yya.yya.yya.yya/24 any -P in ipsec esp/tunnel/xx2.xx2.xx2.xx2-xx1.xx1.xx1.xx1/unique; spdadd yyb.yyb.yyb.yyb/25 yyd.yyd.yyd.yyd/26 any -P out ipsec esp/tunnel/xx1.xx1.xx1.xx1-xx2.xx2.xx2.xx2/unique; spdadd yyd.yyd.yyd.yyd/26 yyb.yyb.yyb.yyb/25 any -P in ipsec esp/tunnel/xx2.xx2.xx2.xx2-xx1.xx1.xx1.xx1/unique;
Racoon настроен, можно его запустить командой /etc/init.d/racoon start и туннель должен установиться (при наличии сконфигурированного Forefront TMG, конечно же).
Для успешной маршрутизации трафика между внутренними подсетями необходимо дополнительно задать маршуты, направляющие трафик, идущий в подсети за TMG, через реальный IP адрес, с которого установлен туннель (предполагается, что адрес xx1.xx1.xx1.xx1 находится на интерфейсе eth0):
ip r add yyc.yyc.yyc.yyc/24 dev eth0 src xx1.xx1.xx1.xx1 ip r add yyd.yyd.yyd.yyd/26 dev eth0 src xx1.xx1.xx1.xx1
А так же необходимо в iptables добавить правила:
*nat -A PREROUTING -s yya.yya.yya.yya/24 -d yyc.yyc.yyc.yyc/24 -j ACCEPT -A PREROUTING -s yyc.yyc.yyc.yyc/24 -d yya.yya.yya.yya/24 -j ACCEPT -A PREROUTING -s yyb.yyb.yyb.yyb/25 -d yyc.yyc.yyc.yyc/24 -j ACCEPT -A PREROUTING -s yyc.yyc.yyc.yyc/24 -d yyb.yyb.yyb.yyb/25 -j ACCEPT -A PREROUTING -s yya.yya.yya.yya/24 -d yyd.yyd.yyd.yyd/26 -j ACCEPT -A PREROUTING -s yyd.yyd.yyd.yyd/26 -d yya.yya.yya.yya/24 -j ACCEPT -A PREROUTING -s yyb.yyb.yyb.yyb/25 -d yyd.yyd.yyd.yyd/26 -j ACCEPT -A PREROUTING -s yyd.yyd.yyd.yyd/26 -d yyb.yyb.yyb.yyb/25 -j ACCEPT *filter -A FORWARD -s yya.yya.yya.yya/24 -d yyc.yyc.yyc.yyc/24 -j ACCEPT -A FORWARD -s yyc.yyc.yyc.yyc/24 -d yya.yya.yya.yya/24 -j ACCEPT -A FORWARD -s yyb.yyb.yyb.yyb/25 -d yyc.yyc.yyc.yyc/24 -j ACCEPT -A FORWARD -s yyc.yyc.yyc.yyc/24 -d yyb.yyb.yyb.yyb/25 -j ACCEPT -A FORWARD -s yya.yya.yya.yya/24 -d yyd.yyd.yyd.yyd/26 -j ACCEPT -A FORWARD -s yyd.yyd.yyd.yyd/26 -d yya.yya.yya.yya/24 -j ACCEPT -A FORWARD -s yyb.yyb.yyb.yyb/25 -d yyd.yyd.yyd.yyd/26 -j ACCEPT -A FORWARD -s yyd.yyd.yyd.yyd/26 -d yyb.yyb.yyb.yyb/25 -j ACCEPT
На этом настройку можно считать завершенной, туннель должен работать и пакеты между подсетями должны проходить.