====== Racoon: настройка VPN туннеля между несколькими серверами ====== ---- ===== Введение ===== Есть три сервера c FreeBSD 12.1. Необходимо объединить приватные сети, которые расположены за этими серверами, следующим образом: - сервер **A** ( берлога админа): должен иметь доступ везде; - сервер **B** ( офис): определенным компьютерам нужно предоставить доступ к компьютеру с 1С, который стоит в другом офисе; - сервер **C** ( удаленный офис): тут стоит компьютер с 1C; Выглядит это будет примерно вот так: {{ :freebsd:network:racoon_shema.png |}} Поскольку никакой динамической маршрутизации у нас не будет, поэтому хочется обойтись без использования дополнительных интерфейсов. Как роутить трафик между сетями пропишем при помощи политик ipsec и racoon-а. ---- ===== Вводные данные ===== * Сервер **A**: IP: A.A.A.A LAN: 10.0.1.0/24 * Сервер **B**: IP: B.B.B.B LAN: 10.0.2.0/24 * Сервер **C**: IP: C.C.C.C LAN: 10.0.3.0/24 ===== Настройка ===== Устанавливаем ipsec-tools # pkg install ipsec-tools Добавляем в /etc/rc.conf: ipsec_enable="YES" ipsec_file="/etc/ipsec.conf" racoon_enable="YES" racoon_flags="-l /var/log/racoon.log" ==== ipsec ==== Далее будем производить настройку сервера **A**. Два других сервера настраиваются по образу и подобию. ;-) Файл /etc/ipsec.conf приводим вот к такому виду: #!/usr/sbin/setkey -f flush; spdflush; # сервер B spdadd 10.0.1.0/24 10.0.2.0/24 any -P out ipsec esp/tunnel/A.A.A.A-B.B.B.B/unique; spdadd 10.0.2.0/24 10.0.1.0/24 any -P in ipsec esp/tunnel/B.B.B.B-A.A.A.A/unique; # сервер C spdadd 10.0.1.0/24 10.0.3.0/24 any -P out ipsec esp/tunnel/A.A.A.A-C.C.C.C/unique; spdadd 10.0.3.0/24 10.0.1.0/24 any -P in ipsec esp/tunnel/C.C.C.C-A.A.A.A/unique; ==== racoon ==== Теперь надо настроить шифрование трафика. Файл /usr/local/etc/racoon/racoon.conf: path include "@sysconfdir_x@/racoon"; path pre_shared_key "/usr/local/etc/racoon/psk.txt"; path certificate "@sysconfdir_x@/cert"; padding { } listen { isakmp A.A.A.A [500]; } timer { phase1 30 sec; phase2 15 sec; } # сервер B remote B.B.B.B { my_identifier address A.A.A.A; peers_identifier address B.B.B.B; exchange_mode main; doi ipsec_doi; situation identity_only; nonce_size 16; lifetime time 86400 sec; initial_contact on; support_proxy on; proposal { encryption_algorithm aes 256; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 5; } } sainfo subnet 10.0.1.0/24 any subnet 10.0.2.0/24 any { pfs_group 5; lifetime time 24 hour; encryption_algorithm aes 256; authentication_algorithm hmac_sha1, hmac_md5; compression_algorithm deflate; } # сервер C remote C.C.C.C { my_identifier address A.A.A.A; peers_identifier address C.C.C.C; exchange_mode main; doi ipsec_doi; situation identity_only; nonce_size 16; lifetime time 86400 sec; initial_contact on; support_proxy on; proposal { encryption_algorithm aes 256; hash_algorithm sha1; authentication_method pre_shared_key; dh_group 5; } } sainfo subnet 10.0.1.0/24 any subnet 10.0.3.0/24 any { pfs_group 5; lifetime time 24 hour; encryption_algorithm aes 256; authentication_algorithm hmac_sha1, hmac_md5; compression_algorithm deflate; } Теперь необходимо создать файл с паролями: # touch /usr/local/etc/racoon/psk.txt # chmod 600 /usr/local/etc/racoon/psk.txt # chown root:wheel /usr/local/etc/racoon/psk.txt В файл прописываем адреса и пароли для серверов **B** и **C**: B.B.B.B serverB_password C.C.C.C serverC_password ==== firewall ==== Последним шагом настройки будет редактирование firewall-а. Необходимо открыть на вход UDP port 500, и разрешить проход трафика по протоколу esp и ipencap от серверов **B** и **C**. Я использую **pf** поэтому в /etc/pf.conf я добавил следующее: table persist { B.B.B.B, C.C.C.C } pass in on $ext_if proto udp from to ($ext_if) port isakmp keep state pass in on $ext_if proto esp from to ($ext_if) keep state pass in on $ext_if proto ipencap from to ($ext_if) keep state pass out on $ext_if proto udp from A.A.A.A to port isakmp keep state pass out on $ext_if proto esp from A.A.A.A to keep state pass out on $ext_if proto ipencap from A.A.A.A to keep state Осталось только прописать правила прохождения трафика между приватными сетями. Вот небольшой пример конфига pf на сервере **B**: # те кому можно ходить на сервер с 1C table <1C> persist { 10.0.2.2, 10.0.2.3 } # разрешить админу ходить везде pass from 10.0.1.2 to 10.0.2.0/24 keep state # запретить всем ходить в другие приватные сети block from 10.0.2.0/24 to { 10.0.1.0/24, 10.0.3.0/24 } # доступ к удаленному серверу по RDP pass inet proto tcp from <1C> to 10.0.3.2 port 3389 flags S/SA modulate state ===== Запуск ===== После того как мы настроили все три сервера можно приступать к проверке того, как все это работает. Запускаем racoon и ipsec: # service ipsec start # service racoon start Проверяем: # setkey -DP # setkey -D