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

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

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

Закрыть меню