Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

FreeBSD + IPsec + несколько подсетей (пересекающихся)

Практика



Как прокинуть туннель VPN с использованием IPsec на FreeBSD я уже рассказывал - вот ссылка. Поэтому повторять все подряд не буду. Данный конкретный топик посвящен ситуации несколько более сложной, чем была описана. Здесь мы рассмотрим - что делать, если соединять необходимо не 2 подсети, а сразу несколько. А так-же - что делать, если FreeBSD - это центральный маршрутизатор, который роутит подсети более высокого класса, чем на другой стороне, но при этом подсети на другой стороне входят в этот класс.


Ситуация 1. Настраиваемый FreeBSD - это центральный маршрутизатор.

Условия:
  • Сети на стороне настраиваемого FreeBSD: 10.0.0.0/16 (т.е. все класса 10.0B)
  • Удаленная подсеть (через IPsec): 10.0.15.0/24
  • Внешний IP местного центрального шлюза: 88.77.66.55
  • Внешний IP удаленного филиала: 55.44.33.22


В данном сценарии: настраиваемый маршрутизатор - это центральный роутер, к которому стекаются потоки через другие VPN, через оптоволокно, медные каналы связи и т.д. Поэтому он маршрутизирует кучу подсетей (для примера, пусть это будут подсети 10.0.1.0/24, 10.0.2.0/24, 10.0.3.0/24 и т.д.) И среди прочего к ему нужно прокинуть VPN канал IPsec с подсетью 10.0.15.0/24.

Итак, как видно - у нас есть маааленький нюансик: подсеть 10.0.15.0/24 входит в подсеть 10.0.0.0/16.

Вот конфиги racoon.conf и ipsec.conf, соответствующие данной ситуации (не всякий случай уточню - это рабочие конфиги с измененными IP адресами, т.е. по ним все работает).

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

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

listen
{
    isakmp 88.77.66.55 [500];
}

# Specify various default timers.
timer
{
    counter 5; # maximum trying count to send.
    interval 20 sec; # maximum interval to resend.
    persend 1; # the number of packets per send.
    phase1 30 sec;
    phase2 15 sec;
}



#############
# NET 1
#############

remote 55.44.33.22
{
    exchange_mode main,base;
    lifetime time 28800 sec;
    generate_policy on;
    proposal_check strict;
    proposal {
        encryption_algorithm 3des;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group 2;
    }
}

sainfo subnet 10.0.0.0/16 any address 10.0.15.0/24 any
{
    lifetime time 28800 sec;
    encryption_algorithm aes128, 3des, cast128, blowfish 448, des, rijndael;
    authentication_algorithm hmac_md5, hmac_sha1;
    compression_algorithm deflate;
}

ipsec.conf:
flush;
spdflush;
spdadd 10.0.0.0/16 10.0.15.0/24 any -P out ipsec esp/tunnel/88.77.66.55-55.44.33.22/unique;
spdadd 10.0.15.0/24 10.0.0.0/16 any -P in ipsec esp/tunnel/55.44.33.22-88.77.66.55/unique;



Ситуация 2. Настраиваемый FreeBSD - центральный роутер, но на стороне филиала несколько подсетей.

Условия:
  • Сети на стороне настраиваемого FreeBSD: 10.0.0.0/16 (т.е. все класса 10.0B)
  • Удаленные подсети (через IPsec): 10.0.15.0/24, 10.0.16.0/24
  • Внешний IP местного центрального шлюза: 88.77.66.55
  • Внешний IP удаленного филиала: 55.44.33.22

Конфиги очень похожи.

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

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

listen
{
    isakmp 88.77.66.55 [500];
}

# Specify various default timers.
timer
{
    counter 5; # maximum trying count to send.
    interval 20 sec; # maximum interval to resend.
    persend 1; # the number of packets per send.
    phase1 30 sec;
    phase2 15 sec;
}



#############
# BRANCH 1; NETS 15, 16
#############

remote 55.44.33.22
{
    exchange_mode main,base;
    lifetime time 28800 sec;
    generate_policy on;
    proposal_check strict;
    proposal {
        encryption_algorithm 3des;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group 2;
    }
}

sainfo subnet 10.0.0.0/16 any address 10.0.15.0/24 any
{
    lifetime time 28800 sec;
    encryption_algorithm aes128, 3des, cast128, blowfish 448, des, rijndael;
    authentication_algorithm hmac_md5, hmac_sha1;
    compression_algorithm deflate;
}
sainfo subnet 10.0.0.0/16 any address 10.0.16.0/24 any
{
    lifetime time 28800 sec;
    encryption_algorithm aes128, 3des, cast128, blowfish 448, des, rijndael;
    authentication_algorithm hmac_md5, hmac_sha1;
    compression_algorithm deflate;
}

ipsec.conf:
flush;
spdflush;
spdadd 10.0.0.0/16 10.0.15.0/24 any -P out ipsec esp/tunnel/88.77.66.55-55.44.33.22/unique;
spdadd 10.0.15.0/24 10.0.0.0/16 any -P in ipsec esp/tunnel/55.44.33.22-88.77.66.55/unique;
spdadd 10.0.0.0/16 10.0.16.0/24 any -P out ipsec esp/tunnel/88.77.66.55-55.44.33.22/unique;
spdadd 10.0.16.0/24 10.0.0.0/16 any -P in ipsec esp/tunnel/55.44.33.22-88.77.66.55/unique;



