Введение:
Итак, у нас есть тунель - труба, по которой ходит наш трафик. По сути сейчас там только трафик между 2мя ИП адресами, но в дальнейшем может мы заходим что-то ещё? Я бы хотел думать, что это мой локальная сеть, что она защищена, что бы каждый раз не париться, защитил я тот или иной интерфейс или протокол. Потому будем шифровать всё, что попадает к нам с тунель - то есть шифранём всю трубу. Для шифрования будем использовать IPSec.
Реализация:
Давайте опять начнём с cisco:
Опишем клиента - а именно: пропишем ИП адрес клиента (YYY.YYY.YYY.YYY), пароль для соединения (P@SSw0rd), а так же для удобства присвоим клиенту имя (Akey). 
Так же создадим профиль (CAipsec) шифрования: где опишем клиента (CAisakmp) а так же создадим общий профиль, которым будем шифровать тунель (EXAMPLE).
Код: Выделить всё
crypto keyring Akey 
  pre-shared-key address YYY.YYY.YYY.YYY key 6 P@SSw0rd
!
crypto isakmp policy 10
 encr aes
 hash md5
 authentication pre-share
 group 2
!
crypto isakmp profile CAisakmp
   keyring Akey
   match identity address YYY.YYY.YYY.YYY  255.255.255.255 
!
crypto ipsec security-association lifetime seconds 28800
!
crypto ipsec transform-set EXAMPLE esp-aes esp-md5-hmac 
!
crypto ipsec profile CAipsec
 set transform-set EXAMPLE 
 set isakmp-profile CAisakmp
!
Теперь изменим наш тунель - приведём его к такому виду:
Код: Выделить всё
interface Tunnel3
 ip address 172.16.0.1 255.255.255.248
 ip mtu 1400
 tunnel source Dialer1
 tunnel destination 188.166.12.113
 tunnel protection ipsec profile CAipsec
Как видим тут добавился только профиль шифрования - всё остальное из предыдущего поста
Теперь перейдём на сервер - тут не всё так просто - как минимум надо будет пересобрать ядро со следующими опциями
Справедливости ради отмечу что у меня ядро собрано с опциями
Код: Выделить всё
device          crypto
options         IPSEC
options         IPSEC_FILTERTUNNEL
options         IPSEC_DEBUG
[/color]
После того как пересобрали и перегрузились поставим 
/usr/ports/security/ipsec-tools - я выбрал следующие параметры
Код: Выделить всё
                         ┌─────────────────────────── ipsec-tools-0.8.1_7 ──────────────────────────────┐
                         │ ┌──────────────────────────────────────────────────────────────────────────┐ │  
                         │ │ [ ] ADMINPORT  Enable Admin port                                         │ │  
                         │ │ [x] DEBUG      Build with debugging support                              │ │  
                         │ │ [ ] DOCS       Build and/or install documentation                        │ │  
                         │ │ [x] DPD        Dead Peer Detection                                       │ │  
                         │ │ [x] FRAG       IKE fragmentation payload support                         │ │  
                         │ │ [ ] GSSAPI     GSSAPI Security API support                               │ │  
                         │ │ [x] HYBRID     Hybrid, Xauth and Mode-cfg support                        │ │  
                         │ │ [ ] IDEA       IDEA encryption (patented)                                │ │  
                         │ │ [ ] IPV6       IPv6 protocol support                                     │ │  
                         │ │ [ ] LDAP       LDAP authentication (Xauth server)                        │ │  
                         │ │ [x] NATT       NAT-Traversal (kernel-patch required)                     │ │  
                         │ │ [ ] NATTF      require NAT-Traversal (fail without kernel-patch)         │ │  
                         │ │ [ ] PAM        PAM authentication (Xauth server)                         │ │  
                         │ │ [ ] RADIUS     Radius authentication (Xauth server)                      │ │  
                         │ │ [ ] RC5        RC5 encryption (patented)                                 │ │  
                         │ │ [ ] SAUNSPEC   Unspecified SA mode                                       │ │  
                         │ │ [x] STATS      Statistics logging function                               │ │  
                         │ └──────────────────────────────────────────────────────────────────────────┘ │  
                         ├──────────────────────────────────────────────────────────────────────────────┤  
                         │                       <  OK  >            <Cancel>                           │  
                         └──────────────────────────────────────────────────────────────────────────────┘  
                                                                                          
