IPSec (FreeBSD + Cisco) Lan-to-Lan

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
daggerok
мл. сержант
Сообщения: 109
Зарегистрирован: 2009-03-06 14:54:05

IPSec (FreeBSD + Cisco) Lan-to-Lan

Непрочитанное сообщение daggerok » 2010-05-31 18:47:44

Доброго времени суток, товарищи!
выручите пожалста.

строю ip-телефонию, у провайдера условие - обмен данными через IPSec. ну думаю ничего стращного, IPSec-ом уже объединял офисы - ничего сложного, но есть неболшое но

В общем у прова имеется Циска (не говорит какая), с которой нужно подружить мою фрю (IPSec должен быть lan-to-lan)
исходные данные:
1.1.1.1 - белый ip циски
111.111.111.44/30 - подсеть (белая), которую шифрует провайдер (в ней будет нужный мне proxy 111.111.111.46)

2.2.2.2 - мой белый ip
мне сказали сделать такую сеточку 172.30.128.32/30 - это сеть которую должен буду я шифровать со своей стороны, в которой будет находиться мой pbx

сконфигурил для всего этого дела гиф таким образом:

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

gifconfig_gif1="2.2.2.2 1.1.1.1 mtu 1500"
ifconfig_gif1="inet 172.30.128.32 netmask 255.255.255.252 111.111.111.44 netmask 255.255.255.252"
прописал маршрут:

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

static_routes="gw"
route_gw="111.111.111.44/30 -interface gif1"
саму сеточку поднял создав альяс на внутреннем интерфейсе:

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

ifconfig_sk0_alias9="inet 172.30.128.33 netmask 255.255.255.252"
в фаере прописал правила:

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

allow ip from any to any via gif1
allow udp from 1.1.1.1 to 2.2.2.2 dst-port 500
allow udp from 2.2.2.2 to 1.1.1.1 dst-port 500
allow esp from 1.1.1.1 to 2.2.2.2
allow esp from 2.2.2.2 to 1.1.1.1
allow ipencap from 1.1.1.1 to 2.2.2.2
allow ipencap from 2.2.2.2 to 1.1.1.1
racoon.conf такой:

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

# cat /usr/local/etc/racoon/racoon.conf | grep -v ^# | grep -v ^$
path include "/usr/local/etc/racoon" ;
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
log debug2;
padding
{
 maximum_length 20;
 randomize off;
 strict_check off;
 exclusive_tail off;
}
listen
{
 isakmp 1.1.1.1 [500];
 isakmp 3.3.3.3 [500];
}
timer
{
 counter 5;
 interval 20 sec;
 persend 1;
 phase1 30 sec;
 phase2 15 sec;
}
remote anonymous
{
 exchange_mode main,aggressive;
 doi ipsec_doi;
 situation identity_only;
 my_identifier address;
 lifetime time 86400 sec;
 initial_contact on;
 proposal_check obey;
 proposal {
  encryption_algorithm 3des;
  hash_algorithm sha1;
  authentication_method pre_shared_key;
  lifetime time 86400 sec;
  dh_group 2;
 }
}
sainfo anonymous
{
 pfs_group 2;
 lifetime time 86400 sec;
 encryption_algorithm 3des;
 authentication_algorithm hmac_sha1;
 compression_algorithm deflate;
}
ну и маршруты:

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

# netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
...
1.1.1.1      2.2.2.1     UGHS        0       19    rl0
111.111.111.44      172.30.128.32      UH          0        0   gif1 =>
111.111.111.44/30   gif1               US          0        7   gif1
при простых пингах ваще прикол:

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

# ping 111.111.111.46
...
# tcpdump -i gif1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif1, link-type NULL (BSD loopback), capture size 96 bytes
18:41:14.663569 IP 172.30.128.32 > 111.111.111.46: ICMP echo request, id 30511, seq 0, length 64
18:41:15.704604 IP 172.30.128.32 > 111.111.111.46: ICMP echo request, id 30511, seq 1, length 64
18:41:16.745982 IP 172.30.128.32 > 111.111.111.46: ICMP echo request, id 30511, seq 2, length 64
т.е. пакеты шлются от адреса сетки (172.30.128.32) а не адреса альяса моего устройства (172.30.128.33)

когда же указываю источник пинга то видно что пакеты идут уже от кого надо, но только результата это не дает, все остальное - как и прежде - не работает:

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

# ping 111.111.111.46
...
# tcpdump -i gif1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif1, link-type NULL (BSD loopback), capture size 96 bytes
18:44:48.019392 IP 172.30.128.33 > 212.58.166.46: ICMP echo request, id 39983, seq 0, length 64
18:44:49.060037 IP 172.30.128.33 > 212.58.166.46: ICMP echo request, id 39983, seq 1, length 64
кто-то дружил циску с фрей lan-to-lan?? была ли у кого-нить похожая задача? выручайте, так как у самого голова не варит уже. ткните мнея - где я ошибся.

