Захотелось вставить свои 5коп. в тему поднятия шифрованых IPSEC'ом тунелей между CISCO роутерами и FreeBSD, потому как тема описывалась уже не один раз, но в большинстве статей встречались неточности которые иногда просто противоречили здравому смыслу.
Итак имеем:
1. Маршрутизатор Cisco 2801 с прошивкой c2801-advipservicesk9-mz.124-23.bin и реальным IP 1.1.1.1 2. Маршрутизатор FreeBSD 7.1 с установленым ipsec-tools-0.7.1 и реальным IP 2.2.2.2
1. Конфигурация на роутере Cisco:
Конфигурация тунеля описана в конфиге, единственное о чём упомяну, что режим работы тунеля настраиваем IP-in-IP, что во FreeBSD реализовано через gif-тунели. Определившись с тем какие алгоритмы шифрования трафика и хэширования секретного ключа будут использоваться, описываем политику (isakmp policy), секретный ключ (isakmp key) и трансформ (ipsec transform-set), затем создаём список доступа (access-list), в котором указываем какой трафик нам необходимо шифровать и карту шифрования (map) которая будет всё это использовать. Ну и на закуску привязываем карту к интерфейсу.
crypto isakmp policy 1 encr aes authentication pre-share group 2 lifetime 3600 crypto isakmp key SECRETKEY address 2.2.2.2 ! ! crypto ipsec transform-set AES-SHA1 esp-aes esp-sha-hmac ! ! crypto map CENTRAL 1 ipsec-isakmp set peer 2.2.2.2 set transform-set AES-SHA1 set pfs group2 match address 101 ! access-list 101 permit ipinip host 1.1.1.1 host 2.2.2.2 ! interface Tunnel0 ip address 10.10.10.253 255.255.255.252 ip mtu 1280 tunnel source 1.1.1.1 tunnel destination 2.2.2.2 tunnel mode ipip ! interface FastEthernet0/0 ip address 1.1.1.1 255.255.255.252 duplex auto speed auto crypto map CENTRAL !
2. Конфигурация на ротере с FreeBSD:
Описывать конфигурацию ядра для gif-тунелей и IPSEC'а не буду, так как тема уже избитая (для тех кто не в теме - загляните в HandBook в конце концов!)
rc.conf:
ifconfig_age0="inet 2.2.2.2 netmask 255.255.255.252"
gif_interfaces="gif0" gifconfig_gif0="2.2.2.2 1.1.1.1" ifconfig_gif0="inet 10.10.10.254 10.10.10.253 netmask 255.255.255.252 mtu 1280"
ipsec_enable="YES" ipsec_file="/usr/local/etc/racoon/ipsec.conf" racoon_enable="YES" racoon_flags="-l /var/log/racoon.log"
racoon.conf:
path pre_shared_key "/usr/local/etc/racoon/psk.txt"; log info; padding { maximum_length 20; randomize off; strict_check off; exclusive_tail off; }
timer { counter 5; interval 20 sec; persend 1; phase1 30 sec; phase2 15 sec; }
listen { isakmp 2.2.2.2 [500]; }
remote 1.1.1.1 [500] { exchange_mode main; doi ipsec_doi; situation identity_only; lifetime time 1 hour; nonce_size 16; initial_contact on; support_proxy on; proposal_check obey; proposal { encryption_algorithm aes; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 2; } }
sainfo anonymous { pfs_group 2; lifetime time 1 hour; encryption_algorithm aes; authentication_algorithm hmac_sha1; compression_algorithm deflate; }
psk.txt:
1.1.1.1 SECRETKEY
ipsec.conf:
flush; spdflush;
spdadd 2.2.2.2/32 1.1.1.1/32 ipencap -P out ipsec esp/tunnel/2.2.2.2-1.1.1.1/require; spdadd 1.1.1.1/32 2.2.2.2/32 ipencap -P in ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;
Заметим что шифруется только инкапсулированый IP-in-IP трафик, то есть если вдруг возникнут сбои с согласованием шифрования, а возможность того что с первого раза может и не получится всё-таки есть, достучаться до роутера по SSH на реальный IP у вас получится ;)
Ссылки:
http://www.cisco.com/en/US/docs/ios/12_3t/12_3t14/feature/guide/gtIPSctm.html http://www.freebsd.org/doc/en/books/handbook/ipsec.html
Хотелось бы поблагодарить mik с unix.org.ua за ответы на форуме, ещё раз огромное спасибо :)
|