IPSEC два прова и проблемы

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

IPSEC два прова и проблемы

Сообщение McLeod095 »

Всем доброго времени суток!

Настраивая IPSEC решил также озадачиться и резервированием, и тут столкнулся с проблемой.
Есть два gw1 c CentOS5 на борту.
gw1
ip1 - 1.1.1.1
ip2 - 2.2.2.2

gw2
ip - 3.3.3.3

Связаны они через интернет, на gw1 настроен source route с помощью iproute2. Все работает нормально.
Решил между ними поднять IPSEC.
настройки на gw1
ipsec0
TYPE=IPSEC
DST=3.3.3.3
SRC=1.1.1.1
IKE_METHOD=PSK

ipsec1
TYPE=IPSEC
DST=3.3.3.3
SRC=2.2.2.2
IKE_METHOD=PSK

фразы прописал одинаковые.

настройка на gw2
ipsec0
TYPE=IPSEC
DST=1.1.1.1
SRC=3.3.3.3
IKE_METHOD=PSK

ipsec1
TYPE=IPSEC
DST=2.2.2.2
SRC=3.3.3.3
IKE_METHOD=PSK

После того как поднимаю ipsec перестают ходить пакеты между машинами.
При этом могут пропасть совсем, или частично только по одному каналу. Или полностью не ходят пакеты, или ходят но хаотично. В логах IPSEC ничего странного нет.
Я понимаю что скорее всего это связано с тем что на gw1 два ipsec имеют один и тот же DST, из-за чего скриптами создается один файл настроек для ipsec. Но как решить данную проблему штатными средствами CentOS, пока не могу понять, да и вручную пока ничего не получается.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Postum
Сообщения: 29
ОС: GNU Linux

Re: IPSEC два прова и проблемы

Сообщение Postum »

Ничего, что с некоторым опозданием? Я не некромант, просто тему не заметил ;) Может, кому пригодится...

1. есть такой замечательный механизм - Dead Peer Detection (DPD, RFC3706), и ряд связанных с ним параметров (привожу default значения):

Код: Выделить всё

dpddelay=30
dpdtimeout=120
dpdaction=hold


Подробнее - здесь

Если выставить dpdaction=clear, то после заданных dpddelay + dpdtimeout соединение будет объявлено dead и отключится (как по 'ipsec auto --down'). Что с этим делать дальше - возможны разные варианты.
Можно установить свой обработчик, в крон, к примеру, он можут проверять состояние соединения (ipsec auto --status | grep conn1) и при состоянии down стартовать второе соединение (ipsec auto --up conn2).
Еще есть параметр leftupdown, что позволяет переопределить для соединения скрипт _updown. Возможно, это как раз то, что нужно - не пробовал.

2. есть ли необходимость в разных ipsec-интерфейсах (ipsec0, ipsec1)? Они что, привязаны к разным физ. интерфейсам? С одним интерфейсом наружу и с несколькими подобным образом резервированными каналами у меня проблем не было.
Чаще всего проблема в маршрутизации и/или в firewall. Берем в руки tcpdump, после подъема каналов пытаемся одновременно смотреть, куда идут пакеты, и одновременно - 'ipsec --auto --status' и 'ip route'.
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
© Ю. Лорес
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: IPSEC два прова и проблемы

Сообщение McLeod095 »

Postum писал(а):
19.03.2010 00:13
Ничего, что с некоторым опозданием? Я не некромант, просто тему не заметил ;) Может, кому пригодится...

1. есть такой замечательный механизм - Dead Peer Detection (DPD, RFC3706), и ряд связанных с ним параметров (привожу default значения):

Код: Выделить всё

dpddelay=30
dpdtimeout=120
dpdaction=hold


Подробнее - здесь

Если выставить dpdaction=clear, то после заданных dpddelay + dpdtimeout соединение будет объявлено dead и отключится (как по 'ipsec auto --down'). Что с этим делать дальше - возможны разные варианты.
Можно установить свой обработчик, в крон, к примеру, он можут проверять состояние соединения (ipsec auto --status | grep conn1) и при состоянии down стартовать второе соединение (ipsec auto --up conn2).
Еще есть параметр leftupdown, что позволяет переопределить для соединения скрипт _updown. Возможно, это как раз то, что нужно - не пробовал.

