Настраиваю тестовый канал между "офисом" и "удаленной точкой".Обе машины:
FreeBSD 8.2 + ipsec-tools из портовoptions><------>IPSEC
options><------>IPSEC_NAT_T
device<><------>crypto
device<><------>encдля упрощения firewall_type="OPEN" (все равно в локалке играюсь)
Гейт "офиса":
-------------
rc.conf
-------------
net_oif="ae0"
net_oip="172.16.100.9"
net_onet="172.16.100.0/22"
net_omask="255.255.252.0"net_iif="re0"
net_iip="192.168.0.1"
net_inet="192.168.0.0/24"
net_imask="255.255.255.0"gateway_enable="YES"
ifconfig_ae0="inet ${net_oip} netmask ${net_omask}"
ifconfig_re0="inet ${net_iip} netmask ${net_imask}"firewall_enable="YES"
firewall_type="OPEN"
firewall_quiet="YES"
firewall_nat_enable="YES"
firewall_nat_interface="${net_oif}"racoon_enable="YES"
ipsec_enable="YES"
cloned_interfaces="gif0"ipsec_remote0_iface="gif0"
ipsec_remote0_oip="172.16.100.10"
ipsec_remote0_iip="192.16.1.1"
ipsec_remote0_imask="255.255.255.0"
ipsec_remote0_inet="192.168.1.0/24"gifconfig_gif0="${net_oip} ${ipsec_remote0_oip}"
ifconfig_gif0="inet ${net_iip} ${ipsec_remote0_iip} netmask 255.255.255.255"static_routes="RemoteLan0"
route_RemoteLan0="${ipsec_remote0_inet} -interface ${ipsec_remote0_iface}"----------
ipsec.conf
----------
flush;
spdflush;spdadd 172.16.100.9/32 172.16.100.10/32 any -P out ipsec esp/tunnel/172.16.100.9-172.16.100.10/require;
spdadd 172.16.100.10/32 172.16.100.9/32 any -P in ipsec esp/tunnel/172.16.100.10-172.16.100.9/require;-----------
racoon.conf
-----------
path include "/usr/local/etc/racoon";
path certificate "/usr/local/etc/racoon/certs";
path pidfile "/var/run/racoon/racoon.pid";log debug2;
padding
{
maximum_length 20;
randomize off;
strict_check off;
exclusive_tail off;
}listen
{
isakmp 172.16.100.9 [500];
}timer
{
counter 5;
interval 20 sec;
persend 1;
phase1 30 sec;
phase2 15 sec;
}#Remote 01
remote 172.16.100.10
{
exchange_mode main,base;
my_identifier asn1dn;
peers_identifier asn1dn;
certificate_type x509 "office.pub" "office.priv";
peers_certfile x509 "remote01.pub";
proposal
{
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2;
}
}#SA Remote 01
sainfo address 192.168.0.0/24 any address 192.168.1.0/24 any
{
pfs_group 2;
lifetime time 60 min;
encryption_algorithm 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}Гейт "удаленной точки":
-----------------------
rc.conf
-------------
net_oif="fxp0"
net_oip="172.16.100.10"
net_onet="172.16.100.0/22"
net_omask="255.255.252.0"net_iif="re0"
net_iip="192.168.1.1"
net_inet="192.168.1.0/24"
net_imask="255.255.255.0"gateway_enable="YES"
ifconfig_fxp0="inet ${net_oip} netmask ${net_omask}"
ifconfig_re0="inet ${net_iip} netmask ${net_imask}"firewall_enable="YES"
firewall_type="OPEN"
firewall_quiet="YES"
firewall_nat_enable="YES"
firewall_nat_interface="${net_oif}"racoon_enable="YES"
ipsec_enable="YES"
cloned_interfaces="gif0"ipsec_remote0_iface="gif0"
ipsec_remote0_oip="172.16.100.9"
ipsec_remote0_iip="192.16.0.1"
ipsec_remote0_imask="255.255.255.0"
ipsec_remote0_inet="192.168.0.0/24"gifconfig_gif0="${net_oip} ${ipsec_remote0_oip}"
ifconfig_gif0="inet ${net_iip} ${ipsec_remote0_iip} netmask 255.255.255.255"static_routes="RemoteLan0"
route_RemoteLan0="${ipsec_remote0_inet} -interface ${ipsec_remote0_iface}"
----------
ipsec.conf
----------
flush;
spdflush;spdadd 172.16.100.10/32 172.16.100.9/32 any -P out ipsec esp/tunnel/172.16.100.10-172.16.100.9/require;
spdadd 172.16.100.9/32 172.16.100.10/32 any -P in ipsec esp/tunnel/172.16.100.9-172.16.100.10/require;-----------
racoon.conf
-----------
path include "/usr/local/etc/racoon";
path certificate "/usr/local/etc/racoon/certs" ;
path pidfile "/var/run/racoon/racoon.pid";
log debug2;padding
{
maximum_length 20;
randomize off;
strict_check off;
exclusive_tail off;
}listen
{
isakmp 172.16.100.10 [500];
}timer
{
counter 5;
interval 20 sec;
persend 1;
phase1 30 sec;
phase2 15 sec;
}#Office
remote 172.16.100.9
{
exchange_mode main,base;
my_identifier asn1dn;
peers_identifier asn1dn;
certificate_type x509 "remote01.pub" "remote01.priv";
peers_certfile x509 "office.pub";
proposal
{
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2;
}
}#SA Office
sainfo address 192.168.1.0/24 any address 192.168.0.0/24 any
{
pfs_group 2;
lifetime time 60 min;
encryption_algorithm 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}
--------------
Лог "офиса"
racoon: DEBUG: filename: /usr/local/etc/racoon/certs/office.pub
racoon: DEBUG: filename: /usr/local/etc/racoon/certs/remote01.pub
racoon: DEBUG2: lifetime = 28800
racoon: DEBUG2: lifebyte = 0
racoon: DEBUG2: encklen=0
racoon: DEBUG2: p:1 t:1
racoon: DEBUG2: 3DES-CBC(5)
racoon: DEBUG2: SHA(2)
racoon: DEBUG2: 1024-bit MODP group(2)
racoon: DEBUG2: RSA signatures(3)
racoon: DEBUG2:
racoon: DEBUG2: Etype mismatch: got 2, expected 4.
racoon: DEBUG2: Etype mismatch: got 1, expected 4.
racoon: DEBUG: no check of compression algorithm; not supported in sadb message.
racoon: DEBUG: getsainfo params: loc='192.168.0.0/24' rmt='192.168.1.0/24' peer='NULL' client='NULL' id=0
racoon: DEBUG2: parse successed.
racoon: DEBUG: open /var/db/racoon/racoon.sock as racoon management.Лог "точки"
gw racoon: DEBUG: filename: /usr/local/etc/racoon/certs/remote01.pub
gw racoon: DEBUG: filename: /usr/local/etc/racoon/certs/office.pub
gw racoon: DEBUG2: lifetime = 28800
gw racoon: DEBUG2: lifebyte = 0
gw racoon: DEBUG2: encklen=0
gw racoon: DEBUG2: p:1 t:1
gw racoon: DEBUG2: 3DES-CBC(5)
gw racoon: DEBUG2: SHA(2)
gw racoon: DEBUG2: 1024-bit MODP group(2)
gw racoon: DEBUG2: RSA signatures(3)
gw racoon: DEBUG2:
gw racoon: DEBUG2: Etype mismatch: got 2, expected 4.
gw racoon: DEBUG2: Etype mismatch: got 1, expected 4.
gw racoon: DEBUG: no check of compression algorithm; not supported in sadb message.
gw racoon: DEBUG: getsainfo params: loc='192.168.1.0/24' rmt='192.168.0.0/24' peer='NULL' client='NULL' id=0
gw racoon: DEBUG2: parse successed.--------------------------------------------------------
Ну и собственно, вопрос, с чего бы на "удаленной" машине в логах ни слова о том, что создан сокет. Не трудно заметить, что разница в логах только в последней строке, что "сокет создан"
При попытке пинга "удаленной сети" (192.168.1.1) с "офисной" машины, получаю
office# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
ping: sendto: Network is down
ping: sendto: Network is downПри попытке обратного пинга - тоже самое...
При попытке пинга "внешнего" интерфейса "удаленной" машины с "офисной и обратно вообще никакой реакции. Но в то же время, пинги на остальные машины сети 172.16.100.0/22 и с них на эти две идут без проблем.
В чем я не прав?
> Настраиваю тестовый канал между "офисом" и "удаленной точкой".
> Обе машины:
> FreeBSD 8.2 + ipsec-tools из портовУберите все, что относится к ipsec и racoon, все равно сеть тестовая, и просто настройте тоннель, у вас банально нет инкапсуляции... Приведите ipconfig после старта...
>> Настраиваю тестовый канал между "офисом" и "удаленной точкой".
>> Обе машины:
>> FreeBSD 8.2 + ipsec-tools из портов
> Уберите все, что относится к ipsec и racoon, все равно сеть
> тестовая, и просто настройте тоннель, у вас банально нет инкапсуляции...
> Приведите ipconfig после старта..."office"
--------
ae0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=82018<VLAN_MTU,VLAN_HWTAGGING,WOL_MAGIC,LINKSTATE>
ether 00:1b:fc:73:10:95
inet 172.16.100.9 netmask 0xfffffc00 broadcast 172.16.103.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
ether 1c:7e:e5:10:9d:25
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
ipfw0: flags=8801<UP,SIMPLEX,MULTICAST> metric 0 mtu 65536
enc0: flags=0<> metric 0 mtu 1536
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0xb
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
gif0: flags=8011<UP,POINTOPOINT,MULTICAST> metric 0 mtu 1280
inet 192.168.0.1 --> 192.16.1.1 netmask 0xffffffff
options=1<ACCEPT_REV_ETHIP_VER>--------
"remote"
--------
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=2009<RXCSUM,VLAN_MTU,WOL_MAGIC>
ether 00:13:d4:a5:01:87
inet 172.16.100.10 netmask 0xfffffc00 broadcast 172.16.103.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
ether 1c:7e:e5:10:9d:27
inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
ipfw0: flags=8801<UP,SIMPLEX,MULTICAST> metric 0 mtu 65536
enc0: flags=0<> metric 0 mtu 1536
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0xb
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
gif0: flags=8011<UP,POINTOPOINT,MULTICAST> metric 0 mtu 1280
inet 192.168.1.1 --> 192.16.0.1 netmask 0xffffffff
options=1<ACCEPT_REV_ETHIP_VER>
Ну и нетстат, на всяк случай
"Офиса"
gw# netstat -rn
Routing tablesInternet:
Destination Gateway Flags Refs Use Netif Expire
default 172.16.103.1 UGS 0 0 ae0
127.0.0.1 link#11 UH 0 0 lo0
172.16.100.0/22 link#1 U 1 189 ae0
172.16.100.9 link#1 UHS 0 0 lo0
192.16.1.1 link#12 UH 0 0 gif0
192.168.0.0/24 link#7 U 0 0 re0
192.168.0.1 link#7 UHS 1 0 lo0
192.168.1.0/24 gif0 US 0 2 gif0и "удаленной"
gw# netstat -rn
Routing tablesInternet:
Destination Gateway Flags Refs Use Netif Expire
default 172.16.103.1 UGS 0 12 fxp0
127.0.0.1 link#11 UH 0 0 lo0
172.16.100.0/22 link#6 U 0 140 fxp0
172.16.100.10 link#6 UHS 0 0 lo0
192.16.0.1 link#12 UH 0 0 gif0
192.168.0.0/24 gif0 US 0 0 gif0
192.168.1.0/24 link#7 U 0 0 re0
192.168.1.1 link#7 UHS 1 0 lo0
>[оверквотинг удален]Ну а пинги то ходят?
>>[оверквотинг удален]
> Ну а пинги то ходят?Сейчас, без ipsec, так:
в 172-й сетке пинги ходят нормально
в 192-й и с "офисной", и с "удаленной" - молчание.
>> Настраиваю тестовый канал между "офисом" и "удаленной точкой".
>> Обе машины:
>> FreeBSD 8.2 + ipsec-tools из портов
> Уберите все, что относится к ipsec и racoon, все равно сеть
> тестовая, и просто настройте тоннель, у вас банально нет инкапсуляции...
> Приведите ipconfig после старта...Кстати, да, судя по всему, банально не проходит передача пакетов между gif-ами.
Переписал rc.conf с нуля, т.е. оставил только поднятие интерфейсов.
После чего на обеих машинах
ifconfig gif0 create
ifconfig gif0 <ext_ip> <remote_ext_ip>
ifconfig gif0 inet <int_ip> <remote_int_ip> netmask 0xffffffffв результате с обеих машин
# ping <remote_int_ip>
ping: sendto: Network is downв tcpdump -i gif0 тоже тишина
[кусь]Так, с гифами и роутами разобрался.
Пакеты ходят из сетки в сетку без проблем.Но как, как только ставлю
ipsec/racon в enable - все молчит.
>[оверквотинг удален]
> cloned_interfaces="gif0"
> ipsec_remote0_iface="gif0"
> ipsec_remote0_oip="172.16.100.10"
> ipsec_remote0_iip="192.16.1.1"
> ipsec_remote0_imask="255.255.255.0"
> ipsec_remote0_inet="192.168.1.0/24"
> gifconfig_gif0="${net_oip} ${ipsec_remote0_oip}"
> ifconfig_gif0="inet ${net_iip} ${ipsec_remote0_iip} netmask 255.255.255.255"
> static_routes="RemoteLan0"
> route_RemoteLan0="${ipsec_remote0_inet} -interface ${ipsec_remote0_iface}"Не проще ли было написать
cloned_interfaces="gif0"
gif_interfaces="gif0"
^^^^^^^^^^^^^^^^^^^^^ - этого не хватает, инициализация тоннеля
gifconfig_gif0="172.16.100.10 172.16.100.9"
ifconfig_gif0="inet 192.168.0.1 192.16.0.1 netmask 0xffffff00"
static_routes="vpn"
route_vpn="192.16.0.0/24 -interface gif0"Сетка у вас вторая странноватая 192.16.0.0....
[кусь]
> Не проще ли было написать
> cloned_interfaces="gif0"
> gif_interfaces="gif0"
> ^^^^^^^^^^^^^^^^^^^^^ - этого не хватает, инициализация тоннеляУпс забыл... сейчас добавлю...
> Сетка у вас вторая странноватая 192.16.0.0....
Да, очепятался...
> Настраиваю тестовый канал между "офисом" и "удаленной точкой".
> ----------
> ipsec.conf
> ----------
> flush;
> spdflush;
> spdadd 172.16.100.9/32 172.16.100.10/32 any -P out ipsec esp/tunnel/172.16.100.9-172.16.100.10/require;
> spdadd 172.16.100.10/32 172.16.100.9/32 any -P in ipsec esp/tunnel/172.16.100.10-172.16.100.9/require;правила написаны неправильно.
Кроме того, если используешь туннельный режим ipsec, то не надо городить gif-ы и прочее, что не понимаешь.
Если же тебе реально нужно сделать с gif-интерфейсом, то не забывай его делать точка-точка, и используй транспортный режим ipsec.
[кусь]
> правила написаны неправильно.В какой части тела?
> Кроме того, если используешь туннельный режим ipsec, то не надо городить gif-ы
> и прочее, что не понимаешь.С гифа-ми мне проще для себя, с вопросами роутинга и пр. Там таких тоннелей будет пять в реале - офис и пять "удаленок".
> Если же тебе реально нужно сделать с gif-интерфейсом, то не забывай его
> делать точка-точка, и используй транспортный режим ipsec.А на счет транспортного режиами IPSec более развернуто можно? Или ссыль какую почитать?
> [кусь]
>> правила написаны неправильно.
> В какой части тела?В той, что "кусь".
>> [кусь]
>>> правила написаны неправильно.
>> В какой части тела?
> В той, что "кусь".Нда... содержательно... собака, от нечего делать, лижет себя, а люди - смотрю, на форумы пишут...
>>> [кусь]
>>>> правила написаны неправильно.
>>> В какой части тела?
>> В той, что "кусь".
> Нда... содержательно... собака, от нечего делать, лижет себя, а люди - смотрю,
> на форумы пишут......ага, на кнопки нажимают вместо того, что бы головой подумать.
Для прапорщиков бронетанковых войск процитирую ещё раз:Эти правила написаны неправильно --
spdadd 172.16.100.9/32 172.16.100.10/32 any -P out ipsec esp/tunnel /172.16.100.9-172.16.100.10/require;
spdadd 172.16.100.10/32 172.16.100.9/32 any -P in ipsec esp/tunnel/172.16.100.10-172.16.100.9/require;
>>>> [кусь]
> Эти правила написаны неправильно --
> spdadd 172.16.100.9/32 172.16.100.10/32 any -P out ipsec esp/tunnel /172.16.100.9-172.16.100.10/require;
> spdadd 172.16.100.10/32 172.16.100.9/32 any -P in ipsec esp/tunnel/172.16.100.10-172.16.100.9/require;Для старших прапорщиков танковых войск - в какой части эти правила написаны не правильно...
Если в части сетей, то я уже испробовал все возможные варианты.
Надо добить колличество мессаг - так писали бы по букве, а то прям цельными словами бросаетесь... разор сплощной...
[кусь]
Короче, после долгих развлечений пришел к двум выводам: одному радостному - все просто и банально, и второму, печальному - диагностика у ракуна никакая. Т.е. при ошибках в конфигурационном файле, об ошибке можно узнать только по отсутствию файла "/var/run/racoon.pid". В разных манах по разному называются параметры файла конфига, но ракун молчит, как рыба об лед, если встречает неверный. Ну ладно, хватит о грустном....Построение защищенной распределенной сети, с центральным офисом и несколькими удаленными, заработало "на ура".
И так....
Собственно, файлы конфигурации везде почти идентичны (с учетом "зеркального отражения"), разница только в количестве каналов у каждой точки. У меня только офис имеет досутп к "удаленкам", а каждая удаленка только к офису, хотя, можно было бы связать и всех со всеми, если надо, но это уже по мере необходимости.
От "gif"-ов избавился совсем.Данность:
офис:
off_inet - внутренняя сеть (к примеру, 192.168.0.0/24)
off_oip - внешний адрес гейта (хоть 100.0.1.1, все равно от балды)
off_cert - сертификат офиса (.priv, .pub)удаленка 1:
rem1_inet - внутренняя сеть
rem1_oip - внешний адрес гейта
rem1_cert - сертификат удаленки 1.
.
.удаленка N:
remN_inet - внутренняя сеть
remN_oip - внешний адрес гейта
remN_cert - сертификат удаленки N(отрабатывалось на FreeBSD 8.2 STABLE)
собираем ядро
options IPSEC
options IPSEC_NAT_T
device cryptoставим /usr/ports/security/ipsec-tools
!!!при установке папка /usr/local/etc/racoon не создается, и никаких примеров никуда не копируется, так что создать ручками папку.
Смотреть примеры в /usr/ports/security/ipsec-tools/work/ipsec-tools-0.8.0/src/racoon/samplesrc.conf банален для всех
--------------
racoon_enable="YES"
racoon_create_dirs="YES" #по желанию, все равно не работает
ipsec_enable="YES"ipsec.conf
------------
#общий кусок
flush;
spdflush;#на соединение сети с сетью пара правил
spdadd $(loc_inet) $(rem_inet) any -P out ipsec esp/tunnel/$(loc_gate)-$(rem_gate)/require;
spdadd $(rem_inet) $(loc_inet) any -P in ipsec esp/tunnel/$(rem_gate)-$(loc_gate)/require;т.е. для соединения сети 192.168.0.0/24(ext. IP 95.87.46.84) с сетью 192.168.12.0/24 (ext.IP 184.45.97.11)
spdadd 192.168.0.0/24 192.168.12.0/24 any -P out ipsec esp/tunnel/95.87.46.84-184.45.97.11/require;
spdadd 192.168.12.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/184.45.97.11-95.87.46.84/require;и для каждого устанавливаемого канала повторить...
racoon.conf
-----------
#базовое
path certificate "/usr/local/etc/racoon/certs";
# "notify", "debug" or "debug2".
log debug2; # для отладки, потом на notify сменить.padding
{
maximum_length 20;
randomize off;
strict_check off;
exclusive_tail off;
}timer
{
counter 5;
interval 20 sec;
persend 1;
#natt_keepalive 10 sec; по-умолчанию, 20 секунд, и у меня все поднималось нормально
phase1 30 sec;
phase2 15 sec;
}#где слушаем
listen
{
isakmp $(loc_gate_ip) [500];
isakmp_natt $(loc_gate_ip) [4500];
}#для каждой удаленной сети
remote ${remote_external_ip}
{
exchange_mode main,base;
my_identifier asn1dn;
peers_identifier asn1dn;
certificate_type x509 $(local_public_cert) $(local_private_cert);
peers_certfile x509 $(remote_public_cert);
proposal
{
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2;
}
nat_traversal on;
}#...и повторить для каждого канала
#собственно, вторая фаза согласования.
#если все remote/proposal секции одинаковы, то можно делать единую
#в противном случае, вместо anonymous прописывать как указано
#в `man racoon.conf`, через address для каждой сети
sainfo anonymous
{
pfs_group 2;
lifetime time 60 min; #кому как, хоть годами
encryption_algorithm 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}------
shutdown -r now на всех машинках.
------
И все... на этом моменте можно, при пинговании удаленной сети, наблюдать информацию о "переговорах" в /var/log/debug.log
или через tcpdump наблюдать на внешнем интерфейсе ESP-пакетыPS: Про фаервол писать не буду, бо лень... кто-то юзает ipfw, кто-то ipf, кто-то сито с мелкой дырочкой...
PPS: Создание сертификатов через openssl довольно просто, потому не описывал, можно глянуть хоть у Лисяры, хоть тут же на ОпенНэте, в других описаниях настройки IPSec... (лентяй я, что делать))))