Организация IPSec-туннеля между Ubuntu и FreeBSD

()

IPSec это набор протоколов для защиты данных, позволяющий осуществить подтверждение подлинности и шифрование передаваемых по сети данных. В основном применяется для организации VPN-соединение. Пример такого использования рассмотрен далее.

Допустим что есть задача со следующими исходными данными: сервер под управлением Ubuntu 16.04 с IP-адресом 1.1.1.1, имеющий доступ к сети 10.234.0.0/24 и второй сервер под управлением FreeBSD 11.1, с IP-адресом 2.2.2.2, который должен иметь возможность обращаться к хостам из сети 10.234.0.0/24, расположенной за первым сервером. Трафик между первым и вторым серверами должен быть зашифрован.

Хорошим и относительно простым решением здесь будет организация IPSec-туннеля между серверами. Именно это решение и будет подробно описано ниже.

Сразу договоримся что внутри IPSec-туннеля сервер с Ubuntu будет иметь IP-адрес 172.16.0.1, а сервер с FreeBSD - 172.17.0.1. Так же заранее надо сгененировать ключевую фразу для шифрования. Например с помощью команды:

pwgen 24 1

Допустим что была сгенерирована строка: tei0Iiw6dae1shix9IZothuD. Её мы будем использовать дальше. При повторении конфигурации её надо заменять на свою.

Начнём с машины под управлением Ubuntu. Для начала установим необходимые пакеты:

apt-get install ipsec-tools racoon

Следующим шагом приведём файл «/etc/racoon/psk.txt» к виду:

# Каждая строка этого файла имеет вид:
# Адрес удалённой машины и секретная фраза, разделённые пробелами
2.2.2.2 tei0Iiw6dae1shix9IZothuD

Затем нужно отредактировать файл «/etc/ipsec-tools.conf». В итоге он должен принять вид:

flush;
spdflush;

spdadd 2.2.2.2/32 1.1.1.1/32 ipencap -P in ipsec esp/tunnel/2.2.2.2-1.1.1.1/require;
spdadd 1.1.1.1/32 2.2.2.2/32 ipencap -P out ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;

После чего надо привести файл «/etc/racoon/racoon.conf» к виду:

log notify;
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

listen {
        isakmp 1.1.1.1 [500];
        isakmp_natt 1.1.1.1 [4500];
        strict_address;
}

remote 2.2.2.2 {
        my_identifier address;
        peers_identifier address;
        exchange_mode main;
        initial_contact on;
        doi ipsec_doi;
        proposal_check claim;
        lifetime time 24 hour;
        generate_policy off;
        nat_traversal on;
        passive off;
        dpd_delay 5;
        proposal {
                encryption_algorithm aes 256;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 5;
        }
}

sainfo anonymous {
        encryption_algorithm aes 256;
        authentication_algorithm hmac_sha1;
        compression_algorithm deflate;
        lifetime time 24 hour;
}

Остаётся только описать сетевой интерфейс в файле «/etc/network/interfaces»:

auto tun_ipsec
iface tun_ipsec inet static
    address 172.16.0.1
    netmask 255.255.255.255
    pointopoint 172.17.0.1
    pre-up ip tunnel add tun_ipsec mode ipip remote 2.2.2.2 local 1.1.1.1
    post-down ip tunnel del tun_ipsec

И можно запускать сервисы и поднимать сетевой интерфейс:

service setkey restart
service racoon restart
ifup tun_ipsec

Переходим к настройке машины под управлением FreeBSD. Устанавливаем необходимые пакеты:

pkg install racoon

Файлы конфигурации во многом похожи, отличаются только своим расположением ну и адреса локальной/удалённой стороны поменяны местами. Начнём с файла «/usr/local/etc/racoon/psk.txt»:

# Каждая строка этого файла имеет вид:
# Адрес удалённой машины и секретная фраза, разделённые пробелами
1.1.1.1 tei0Iiw6dae1shix9IZothuD

Далее у нас на очереди файл «/usr/local/etc/racoon/racoon.conf»:

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

listen {
        isakmp 2.2.2.2 [500];
        isakmp_natt 2.2.2.2 [4500];
        strict_address;
}

remote 1.1.1.1 {
        my_identifier address;
        peers_identifier address;
        exchange_mode main;
        initial_contact on;
        doi ipsec_doi;
        proposal_check claim;
        lifetime time 24 hour;
        generate_policy off;
        nat_traversal on;
        passive off;
        dpd_delay 5;
        proposal {
                encryption_algorithm aes 256;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 5;
        }
}

sainfo anonymous {
        encryption_algorithm aes 256;
        authentication_algorithm hmac_sha1;
        compression_algorithm deflate;
        lifetime time 24 hour;
}

Затем приводим файл «/etc/ipsec.conf» к виду:

flush;
spdflush;

spdadd 2.2.2.2/32 1.1.1.1/32 ipencap -P out ipsec esp/tunnel/2.2.2.2-1.1.1.1/require;
spdadd 1.1.1.1/32 2.2.2.2/32 ipencap -P in ipsec esp/tunnel/1.1.1.1-2.2.2.2/require;

Наконец добавляем в «/etc/rc.conf» строки:

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

racoon_enable="YES"

cloned_interfaces="gif0"
ifconfig_gif0="inet 172.17.0.1 172.16.0.1 tunnel 2.2.2.2 1.1.1.1"
static_routes="ipsec0:gif0"
route_ipsec0="-net 10.234.0.0/24 172.16.0.1"

И последним шагом запускаем сервисы и поднимаем интерфейс:

/etc/rc.d/setkey start
/usr/local/etc/rc.d/racoon start
/etc/rc.d/netif start gif0

Для проверки работоспособности туннеля достаточно выполнить «пропинговать» противоположные концы туннеля.

Настройку пакетных фильтров на обеих машинах оставим читателю в качестве домашнего задания. На этом всё. Приятной работы!

Ключевые слова: ipsec, ubuntu, freebsd, tunnel, vpn, racoon, ipsec-tools.

Подписаться на обновления: RSS-лента Telegram канал Twitter

Комментарии:

Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2018 Вадим Калинников aka MooSE