заранее спасибо!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

daggerok
мл. сержант
Сообщения: 109
Зарегистрирован: 2009-03-06 14:54:05

Re: IPSec (FreeBSD + Cisco) Lan-to-Lan

Непрочитанное сообщение daggerok » 2010-05-31 18:56:16

чет не могу отредактировать первую мессагу
в последнем коде ошибся чуток (не изменил реальный ип на 111.111.111.46 =))

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

# ping 111.111.111.46
...
# tcpdump -i gif1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gif1, link-type NULL (BSD loopback), capture size 96 bytes
18:44:48.019392 IP 172.30.128.33 > 111.111.111.46: ICMP echo request, id 39983, seq 0, length 64
18:44:49.060037 IP 172.30.128.33 > 111.111.111.46: ICMP echo request, id 39983, seq 1, length 64
файл паролей имеет вид

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

1.1.1.1 password
файл ipsec.conf:

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

# cat /etc/ipsec.conf
flush;
spdflush;
spdadd 172.30.128.32/30 111.111.111.44/30 ipencap -P out ipsec esp/tunnel/2.2.2.2-1.1.1.1/require;
spdadd 111.111.111.44/30 172.30.128.32/30 ipencap -P in ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;

daggerok
мл. сержант
Сообщения: 109
Зарегистрирован: 2009-03-06 14:54:05

Re: IPSec (FreeBSD + Cisco) Lan-to-Lan

Непрочитанное сообщение daggerok » 2010-05-31 21:27:07

еще забыл:

uname:

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

# uname -sr
FreeBSD 7.1-RELEASE
ядро собрано с:

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

device          crypto
options         IPSEC
racoon собран с такими опциями:

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

# cat /var/db/ports/ipsec-tools/options
# This file is auto-generated by 'make config'.
# No user-servicable parts inside!
# Options for ipsec-tools-0.7.3
_OPTIONS_READ=ipsec-tools-0.7.3
WITH_DEBUG=true
WITHOUT_IPV6=true
WITHOUT_ADMINPORT=true
WITHOUT_STATS=true
WITH_DPD=true
WITHOUT_NATT=true
WITHOUT_NATTF=true
WITH_FRAG=true
WITHOUT_HYBRID=true
WITHOUT_PAM=true
WITHOUT_RADIUS=true
WITHOUT_LDAP=true
WITHOUT_GSSAPI=true
WITHOUT_SAUNSPEC=true
WITHOUT_RC5=true
WITHOUT_IDEA=true
up

daggerok
мл. сержант
Сообщения: 109
Зарегистрирован: 2009-03-06 14:54:05

Re: IPSec (FreeBSD + Cisco) Lan-to-Lan

Непрочитанное сообщение daggerok » 2010-06-01 11:10:47

всем спасибо за помощь. разобрался.
если кому надо будет - могу написать что не так было и что надо было сделать

Larin
лейтенант
Сообщения: 975
Зарегистрирован: 2008-01-29 20:08:41
Откуда: РБ, Минск

Re: IPSec (FreeBSD + Cisco) Lan-to-Lan

Непрочитанное сообщение Larin » 2010-06-01 12:10:49

отпишись в эту тему. а гугл поможет ее найти тем кто ищет.

daggerok
мл. сержант
Сообщения: 109
Зарегистрирован: 2009-03-06 14:54:05

Re: IPSec (FreeBSD + Cisco) Lan-to-Lan

Непрочитанное сообщение daggerok » 2010-06-01 13:19:06

провайдером были даны такие настройки:

1.1.1.1 - белый ip циски провайдера, детерминирующей IPSec
111.111.111.44/30 - белая сетка провайдера, которую он шифрует, и в которой находиться нужный мне sip-proxy
111.111.111.46 - sip-proxy провайдера

2.2.2.2 - белый ip моей фряхи, на которой крутиться racoon, который должен соединяться с провайдерской циской.
172.30.128.32/30 - сеточка, которую я должне буду шифровать, и в которой должен будет находиться мой pbx (так же была указана рповайдером)
2.2.2.121 - дефолт гетвей интернет канала, предназначенного для ip-телефонии, все остальное ходит по другому интернет каналу (тут не указанному)

ну и настройки по шифрованию (не указываю их, они прописаны в конфиге ракуна)

далее я поднимаю нужную сеточку, создав альяс на внутреннем интерфейсе фри. в /etc/rc.conf:

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