Ситуация 3. Настраиваемый роутер FreeBSD - это шлюз филиала.

Условия:
  • Сети на стороне настраиваемого FreeBSD: 10.0.15.0/24, 10.0.16.0/24
  • Удаленные подсети (через IPsec): 10.0.0.0/16 (все через центральный шлюз)
  • Внешний IP местного роутера филиала: 55.44.33.22
  • Внешний IP удаленного центрального роутера: 88.55.44.33


Как видим, здесь ситуация поменялась на обратную - мы настраиваем роутер FreeBSD, находящийся на стороне филиала, маршрутизирующий две локальные сети и ломящийся через IPsec через центральный шлюз к остальным корпоративным сетям.

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

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

listen
{
    isakmp 55.44.33.22 [500];
}

# Specify various default timers.
timer
{
    counter 5; # maximum trying count to send.
    interval 20 sec; # maximum interval to resend.
    persend 1; # the number of packets per send.
    phase1 30 sec;
    phase2 15 sec;
}



#############
# CENTRAL
#############

remote 88.77.66.55
{
    exchange_mode main,base;
    lifetime time 28800 sec;
    generate_policy on;
    proposal_check strict;
    proposal {
        encryption_algorithm 3des;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group 2;
    }
}

sainfo subnet 10.0.15.0/24 any address 10.0.0.0/16 any
{
    lifetime time 28800 sec;
    encryption_algorithm aes128, 3des, cast128, blowfish 448, des, rijndael;
    authentication_algorithm hmac_md5, hmac_sha1;
    compression_algorithm deflate;
}
sainfo subnet 10.0.16.0/24 any address 10.0.0.0/16 any
{
    lifetime time 28800 sec;
    encryption_algorithm aes128, 3des, cast128, blowfish 448, des, rijndael;
    authentication_algorithm hmac_md5, hmac_sha1;
    compression_algorithm deflate;
}

ipsec.conf:
flush;
spdflush;
spdadd 10.0.15.0/24 10.0.15.0/24 any -P out none;
spdadd 10.0.15.0/24 10.0.15.0/24 any -P in none;
spdadd 10.0.16.0/24 10.0.16.0/24 any -P out none;
spdadd 10.0.16.0/24 10.0.16.0/24 any -P in none;
spdadd 10.0.15.0/24 10.0.16.0/24 any -P out none;
spdadd 10.0.15.0/24 10.0.16.0/24 any -P in none;
spdadd 10.0.16.0/24 10.0.15.0/24 any -P out none;
spdadd 10.0.16.0/24 10.0.15.0/24 any -P int none;
spdadd 10.0.15.0/24 10.0.0.0/16 any -P out ipsec esp/tunnel/55.44.33.22-88.77.66.55/unique;
spdadd 10.0.0.0/16 10.0.15.0/24 any -P in ipsec esp/tunnel/88.77.66.55-55.44.33.22/unique;
spdadd 10.0.16.0/24 10.0.0.0/16 any -P out ipsec esp/tunnel/55.44.33.22-88.77.66.55/unique;
spdadd 10.0.0.0/16 10.0.16.0/24 any -P in ipsec esp/tunnel/88.77.66.55-55.44.33.22/unique;

Опа, здесь мы видим отличие! Мы прописали опции с активом "none" в файле ipsec.conf.

Сделано это из-за того, что 10.0.15.0/24 и 10.0.16.0/24 входят в подсеть 10.0.0.0/16, и если на стороне центрального маршрутизатора, передавая пакеты ИЗ подсети 10.0.0.0/16 В подсеть 10.0.15.0/24 (или 10.0.16.0/24) мы не сталкивались с проблемами, то в данном конкретном случае мы имеем ситуацию, когда все, что выходит из подсетей 10.0.15.0/24 и 10.0.16.0/24 в подсеть 10.0.0.0/16 должно шифроваться. А значит, что шифроваться будет и все, что идет даже мимо туннеля (например, между подсетями). Соответственно, работать вообще все перестанет!

Для того, чтобы избежать такую подставу - мы рисуем правила "пропусти, не шифруй" для все, что входит или выходит из самой подсети 10.0.15.0/24 (ну и для 10.0.16.0/24), а также правила для пропуска пакетов между подсетями.

В более простом случае, когда на стороне филиала подсеть только одна (пусть это будет 10.0.15.0/24) мы может обойтись такой записью в ipsec.conf:
flush;
spdflush;
spdadd 10.0.15.0/24 10.0.15.0/24 any -P out none;
spdadd 10.0.15.0/24 10.0.15.0/24 any -P in none;
spdadd 10.0.15.0/24 10.0.0.0/16 any -P out ipsec esp/tunnel/55.44.33.22-88.77.66.55/unique;
spdadd 10.0.0.0/16 10.0.15.0/24 any -P in ipsec esp/tunnel/88.77.66.55-55.44.33.22/unique;
создано: 2017-05-09
обновлено: 2021-03-13
132973



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Компьютерные сети

Термины: Компьютерные сети