2. есть ли необходимость в разных ipsec-интерфейсах (ipsec0, ipsec1)? Они что, привязаны к разным физ. интерфейсам? С одним интерфейсом наружу и с несколькими подобным образом резервированными каналами у меня проблем не было.
Чаще всего проблема в маршрутизации и/или в firewall. Берем в руки tcpdump, после подъема каналов пытаемся одновременно смотреть, куда идут пакеты, и одновременно - 'ipsec --auto --status' и 'ip route'.



ОООО, спс!
Хотя скорее всего это и не поможет, но Вы первый человек который хотя бы попытался дать ответ, хотя такой же пост есть еще на двух форумах.

В редхате и им подобных дистров используется racoon.
Два интерфейса необходимы, во всяком случае по другому я не вижу решения.
Вообще если не поднимать ipsec то все работает, и пакеты ходят от одного тазика к другому по всем каналам. Если поднять один ipsec то тоже ничего страшного не происходит. Все работает замечательно. Но вот если поднять сразу оба, то тут начинаются проблемы.
Два ipsec должны быть поднятыми обязательно, и переключение не подходит, т.к. поверх всего этого будет gre и ospf.

Спасибо еще раз за помощь.
Буду рад если будут новые идеи и т.п.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Postum
Сообщения: 29
ОС: GNU Linux

Re: IPSEC два прова и проблемы

Сообщение Postum »

(McLeod095) писал(а):В редхате и им подобных дистров используется racoon.


Не вижу проблем

Код: Выделить всё

man racoon

dpd_delay delay;
                     This option activates the DPD and sets the time (in seconds) allowed between 2 proof of liveliness requests. The default value is 0, which disables DPD monitoring, but still negotiates DPD support.

dpd_retry delay;
                     If dpd_delay is set, this sets the delay (in seconds) to wait for a proof of liveliness before considering it as failed and send another request.  The default value is 5.

dpd_maxfail number;
                     If dpd_delay is set, this sets the maximum number of liveliness proofs to request (without reply) before considering the peer is dead.  The default value is 5.


(McLeod095) писал(а):Два интерфейса необходимы, во всяком случае по другому я не вижу решения.


Не проблема.
С racoon, возможно, все это даже проще - маршруты не поднимаются автоматом, есть доп. параметры script ... phase1_up/script ... phase1_down.

И все-таки, обычно проблема - либо в SP (коих становится две), либо - в маршрутизации (маршрутов становится тоже два). В любом случае для решения недостаточно информации. Нужно понять желаемую топологию, нужно видеть (более-менее) реальные конфиги (racoon.conf, setkey.conf ) и маршрутизацию. В других случаях можно теоретизировать очень долго и бесполезно :-)
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
© Ю. Лорес
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: IPSEC два прова и проблемы

Сообщение McLeod095 »

Postum писал(а):
20.03.2010 11:24
(McLeod095) писал(а):В редхате и им подобных дистров используется racoon.


Не вижу проблем

Код: Выделить всё

man racoon

dpd_delay delay;
                     This option activates the DPD and sets the time (in seconds) allowed between 2 proof of liveliness requests. The default value is 0, which disables DPD monitoring, but still negotiates DPD support.

dpd_retry delay;
                     If dpd_delay is set, this sets the delay (in seconds) to wait for a proof of liveliness before considering it as failed and send another request.  The default value is 5.

dpd_maxfail number;
                     If dpd_delay is set, this sets the maximum number of liveliness proofs to request (without reply) before considering the peer is dead.  The default value is 5.


(McLeod095) писал(а):Два интерфейса необходимы, во всяком случае по другому я не вижу решения.


Не проблема.
С racoon, возможно, все это даже проще - маршруты не поднимаются автоматом, есть доп. параметры script ... phase1_up/script ... phase1_down.

И все-таки, обычно проблема - либо в SP (коих становится две), либо - в маршрутизации (маршрутов становится тоже два). В любом случае для решения недостаточно информации. Нужно понять желаемую топологию, нужно видеть (более-менее) реальные конфиги (racoon.conf, setkey.conf ) и маршрутизацию. В других случаях можно теоретизировать очень долго и бесполезно :-)


Как будет немного свободного времени, то тут же выложу конфиги.
Ну а схема примерно такая (если конечно форум не съест пробелы)

eth0 -------------------------
GW1_______________________ Internet ------------------------- eth0 GW2
eth1 -------------------------
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: IPSEC два прова и проблемы

