Создание IPSec over GRE туннеля на OpenBSD

Опубликовано – 02.08.2010

Оригинал:OSPF over GRE over IPSec with OpenBSD
Перевод:Сгибнев Михаил
v2010000100

 Очень простое и краткое руководство по настройке IPSec over GRE туннеля между OpenBSD и ScreenOS с передачей маршрутной информации между сетями по OSPF

 Опуская все околотеоретические разглогольствования, с которыми каждый желающий может ознакомиться в оригинальной статье, перейдем к сути вопроса.

 Давайте начнем с конфигурирования OpenBSD. Убедитесь, что в ядре включена функция маршрутизации пакетов и поддержка протокола GRE. Включить GRE можно задействовав специально для этого предназначенную переменную sysctl:

# sysctl net.inet.gre.allow=1

 Для того, чтобы изменения действовали и после перезагрузки, не забудьте добавить строку net.inet.gre.allow=1 в файл /etc/sysctl.conf.

 С маршрутизацией ситуация полностью аналогична:

# sysctl net.inet.ip.forwarding=1

 Для работы IPsec, возможно, вам придется включить поддержку протокола ESP:

sysctl net.inet.esp.enable=1

 Так же, нелишним будет отключить на время тестирования pf(4).

 Альтернативой полному отключению брандмауэра служат две простые команды, помещенные в /etc/pf.conf:

set skip on enc0
set skip on gre0

 Создаем GRE туннель:

# ifconfig gre0 create
# ifconfig gre0 tunnel myglobal.ip.addre.ss peerglobal.ip.addre.ss (outer header)
# ifconfig gre0 inet mygre.ip.addre.ss peergre.ip.addre.ss netmask 0xffffffff link0 up (inner header)

Пакеты между mygre.ip.addre.ss и peergre.ip.addre.ss будут инкапсулированы в GRE unicast с myglobal.ip.addre.ss и peerglobal.ip.addre.ss в качестве конечных точек. Учтите, что в данный момент никакого шифрования нет!

 Использование в OpenBSD нового демона ipsec.conf(5) намного облегчает настройку IPSec. В качестве политики мы выбираем «шифровать весь трафик между указанными конечными точками с данными внешними IP-адресами», а ввиду ограничений аппаратной платформы используются алгоритмы SHA1 и 3DES:

# vi /etc/ipsec.conf
mypeer = "peerglobal.ip.addre.ss"
me = "myglobal.ip.addre.ss"
mypassword = "password"

ike esp from $me to $mypeer peer $mypeer \
main auth hmac-sha1 enc 3des group modp1024 \
srcid $me/32 dstid $mypeer/32 \
psk $mypassword

 Запускаем isakmpd и указываем ему прочитать правила из файла /etc/ipsec.conf.

# isakmpd -K
# ipsecctl -f /etc/ipsec.conf

 Для того, чтобы наш героически поднятый туннель не упал после перезагрузки хоста, необходимо добавить в /etc/rc.conf.local следующие строки:

isakmpd_flags="-K"
ipsec=YES

 Проверить хождение зашифрованных пакетов можно командой:

# tcpdump -ni enc0

 Конфигурация NS 5GT практически повторяет настройки для OpenBSD.

set interface tunnel.1 zone untrust
set interface tunnel.1 ip mygre.ip.addre.ss/30 (inner header)
set interface tunnel.1 tunnel encap gre
set interface tunnel.1 tunnel local-if untrust dst-ip global.ip.addre.ss (outer GRE header, GRE endpoints)
set interface tunnel.1 tunnel keep-alive (optional, but useful to see GRE packet on the wire)
set ike gateway mypeer address peerglobal.ip.addre.ss main outgoing-interface "untrust" preshare password sec-level compatible
set vpn mypeer gateway jp proposal "nopfs-esp-3des-sha"
set vpn mypeer bind interface tunnel.1
set vpn mypeer proxy-id local-ip global.ip.addre.ss/32 remote-ip peerglobal.ip.adre.ss/32 ANY

 Обратите внимание на одну важную особенность: в OpenBSD туннели имеют p-t-p адреса /32, а в 5GT(впрочем, как и в Cisco IOS) используется сеть /30. Но работает же!

 Проверяем связь:

# ping peergre.ip.addre.ss
PING peergre.ip.addre.ss (peergre.ip.addre.ss): 56 data bytes
64 bytes from peergre.ip.addre.ss: icmp_seq=0 ttl=64 time=277.665 ms
...

 Окончательно убедимся в том, что трафик шифруется. Заманите пожалуйста vr0 на обозначение вашего внешнего интерфейса.

# ipsecctl -s all
FLOWS:
flow esp in from myglobal.ip.addre.ss to peerglobal.ip.addre.ss peer peerglobal.ip.addre.ss srcid myglobal.ip.addre.ss/32 dstid peerglobal.ip.addre.ss/32 type use
flow esp out from peerglobal.ip.addre.ss to myglobal.ip.addre.ss peer peerglobal.ip.addre.ss srcid peerglobal.ip.addre.ss/32 dstid myglobal.ip.addre.ss/32 type require

SAD:
esp tunnel from myglobal.ip.addre.ss to peerglobal.ip.addre.ss spi 0x1275cf8c auth hmac-sha1 enc aes
esp tunnel from peerglobal.ip.addre.ss to myglobal.ip.addre.ss spi 0x20eec763 auth hmac-sha1 enc aes

# tcpdump -tni vr0 -c 10
tcpdump: listening on vr0, link-type EN10MB
esp myglobal.ip.addre.ss > peerglobal.ip.addre.ss spi 0x61a862f2 seq 45586 len 372
esp peerglobal.ip.addre.ss > myglobal.ip.addre.ss spi 0x84cd621d seq 45973 len 132

 После того, как заработал наш туннель, настроим OSPF. Не забудьте заменить vr1 на обозначение вашего внутреннего интерфейса.

# vi /etc/ospfd.conf
password="mypassword"
auth-md 1 $password
auth-type crypt
auth-md-keyid 1
area 0.0.0.0 {
interface gre0 { }
interface vr1 { passive }
}

 Запускаем ospfd(8) в режиме отладки:

# ospfd -dv

 Выполняем ответные действия на 5GT:

set vr trust-vr protocol ospf enable
set interface tunnel.1 protocol ospf area 0.0.0.0
set interface tunnel.1 protocol ospf authentication md5 mypassword key-id 1
set interface tunnel.1 protocol ospf authentication active-md5-key-id 1
set interface tunnel.1 protocol ospf enable
set interface trust protocol ospf area 0.0.0.0
set interface trust protocol ospf passive
set interface trust protocol ospf enable

 Проверяем, виден ли сосед по OSPF:

# ospfctl show neighbor
ID Pri State DeadTime Address Iface Uptime
peergre.ip.addre.ss 1 FULL/P2P 00:00:30 peergre.ip.addre.ss vr1 00:00:23

 Ну вот собственно и всё.

 Рекомендую почитать по данной теме:

OSPF over GRE over IPSec with OpenBSD

Setting up IPSec over GRE on OpenBSD

Configuring IPSec with x509 certificates on OpenBSD


[ad name=»Google Adsense»]



 Уважайте труд автора, сохраняйте копирайты.
Реклама на сайте висит не просто так и если статья Вам понравилась, с ее помощью Вы можете отблагодарить автора за проделанную работу. Спасибо!

2 комментария в Создание IPSec over GRE туннеля на OpenBSD

  1. Alex:

    На какой версии OpenBSD завелось? На 4.7 GRE что-то не пашет 🙂

  2. guru:

    в оригинальной статье есть косячок

    внимательно смотрим конфигурацию шифрования:
    «main auth hmac-sha1 enc 3des»
    и смотрим на вывод ipsecctl -s all
    «SAD:
    auth hmac-sha1 enc aes»

    ничего не смущает?
    правльно… япошка настроил ипсек в режиме quick а не main
    если особо не заморачиваться просто заменяется строчка в конфиге на
    «quick auth hmac-sha1 enc 3des group modp1024» и вот теперь будет 3des

    хотя я япошек не виню, с такими глазками тяжело наверно мануалу по ипсеку читать -_- сумимасе

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*