Тема: VPN на FreeBSD через ipsec и ADSL
Доброго времени суток!
Мы с товарищем задались целью настроить VPN-тунель через ipsec и ADSL на OS FreeBSD 6.3.
Нам очень важно реализовать систему именно так, как было задумано. Поэтому варианты "OpenVPN проще и лучше" нам не подходят.
Стенд: селерон 900 с фряхой, на борту два сетевых интерфейса - rl0 наружний (к нему подключён ADSL-модем), rl1 - внутренний( смотрит в локалку). Модем - D-link 500t, все порты проброшены (включен DMZ). В локалке обычный свитч и машина на винде. На другой стороне всё тоже самое, только другие Ip.
Проблема: нам удалось сделать тунель, виндовая машина из одной локалки спокойно видит виндовую тачку из другой локалки. Но при этом не работает шифрование. При запуске демонов racoon и ipsec локалка на противоположной стороне перестаёт пинговаться. При этом внешний Ip модема пингуется.
Обозначу что есть что:
192.168.1.1 - внутренний IP модема
192.168.1.12 - IP на интерфейсе rl0, внешний для фряхи, одинаков на обоих серверах
192.168.10.1 - IP на интерфейсе rl1, смотрит в локалку, для первого сервера
192.168.20.1 - IP на интерфейсе rl1, смотрит в локалку, для второго сервера
192.168.10.2 - IP виндовой машины в локалке первого сервера
192.168.20.2 - IP виндовой машины в локалке второго сервера
A.B.C.D - внешний IP модема (что-то вроде 172.24.99.99) для первого сервера.
W.X.Y.Z - внешний IP модема (что-то вроде 172.24.99.99) для второго сервера.
Вот что записано в файлах настройки на первом сервере:
Для первого сервера:
ipsec.conf:
flush;
spdflush;
spdadd 192.168.1.12/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/192.168.1.12-W.X.Y.Z/require;
spdadd W.X.Y.Z/32 192.168.1.12/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-192.168.1.12/require;
Файл psk.txt:
W.X.Y.Z secret1
racoon.conf:
padding
{
maximum_length 20; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check.
exclusive_tail off; # extract last one octet.
}
listen
{
#isakmp ::1 [7000];
#isakmp 202.249.11.124 [500];
#admin [7002]; # administrative port for racoonctl.
#strict_address; # requires that all addresses must be bound.
}
timer
{
# These value can be changed per remote node.
counter 5; # maximum trying count to send.
interval 20 sec; # maximum interval to resend.
persend 1; # the number of packets per send.
# maximum time to wait for completing each phase.
phase1 30 sec;
phase2 15 sec;
}
rc.conf:
ifconfig_rl0="inet 192.168.1.12 netmask 255.255.255.0"
ifconfig_rl1="inet 192.168.10.1 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
hostname="server"
gif_interfaces="gif0"
gifconfig_gif0="192.168.1.12 W.X.Y.Z"
ifconfig_gif0="inet 192.168.10.1 192.168.20.1 netmask 0xffffffff"
static_routes="vpn"
route_vpn="192.168.20.0 192.168.20.1"
gateway_enable="YES"
# IPSEC
ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"
# Racoon
racoon_enable="YES"
На второй машине всё тоже самое, только вмессто W.X.Y.Z стоит A.B.C.D.