поставилось без проблем - переходим к настройкам. Давайте создадим файл 
/usr/local/etc/racoon/ipsec.conf следующего содержания
Код: Выделить всё
spdflush;
spdadd YYY.YYY.YYY.YYY/32  XXX.XXX.XXX.XXX/32 gre -P out ipsec esp/tunnel/YYY.YYY.YYY.YYY-XX.XXX.XXX.XXX/require;
spdadd XXX.XXX.XXX.XXX/32 YYY.YYY.YYY.YYY /32 gre -P in ipsec esp/tunnel/XXX.XXX.XXX.XXX-YYY.YYY.YYY.YYY/require;
Переходим в файл 
/etc/rc.conf добавим автозапуск этого дела, а так же сразу нашего racoon, что бы не возвращаться сюда несколько раз
Код: Выделить всё
ipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/ipsec.conf"
racoon_enable="YES"
racoon_flags="-f /usr/local/etc/racoon/racoon.conf"
racoon_flags="-l /var/log/racoon.log"
  
Ну и вернёмся обратно в директорию 
/usr/local/etc/racoon/ где создадим файлик ключей - это файл, где будет хранится IP адрес удалённой стороны и пароль для соединения. Так как в файле важная информация - сразу выставим права доступа на него
Содержимое файла следующее:
Между IP-адресом и паролем следует поставить либо пробел либо таб - несколько пробелов поставите и работать не будет
Тут же создаём файл 
racoon.conf содержимое которого я привожу полностью
Код: Выделить всё
path include "/usr/local/etc/racoon";
path pre_shared_key "/usr/local/etc/racoon/key.txt";
log debug2;
padding
{
maximum_length	20;
randomize	off;
strict_check	off;
exclusive_tail	off;
}
listen
{
isakmp YYY.YYY.YYY.YYY [500];
}
timer
{
counter 5;
interval 20 sec;
persend 1;
phase1 30 sec;
phase2 15 sec;
}
remote XXX.XXX.XXX.XXX [500]
{
    exchange_mode main,aggressive;
    doi             ipsec_doi;
    situation       identity_only;
    generate_policy off;
    proposal_check obey;
    my_identifier address YYY.YYY.YYY.YYY;
    peers_identifier address XXX.XXX.XXX.XXX;
    lifetime time 28800 sec;
    passive         off;    
    proposal 
	{
        encryption_algorithm aes;
        hash_algorithm md5;
        authentication_method pre_shared_key;
        lifetime time 28800 sec;
        dh_group 2;
        }
}
sainfo anonymous 
    {
    lifetime time 28800 sec;
    encryption_algorithm aes;
    authentication_algorithm hmac_md5;
    compression_algorithm deflate;
    }
Ну что тут сказать - следите что бы параметры были такие же как и на cisco. 
Если всё сделано верно, то тунель должен заработать, но помним про то, что его надо поднять - пустив по нему трафик - до этого момента любой дебаг будет молчать как рыба.
Код: Выделить всё
# ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1): 56 data bytes
64 bytes from 172.16.0.1: icmp_seq=0 ttl=255 time=66.467 ms
64 bytes from 172.16.0.1: icmp_seq=1 ttl=255 time=66.661 ms
Итак, трафик есть - посмотреть на сам тунель можно командой
Если тунеля нет - вы ничего не увитиде, а если есть - увидите 2 тунеля - туда и обратно
Циска же это покажет как один тунель
Теперь наше соединение защищено 
Траблешутинг:
1) Дебаг - на юниксе он включается в конфиге (на приведённом примере он включен с максимальной детализацией) а на cisco за это отвечает команда 
debug crypto isakmp
2) Внимательно относимся к параметрам - они должны совпадать с обеих сторон
3) У меня тунель не хотел подниматься, потому что у меня на cisco был уже другой линк с таким паролем (причём даже не работающий) - пришлось сменить пароль.