Соединяем 2 офиса через VPN на FreeBSD 11. VPN через IPsec.

Пример конкретного подключения. Используется FreeBSD 11.0 Release.

Обращаемся к началу начала. Документация здесь VPN через IPsec

Ну и пробуем.

Исходные данные:

  • Существует две сети 192.168.146.0/24 и 192.168.147.0/24
  • Обе сети соединены через интернет через шлюз, работающий на FreeBSD 11.0 Release
  • У шлюза каждой из сетей есть один публичный IP адрес A.B.C.D и W.X.Y.Z
  • Внутренние IP адреса двух сетей приватные. На шлюзе работает NAT.

Короче документация похоже устарело, по ней ничего не вышло.

Нашел на английском, здесь более свежее похоже: https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ipsec.html

Нашел на форуме http://www.opennet.ru/openforum/vsluhforumID1/95477.html?n=yokon следующее:
Ядро должно содержать строки:

 options         IPSEC
 device          crypto

Собираем ядро.

config kernel_name &&
cd ../compile/kernel_name
make cleandepend && make depend && make && make install

Я не пересобирал ядро, так как в ядре по умолчанию эти опции были уже включены.

Можно посмотреть, что у вас в ядре по умолчанию  /usr/src/sys/i386/conf GENERIC

uname -a

посмотреть какое у вас ядро

/etc/rc.conf
cloned_interfaces=»gif0″
ifconfig_gif0=»inet A.A.A.A B.B.B.B netmask 255.255.255.252 tunnel C.C.C.C D.D.D.D»
(A и B адреса концов туннеля) и строится он между C и D

A.A.A.A = 192.168.141.254
B.B.B.B = 192.168.141.254

C.C.C.C = внешний IP сети A.A.A.A
D.D.D.D = внешний IP сети B.B.B.B

ipsec_enable="YES"              # Set to YES to run setkey on ipsec_file
ipsec_file="/etc/ipsec.conf"    # Name of config file for setkey

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

flush;
 spdflush;
 spdadd A.A.A.A/30 B.B.B.B/30 any -P out  ipsec esp/tunnel/C.C.C.C-D.D.D.D/require;
 spdadd B.B.B.B/30 A.A.A.A/30 any -P in ipsec esp/tunnel/D.D.D.D-C.C.C.C/require;

Далее идем устанавливаем racoon
cd /usr/ports/security/ipsec-tools/
make && make install && make clean

Я ставил через portmaster, сути не меняет просто по факту было так:

# portmaster /usr/ports/security/ipsec-tools/

в итоге:

Installing ipsec-tools-0.8.2_1...
===> SECURITY REPORT:
 This port has installed the following files which may act as network
 servers and may therefore pose a remote security risk to the system.
/usr/local/sbin/racoon

This port has installed the following startup scripts which may cause
 these network services to be started at boot time.
/usr/local/etc/rc.d/racoon

If there are vulnerabilities in these programs there may be a security
 risk to the system. FreeBSD makes no guarantee about the security of
 ports included in the Ports Collection. Please type 'make deinstall'
 to deinstall the port if this is a concern.

For more information, and contact details about the security
 status of this software, see the following webpage:
http://ipsec-tools.sourceforge.net/

===>>> Installation of security/ipsec-tools (ipsec-tools-0.8.2_1) complete

После установки rc.conf добавляем

racoon_enable="YES"

И создаем его конфигурационный файл /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  C.C.C.C [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

D.D.D.D    password_for_remote_host

Не забываем сделать его доступным только для чтения.
chmod 600 psk.txt

Перезагружаемся и все работает.

Не все так просто, пинги не пошли, ищу причину.

На 1-ом шлюзе, что касается gif

Посмотреть таблицу маршрутизации

netstat -rn
Routing tables

Internet:
Destination Gateway Flags Netif Expire
192.168.141.254 link#5 UH gif0

На 2-ом шлюзе

192.168.146.254 link#4 UH gif0

————————-

http://wiki.dieg.info/ipsec

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

Выложить рабочие скрипты…