Версия: Linux 2.6.22-vs2.2.0.7, ipsec-tools-0.7.1.
Допустим, у нас есть две подсети: 192.168.1.0/24 и 192.168.2.0/24. Шлюзы в них 192.168.1.1 и 192.168.2.1 соответственно. Допустим также, что маршрутизация между ними настроена.
Задачу поставим создать IPsec-туннель между этими сетями.
/etc/ipsec.conf:
#!/usr/sbin/setkey -f
flush;
spdflush;
spdadd 192.168.1.0/24 192.168.2.0/24 any -P out ipsec
esp/transport/192.168.1.1-192.168.2.1/require;
spdadd 192.168.2.0/24 192.168.1.0/24 any -P in ipsec
esp/transport/192.168.2.1-192.168.1.1/require;
/etc/racoon/racoon.conf:
log warning;
path pre_shared_key "/etc/racoon/psk.txt";
padding
{
maximum_length 20;
randomize off;
strict_check off;
exclusive_tail off;
}
listen
{
isakmp 192.168.1.1 [500];
}
timer
{
counter 5;
interval 20 sec;
persend 1;
phase1 90sec;
phase2 90sec;
}
remote 192.168.2.1
{
my_identifier address 192.168.1.1;
exchange_mode main;
initial_contact off;
lifetime time 28800 sec;
proposal {
encryption_algorithm des;
hash_algorithm md5;
authentication_method pre_shared_key;
dh_group 1;
}
}
sainfo address 192.168.1.0/24 any address 192.168.2.0/24 any
{
pfs_group 1;
ecnryption_algorithm des;
authentication_algorithm hmac_md5;
lifetime time 28800 sec;
compression_algorithm deflate;
}
/etc/racoon/psk.txt:
192.168.2.1 <укажите_здесь_выбранный_выми_пароль>
На втором сервере насройки почти такие же - меняются местами только адреса сетей: там, где указано 192.168.1.0 надо заменить на 192.168.2.0, и наоборот, 192.168.2.0 заменить на 192.168.1.0.
N.B. На обоих шлюзах должно быть разрешение соединяться другому шлюзу на 500 порт TCP.
Дискуссия
Что-то я не понял. 192.168.2.1 и 192.168.1.1 между собой как соединены?
В-принципе, чем угодно. Wi-Fi, кабель и пр. Главное, чтобы они могли видеть друг друга.
Надо понимать так, что между ними соединение точка-точка с интерфейсами без присвоения адресов, и это очень похоже на рассмотрение «сферически-коневой» ситуации: если покупается/прокладывается выделенная линия, это либо уже защищённый канал, либо там есть своя адресация.
В реальности типичная конфигурация другая: каждый маршрутизатор вторым интерфейсом включен в публичную сеть, и именно между этими интерфейсами идёт шифрование. Собственно говоря, все учебники такую ситуацию и описывают, только я не нашёл готового решения для используемого мной ныне дистрибутива Linux Debian.
Отнюдь. В моём случае между двумя шлюзами был интернет-провайдер с незащищённой локальной сетью. Поэтому и понадобилось шифрование - нам не надо, чтобы кто-нибудь мог вклиниться в наши пакеты.
В таком случае у каждого шлюза был и второй адрес. Тут уже возможны варианты: либо транспорт через реальные интерфейсы (раз уж они в одной подсети), либо завернуть пакеты в GRE и шифровать (опять же транспорт), либо завернуть в туннель. Эти тонкости в конфигурации очень даже стоило указать.
Похоже, у вас описан именно первый вариант (транспортный режим IPSec при прямом марщруте между хостами), но этот режим позволяет соседям увидеть структуру ваших внутренних сетей, а при желании - и вычислить машины для атаки.
Я свою задачу уже решил - там на «дальнем» конце было сделано в RedHat «тупо по how-to» в автоматическом режиме и в setkey устанавливались туннели не только esp, но и ah.