Сообщение McLeod095 »

Сегодня появилось время и решил все таки поднять все это дело.
Вообщем начал с того на чем остановился до этого. Конфиги не менял кроме одного. СДЕЛАЛ РАЗНЫЕ ПАРОЛЬНЫЕ ФРАЗЫ НА КАЖДЫЙ IPSEC.
В итоге после плясок с бубном и т.п., вернее сказать что после того как все таки решил не усложнять схему, а просто проверить работоспособность имеющихся конфигов, все работает. Вот уже как 40 минут оно работает и все нормально.
Придется оставить на ночь и посмотреть что будет с утра.
Во всем этом я вижу только один недостаток.
В редхате конфигурационные файлы создаются автоматом, и удаляются тоже. То есть по команде ifup ipsec0 создается файл конфигурации для racoon который в свою очередь инклудится в racoon.conf и перечитывается демоном. Так вот. Со стороны где один провайдер все нормально, а вот со стороны где два провайдера не так все просто. При одном или двух ipsec одновременно работающих все будет замечательно, но вот если захочется опустить один то скрипт ifdown удалит строку include с файлом конфигурации из racoon.conf и после чего демон его перечитает. Хотя правила шифрования останутся. ААА не сказал всей соли, файлы которые создаются скриптами называются так $DST.conf, где $DST ip адрес назначения, и в случае с двумя ipsec к одному адресу назначения, но разными источниками на одной машине, превращаются в один.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: IPSEC два прова и проблемы

Сообщение McLeod095 »

Вообщем не помогло.
В итоге как решить проблему пока не знаю.
Довольно странно что работает только в начале, а через какое то время просто перестает работать. В логах ничего криминального.
Кому интересно могут попробовать повторить это с 3 виртуалками. Дома для тестов поднимал за 2 часа. Тоже самое.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали:
Postum
Сообщения: 29
ОС: GNU Linux

Re: IPSEC два прова и проблемы

Сообщение Postum »

McLeod095 писал(а):
09.03.2010 11:02
Связаны они через интернет, на gw1 настроен source route с помощью iproute2. Все работает нормально.


Так. Предлагаю еще раз, сначала. Для полноты картины:
1. Настройки ДО подъема каналов - ip route show table all
2. ifconfig ДО подъема каналов
3. настройки racoon

Напоминаю, что в ipsec при туннельном режиме адреса обеих сторон не могут меняться, т.к. находится в заголовках инкапсулированного пакета. При динамической смене адреса в таком случае пакет должен быть отвергнут как не соотв. SPD. Так что динамическая маршрутизация в такой конфигурации может быть неуместна.

(McLeod095) писал(а):В редхате конфигурационные файлы создаются автоматом, и удаляются тоже.


Такое поведение всегда можно заменить статическими настройками - к примеру, вот таким образом
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
© Ю. Лорес
Спасибо сказали:
Аватара пользователя
McLeod095
Сообщения: 477
ОС: Люблю слаку

Re: IPSEC два прова и проблемы

Сообщение McLeod095 »

Вообщем весело.
Сегодня по причине отказа основного канала связи между территориями надо было срочно поднять резервный через интернет.
Не буду рассказывать как поднимал, но в итоге просто настроил ipsec между двумя серверами и поверх прокинул gre. Все работает и сейчас. Но самое интересное в другом. Интересно как раз в том что на этих серверах я хотел как раз и поднять ту схему которую приводил выше. В данный момент работает просто один ipsec с настроенным source route. Так вот. Все работает отлично но пинги между двумя серверами не ходят. Я даже не знаю почему.
вот конфиги.
Сервер на котором нет source route

cat /etc/sysconfig/network-scripts/ifcfg-ipsec1

Код: Выделить всё

ONBOOT=no
TYPE=IPSEC
DST=xx.xx.xx.xx
SRC=yy.yy.yy.yy
AH_PROTO=sha1
ESP_PROTO=3des
IKE_DHGROUP=2
IKE_METHOD=PSK

cat racoon.conf

Код: Выделить всё

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

listen {
    isakmp    yy.yy.yy.yy;
    adminsock    disabled;
}

sainfo anonymous
{
    pfs_group 2;
    lifetime time 1 hour;
    encryption_algorithm 3des, blowfish 448, rijndael;
    authentication_algorithm hmac_sha1, hmac_md5;
    compression_algorithm deflate;
}
include "/etc/racoon/xx.xx.xx.xx.conf";