ifconfig_sk0_alias9="inet 172.30.128.33 netmask 255.255.255.252"
всякие гифы из rc.conf поуберал (вычитал, что должно хватать ipsec + racoon). из того что еще поменялось в /etc/rc.conf будет показано ниже.

заполняю файл паролей:

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

# cat /usr/local/etc/racoon/psk.txt
1.1.1.1 password
настраиваю ipsec:

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

# cat /etc/ipsec.conf
flush;
spdflush;
spdadd 172.30.128.32/30 111.111.111.44/30 any -P out ipsec esp/tunnel/2.2.2.2-1.1.1.1/require;
spdadd 111.111.111.44/30 172.30.128.32/30 any -P in ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;
тут изменения: вместо isakmp надо any

настраиваю ракун:

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

# cat /usr/local/etc/racoon/racoon.conf | grep -v ^# | grep -v ^$
path include "/usr/local/etc/racoon" ;
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
#log debug2;
padding
{
 maximum_length 20;
 randomize off;
 strict_check off;
 exclusive_tail off;
}
listen
{
 isakmp 2.2.2.2 [500];
}
timer
{
 counter 5;
 interval 20 sec;
 persend 1;
 phase1 30 sec;
 phase2 15 sec;
}
remote anonymous
{
 exchange_mode main,base
 lifetime time 86400 sec;
 proposal_check strict;
 proposal {
  encryption_algorithm 3des;
  hash_algorithm sha1;
  authentication_method pre_shared_key;
  dh_group 2;
 }
}
sainfo anonymous
{
 pfs_group 2;
 lifetime time 86400 sec;
 encryption_algorithm 3des;
 authentication_algorithm hmac_sha1;
 compression_algorithm deflate;
}
тут изменения в exchange_mode и proposal_check

так как ip-телефония должна ходит по отдельному каналу, то в /etc/rc.conf я прописал маршруты, которые заставят пакеты идущие на 1.1.1.1 и 111.111.111.44/30 идти через дефолт-гетвей интернет канала, выделенного спецально под ip-телефонию (2.2.2.121), так же прописал маршрут указывающий фре роутить пакеты идущие на прокси 111.111.111.46 через созданный альяс:

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

static_routes="provgw provnet provproxy"
route_provgw="-host 1.1.1.1 2.2.2.121"
route_provnet="-net 111.111.111.44/30 2.2.2.121"
route_provproxy="-host 111.111.111.46 172.30.128.33"
netstat такой:

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

netstat -rn | grep "1.1.1"
1.1.1.1      2.2.2.121     UGHS        0      378    rl0
111.111.111.44/30   2.2.2.121     UGS         0      350    rl0
111.111.111.46      172.30.128.33      UGHS        0       77    sk0
ну и фаервол тож немного другой, с учетом отсутствия gif-интерфейса и измененным ipsec.conf:
правила до ната:

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

allow udp from 1.1.1.1 to 2.2.2.2 dst-port 500
allow udp from 2.2.2.2 to 1.1.1.1 dst-port 500
allow esp from 1.1.1.1 to 2.2.2.2
allow esp from 2.2.2.2 to 1.1.1.1
правила после ната:

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

allow ip from 2.2.2.2 to 1.1.1.1
allow ip from 1.1.1.1 to 2.2.2.2
с такими конфигурациями все четко работает:

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

# ping 111.111.111.46
PING 111.111.111.46 (111.111.111.46): 56 data bytes
64 bytes from 111.111.111.46: icmp_seq=0 ttl=255 time=3.639 ms
64 bytes from 111.111.111.46: icmp_seq=1 ttl=255 time=3.640 ms
64 bytes from 111.111.111.46: icmp_seq=2 ttl=255 time=3.724 ms
^C
# tcpdump -i rl0 host 1.1.1.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on rl0, link-type EN10MB (Ethernet), capture size 96 bytes
13:17:12.133568 IP 2.2.2.2 > 1.1.1.1: ESP(spi=0xd72ff0ff,seq=0x126), length 116
13:17:12.137131 IP 1.1.1.1 > 2.2.2.2: ESP(spi=0x09044f1a,seq=0x154), length 116
13:17:13.174414 IP 2.2.2.2 > 1.1.1.1: ESP(spi=0xd72ff0ff,seq=0x127), length 116
13:17:13.177985 IP 1.1.1.1 > 2.2.2.2: ESP(spi=0x09044f1a,seq=0x155), length 116
13:17:14.215667 IP 2.2.2.2 > 1.1.1.1: ESP(spi=0xd72ff0ff,seq=0x128), length 116
13:17:14.219309 IP 1.1.1.1 > 2.2.2.2: ESP(spi=0x09044f1a,seq=0x156), length 116
вот и все.