IPSEC VPN между удаленными офисами в FreeBSD 11

Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

IPsec (сокращение от IP Security) — набор протоколов для обеспечения защиты данных, передаваемых по межсетевому протоколу IP. Позволяет осуществлять подтверждение подлинности (аутентификацию), проверку целостности и/или шифрование IP-пакетов. IPsec также включает в себя протоколы для защищённого обмена ключами в сети Интернет. В основном, применяется для организации VPN-соединений.

У нас есть два удаленных друг от друга офиса (естественно с выходом в интернет). Шлюзами в которых выступают FreeBSD. Вот простая схема

 

Основные  моменты:

Шлюз FreeBSD с двумя сетевыми картами (em0 и em1).

em0 - смотрит к провайдеру интернета

em1 - в локальную сеть.

К этой схеме можно соединять другие устройства (cisco. и.т.д) 

Забегая вперед скажу, что можно добавлять огромное количество разных маршрутов. ВАЖНО: Все равно не забывайте, что все зависит от пропускной способности Вашего канала. Да и скорость работы будет ниже, чем в локальной сети. 

    И так еще раз основные данные:

  • Внешние статичные ("Белый IP") IP : 10.1.1.20 и 10.1.1.21
  • Lan удаленных офисов : 192.168.10.0/24 и 192.168.30.0/24

В FreeBSD 11 Ядро уже скомпилированно с поддержкой ipsec, но проверим

options   IPSEC        #IP security
device    crypto

Добавим только. Как собрать свое ядро описано здесь

options   IPSEC_DEBUG  #debug for IP security

 Редактируем rc.conf

 nano /etc/rc.conf

Добавляем

cloned_interfaces="gif0"
ifconfig_gif0="192.168.10.1 192.168.30.1 netmask 255.255.255.252 tunnel 10.1.1.20 10.1.1.21"

Дописываем статичный маршрут. Иначе клиенты локальных сетей не будут видеть друг друга.

static_routes="vpn"
route_vpn="-net 192.168.30.0 192.168.30.1"

Добавим еще 

ipsec_enable="YES"
ipsec_file="/etc/ipsec.conf"

Сохраняемся

Создаем файл ipsec.conf

touch ipsec.conf

Редактируем

nano /etc/ipsec.conf

flush;
spdflush;
#OPC (Local IP)
spdadd 192.168.10.1/30 192.168.30.1/30 any -P out ipsec esp/tunnel/10.1.1.20-10.1.1.21/unique;
spdadd 192.168.30.1/30 192.168.10.1/30 any -P in ipsec esp/tunnel/10.1.1.21-10.1.1.20/unique;

Устанавливаем racoon

cd /usr/ports/security/ipsec-tools/
make && make install && make clean

Добавляем в rc.conf

racoon_enable="YES"
racoon_flags="-l /var/log/racoon.log"

Редактируем racoon.conf

nano /usr/local/etc/racoon/racoon.conf

path include "/usr/local/etc/racoon" ;
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
log notify;

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.
}

# if no listen directive is specified, racoon will listen to all
# available interface addresses.
listen
{
#isakmp ::1 [7000];
isakmp 10.1.1.20 [500];
#admin [7002]; # administrative's port by kmpstat.
#strict_address; # required all addresses must be bound.
}

# Specification of default various timer.
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 a send.

# timer for waiting to complete each phase.
phase1 60 sec;
phase2 30 sec;
}
remote anonymous
{
exchange_mode main,aggressive;
doi ipsec_doi;
situation identity_only;

nonce_size 16;
lifetime time 240 min; # sec,min,hour
initial_contact on;
# support_mip6 on;
support_proxy on;
proposal_check obey; # obey, strict or claim

proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key ;
dh_group 5 ;
}
}

sainfo anonymous
{
pfs_group 5;
lifetime time 24 hour;
encryption_algorithm 3des,des,cast128,blowfish;
authentication_algorithm hmac_sha1,hmac_md5;
compression_algorithm deflate;
}

Создаем файл с паролями psk.txt

 touch /usr/local/etc/racoon/psk.txt

Редактируем

nano /usr/local/etc/racoon/psk.txt
10.1.1.21 AbraKaDabRa11 (создаем свой ключ, чем сложнее тем лучше)

Обязательно выставляем права для psk.txt

chmod 600 /usr/local/etc/racoon/psk.txt

Проделываем теже действия на втором шлюзе, только меняем местами ip адреса, как внешние так и внутренние.

Перезагружаемся и проверяем. В результате шлюзы должны видеть друг друга, а также клиенты должны друг друга видеть.

Если не работает, проверяем

/usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log

 

Открываем порты в ipfw

Допишем в  firewall  эти правила для ipsec

$cmd 382 allow ip from any to any via gif0
$cmd 383 allow udp from 10.1.1.20 to 10.1.1.21 isakmp
$cmd 384 allow udp from 10.1.1.21 to 10.1.1.20 isakmp
$cmd 385 allow esp from 10.1.1.20 to 10.1.1.21
$cmd 386 allow esp from 10.1.1.21 to 10.1.1.20
$cmd 387 allow ipencap from 10.1.1.20 to 10.1.1.21
$cmd 388 allow ipencap from 10.1.1.21 to 10.1.1.20

 

Добавить комментарий