Всем доброго времени суток!
Настраивая 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, пока не могу понять, да и вручную пока ничего не получается.
IPSEC два прова и проблемы
Модераторы: SLEDopit, Модераторы разделов
-
McLeod095
- Сообщения: 477
- ОС: Люблю слаку
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
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
-
Postum
- Сообщения: 29
- ОС: GNU Linux
Re: IPSEC два прова и проблемы
Ничего, что с некоторым опозданием? Я не некромант, просто тему не заметил
Может, кому пригодится...
1. есть такой замечательный механизм - Dead Peer Detection (DPD, RFC3706), и ряд связанных с ним параметров (привожу default значения):
Подробнее - здесь
Если выставить 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'.
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 два прова и проблемы
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
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
-
Postum
- Сообщения: 29
- ОС: GNU Linux
Re: IPSEC два прова и проблемы
(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 два прова и проблемы
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
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
-
McLeod095
- Сообщения: 477
- ОС: Люблю слаку
Re: IPSEC два прова и проблемы
Сегодня появилось время и решил все таки поднять все это дело.
Вообщем начал с того на чем остановился до этого. Конфиги не менял кроме одного. СДЕЛАЛ РАЗНЫЕ ПАРОЛЬНЫЕ ФРАЗЫ НА КАЖДЫЙ IPSEC.
В итоге после плясок с бубном и т.п., вернее сказать что после того как все таки решил не усложнять схему, а просто проверить работоспособность имеющихся конфигов, все работает. Вот уже как 40 минут оно работает и все нормально.
Придется оставить на ночь и посмотреть что будет с утра.
Во всем этом я вижу только один недостаток.
В редхате конфигурационные файлы создаются автоматом, и удаляются тоже. То есть по команде ifup ipsec0 создается файл конфигурации для racoon который в свою очередь инклудится в racoon.conf и перечитывается демоном. Так вот. Со стороны где один провайдер все нормально, а вот со стороны где два провайдера не так все просто. При одном или двух ipsec одновременно работающих все будет замечательно, но вот если захочется опустить один то скрипт ifdown удалит строку include с файлом конфигурации из racoon.conf и после чего демон его перечитает. Хотя правила шифрования останутся. ААА не сказал всей соли, файлы которые создаются скриптами называются так $DST.conf, где $DST ip адрес назначения, и в случае с двумя ipsec к одному адресу назначения, но разными источниками на одной машине, превращаются в один.
Вообщем начал с того на чем остановился до этого. Конфиги не менял кроме одного. СДЕЛАЛ РАЗНЫЕ ПАРОЛЬНЫЕ ФРАЗЫ НА КАЖДЫЙ 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
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
-
McLeod095
- Сообщения: 477
- ОС: Люблю слаку
Re: IPSEC два прова и проблемы
Вообщем не помогло.
В итоге как решить проблему пока не знаю.
Довольно странно что работает только в начале, а через какое то время просто перестает работать. В логах ничего криминального.
Кому интересно могут попробовать повторить это с 3 виртуалками. Дома для тестов поднимал за 2 часа. Тоже самое.
В итоге как решить проблему пока не знаю.
Довольно странно что работает только в начале, а через какое то время просто перестает работать. В логах ничего криминального.
Кому интересно могут попробовать повторить это с 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
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch
-
Postum
- Сообщения: 29
- ОС: GNU Linux
Re: IPSEC два прова и проблемы
Так. Предлагаю еще раз, сначала. Для полноты картины:
1. Настройки ДО подъема каналов - ip route show table all
2. ifconfig ДО подъема каналов
3. настройки racoon
Напоминаю, что в ipsec при туннельном режиме адреса обеих сторон не могут меняться, т.к. находится в заголовках инкапсулированного пакета. При динамической смене адреса в таком случае пакет должен быть отвергнут как не соотв. SPD. Так что динамическая маршрутизация в такой конфигурации может быть неуместна.
(McLeod095) писал(а):В редхате конфигурационные файлы создаются автоматом, и удаляются тоже.
Такое поведение всегда можно заменить статическими настройками - к примеру, вот таким образом
...И ты поймешь: все то, чего нельзя –
Песчинка в том, что не запрещено...
Песчинка в том, что не запрещено...
© Ю. Лорес
-
McLeod095
- Сообщения: 477
- ОС: Люблю слаку
Re: IPSEC два прова и проблемы
Вообщем весело.
Сегодня по причине отказа основного канала связи между территориями надо было срочно поднять резервный через интернет.
Не буду рассказывать как поднимал, но в итоге просто настроил ipsec между двумя серверами и поверх прокинул gre. Все работает и сейчас. Но самое интересное в другом. Интересно как раз в том что на этих серверах я хотел как раз и поднять ту схему которую приводил выше. В данный момент работает просто один ipsec с настроенным source route. Так вот. Все работает отлично но пинги между двумя серверами не ходят. Я даже не знаю почему.
вот конфиги.
Сервер на котором нет source route
cat /etc/sysconfig/network-scripts/ifcfg-ipsec1
cat racoon.conf
cat xx.xx.xx.xx.conf
setkey -DP
Сервер на котором настроен source route, канал на котором работает ipsec не является каналом по умолчанию. До этого настраивал на основном канале, там также была такая проблема, тока ипы другие.
cat ifcfg-ipsec1
cat racoon.conf
cat yy.yy.yy.yy.conf
setkey -DP
периодически возникает такая вот ситуация
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 пинги шли нормально.
Сегодня по причине отказа основного канала связи между территориями надо было срочно поднять резервный через интернет.
Не буду рассказывать как поднимал, но в итоге просто настроил 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=PSKcat 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=2cat 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
New Work: E6400/3GB/Arch
Home Book: Asus W6k00A/Arch, Asus 701/Arch