cat xx.xx.xx.xx.conf

Код: Выделить всё

remote xx.xx.xx.xx
{
    exchange_mode aggressive, main;
    my_identifier address;
    proposal {
            encryption_algorithm 3des;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group 2;
    }
}

setkey -DP

Код: Выделить всё

xx.xx.xx.xx[any] yy.yy.yy.yy[any] any
    in prio def ipsec
    esp/transport//require
    ah/transport//require
    created: Apr  8 14:09:05 2010  lastused: Apr  8 14:13:53 2010
    lifetime: 0(s) validtime: 0(s)
    spid=7680 seq=6 pid=24898
    refcnt=1
yy.yy.yy.yy[any] xx.xx.xx.xx[any] any
    out prio def ipsec
    esp/transport//require
    ah/transport//require
    created: Apr  8 14:09:05 2010  lastused: Apr  8 15:13:55 2010
    lifetime: 0(s) validtime: 0(s)
    spid=7673 seq=5 pid=24898
    refcnt=4
xx.xx.xx.xx[any] yy.yy.yy.yy[any] any
    fwd prio def ipsec
    esp/transport//require
    ah/transport//require
    created: Apr  8 14:09:05 2010  lastused: Apr  8 15:13:55 2010
    lifetime: 0(s) validtime: 0(s)
    spid=7690 seq=4 pid=24898
    refcnt=2

Сервер на котором настроен source route, канал на котором работает ipsec не является каналом по умолчанию. До этого настраивал на основном канале, там также была такая проблема, тока ипы другие.
cat ifcfg-ipsec1

Код: Выделить всё

ONBOOT=no
TYPE=IPSEC
DST=yy.yy.yy.yy
SRC=xx.xx.xx.xx
ESP_PROTO=3des
AH_PROTO=sha1
IKE_DHGROUP=2
IKE_METHOD=2

cat racoon.conf

Код: Выделить всё

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

listen {
    isakmp    xx.xx.xx.xx;
    isakmp    zz.zz.zz.zz; # Основной канал
    adminsock    disabled;
}

sainfo anonymous
{
    pfs_group 2;
    lifetime time 1 hour;
    encryption_algorithm 3des, blowfish 448, rijndael;
    authentication_algorithm hmac_sha1, hmac_md5;
    compression_algorithm deflate;
}
include "/etc/racoon/yy.yy.yy.yy.conf";

cat yy.yy.yy.yy.conf

Код: Выделить всё

remote yy.yy.yy.yy
{
    exchange_mode aggressive, main;
    my_identifier address;
    proposal {
            encryption_algorithm 3des;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group 2;
    }
}

setkey -DP

Код: Выделить всё

yy.yy.yy.yy[any] xx.xx.xx.xx[any] any
    in prio def ipsec
    esp/transport//require
    ah/transport//require
    created: Apr  8 14:09:10 2010  lastused: Apr  8 14:09:38 2010
    lifetime: 0(s) validtime: 0(s)
    spid=3392 seq=6 pid=15677
    refcnt=1
xx.xx.xx.xx[any] yy.yy.yy.yy[any] any
    out prio def ipsec
    esp/transport//require
    ah/transport//require
    created: Apr  8 14:09:10 2010  lastused: Apr  8 15:20:35 2010
    lifetime: 0(s) validtime: 0(s)
    spid=3385 seq=5 pid=15677
    refcnt=2
yy.yy.yy.yy[any] xx.xx.xx.xx[any] any
    fwd prio def ipsec
    esp/transport//require
    ah/transport//require
    created: Apr  8 14:09:10 2010  lastused: Apr  8 15:20:36 2010
    lifetime: 0(s) validtime: 0(s)
    spid=3402 seq=4 pid=15677
    refcnt=2



периодически возникает такая вот ситуация
ping xx.xx.xx.xx
PING xx.xx.xx.xx (xx.xx.xx.xx) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted

--- xx.xx.xx.xx ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2000ms

Вернее даже не периодически а через какое то время использования ipsec.
С другой стороны тоже самое. Хотя после поднятия ipsec пинги шли нормально.
"Work PC" E6750/2GB/Asus P5B Deluxe/2x250GB/6600GT 128/Slackware Current (Win 2003 in VmWare)
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
Спасибо сказали: