Версия: 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.