Строим сеть вида Hub and Spoke + L2TP
В этом посте мы будем рассматривать схему организации связи офисов по средством ipsec туннелей на базе оборудования D-Link и Mikrotic. Возьмем схему их предыдущего поста (site-to-site) и развернем её до уровня (hub-and-spoke), также известная как топология звезда.
Нам необходимо построить сеть следующего вида.
В качестве маршрутизатора в центральном офисе будем использоваться D-link dfl-260e. Эта железка открывает серию профессионального оборудования D-link с NetDefendOS. В качестве маршрутизаторов в филиалах будем использовать Mikrotic, широко известные rb2011uias-2hnd-in и 450G. Как сделать один туннель site-to-site между D-link dfl-260e и Mikrotik я уже писал в одной из предыдущих статей.
Задачи
Необходимо настроить два туннеля site-to-site от hub до spoke.
Узлы в центральной сети (HUB lan) должны быть доступными из филиалов (spoke2 lan, spoke1 lan).
Филиалы должны видеть узлы подсети друг друга.
Один из филиалов имеет динамический IP. Ну это, чтобы жизнь медом не казалась.
Удаленные пользователи соединяются с HUB по l2tp протоколу и тоже должны видеть не только подсеть центра, но и подсети филиалов.
Подсети
192.168.0.0/24 – сеть центрального офиса. Шлюз: 192.168.0.1 Публичный IP: x.x.x.x (статический).
192.168.1.0/24 – сеть spoke1. Шлюз: 192.168.1.1 Публичный IP: y.y.y.y (статический).
192.168.2.0/24 – сеть spoke2. Шлюз: 192.168.2.1 Публичный IP: z.z.z.z (динамический).
192.168.3.0/24 – сеть l2tp. Шлюз: 192.168.3.1
LANNET в контексте туннеля
При создании IPSEC туннелей важно понимать, что в контексте туннеля, всё то, LANNET-ами для него будут все сети, которые за ним с другой стороны. На словах звучит ужасно, надо проиллюстрировать. Возьмём туннель HUB<>-SPOKE1. Для него destination network будет SPOKE1-LAN, а lan network будут (HUB-LAN, SPOKE2-LAN). Это касается не только писания туннелей, но и маршрутов, правил firewall и srcnat.
Три вещи, которые должны быть
Чтобы всё работало, должно быть три вещи.
- Проброшенные в туннель сети lannetworks. В Mikrotik это задаётся через несколько IPSEC Policy. По одной policy для каждой подсети.
- Маршрут до целевой подсети.
- Правило srcnat для целевой подсети.
Особенность динамического конца IPSEC туннеля в D-link DFL
ВНИАМНИЕ: Динамический тоннель, может только принимать подключения, но не устанавливать их.
Примечание: Если у вас уже настроены статические тоннели или в будущем вам необходимо будет их использовать, убедитесь, что статические тоннели находятся выше созданного в предыдущем шаге динамического тоннеля. Все тоннели находящиеся ниже созданного тоннеля будут неработоспособны. Для изменения порядка тоннелей нажмите правой кнопкой мышки по имени тоннеля и выберите из контекстного меню поднять или опустить.
ВНИМАНИЕ 2: Динамический тоннель может быть только один. Этот тоннель способен подключить всех клиентов с динамическими адресами, в т.ч. с интерфейса wan2, если корректно настроен PBR.
Настройка D-link dfl-260e
Для начала забиваем объекты в Address book. Очень удобно использовать папки в ней для групп объектов. Я создал папку Tunnels, куда мы будем складывать всё добро, касающиеся туннелей.
Создаём в ней адреса.
Здесь мы указываем внешний адрес филиала spoke1 (Aidar-endpoint), сеть spoke1-net (Aidar-network), внешний адрес филиала spoke2 (Shelk-endpoint), сеть spoke2-network (Shelk-network), сеть для l2tp (l2tp_network), диапазон адресов, из которых будут выдаваться адреса l2tp-пользователям (l2tp_range), адрес l2tp-сервера в этой сети (l2tp_server).
Есть у меня один косяк в конфигурации, у меня локальная сеть lannet сидит на интерфейсе dmz (dmznet) = 192.168.0.0/24 Так исторически сложилось, просто примите это)
Дальше мы указываем сети, которые по отношению к туннелю будут за HUB-ом (центральным маршрутизатором). Де-факто это те сети, которые мы позволяем видеть из этого тоннеля. Например, для тоннеля HUB->Spoke2 (tunnelToShelk-localnet) мы группируем сети dmznet, Aidar-network (Spoke1-lan), l2tp_network. Аналогично с HUB->Spoke1 (tunnel-toAidar-localnet). Именно из-за этой особенности мне долгое время не удавалось поднять тоннель. Важно заметить, что если список сетей отличается с двух сторон тоннеля – то он не поднимется, а будет ошибка “no-phase2” на стороне Mikrotic и ошибка “No proposal” на стороне D-link DFL.
Часть I. Настройка “HUB”
Objects -> VPN Objects
Далее заходим в Objects -> VPN-objects. Добавляем там IKE Algorithm и IPsec Algorithm.
Почему настройки именно такие? Это выяснилось методом проб и ошибок и они таки работают.
Objects -> Key Ring
Тут добавляем наш ключ типа Pre-Shared Key для IPSec туннеля. Можем один для всех сразу, можем для каждого свой. Главное не забыть и не перепутать потом.
Создаём пользователя L2TP
Заходим в System -> Users -> Local User Databases, делаем там группу пользователей для авторизации по L2TP.
Группа интерфейсов на DFL
Т.к. у нас будет 3 тоннеля (2 x site-to-site и 1 x site-to-client), то в Policy надо писать кучу правил, разрешающих трафик из каждого в каждый. Чтобы этого не было, заходим в Network -> Miscellaneous -> Interface group и там создаём группу интерфейсов all-subnets-group, в которой будут все интерфейсы, за которыми прячутся сегменты сети.
IPSec -> tunnels
Вот, что у меня получилось.
Дальше пойдут скриншоты настроек тоннеля. Всё, кроме Local Net, Remote Net, Remote Endpoint – одинаковое.
Маршруты на DFL
После поднятия туннелей у нас должны добавиться автоматические маршруты. Выглядеть это будет так:
Policies на DFL
В разделе Policies -> Firewalling -> Rules -> Main IP Rules также создаём две папки, одну для site-to-site тоннелей, другую для site-to-client тоннелей.
Папка правил tunnels
Сначала я понаделал кучу правил (отображено серым), а потом просто свёл их в одно с помощью группы интерфейсов.
Папка правил vpn_l2tp
Тут первое правило дублирует аналог и папки tunnels так что его в принципе можно убрать.
Правила to-internet-alllow и to-intetnet-nat разрешают трафик из l2tp в Интернет и делают src-nat для него.
L2TP сервер на DFL
Заходим в Network -> PPTP/L2TP Servers и создаём там наш сервер.
Авторизация L2TP
Заходим в Policies -> Rules -> Authentification Rules и добавляем там l2tp-auth правило.
Часть II. Настройка “Spoke”
В этой части мы будем настраивать маршрутизатор филиала Spoke2. Это Mikrotik и мы включаем у него Mikrotic Cloud IP, и получаем DDNS запись.
Делаем базовую настройку для какой-нибудь сети по этому посту. Потом добавляем вторую (и следующие сети) вот так:
При настройки второй части IPSEC тоннеля на Mikrotic нужно будет сделать три вещи: srcnat (firewall), route, ipsec policy. Это при добавлении новой подсети в тоннель.
Добавляем новую IPSec Policy
В IP -> IPSec -> Policies -> General добавляем подсети, которые находятся со стороны центрального маршрутизатора HUB-а (т.е. за HUB-ом). Когда тоннели поднимутся, то напротив каждой политики в столбце PH2 state будет надпись established.
Обратите внимание Level = requre здесь значит, что мы используем один SA для всех подсетей. Именно так, по-умолчанию ведет себя D-link dfl-260e.
Добавляем правило NAT
В этом правиле мы будем натить трафик с внутренней сети spoke2-network (192.168.2.0/24) на сети hub-network (192.168.0.0/24), spoke1-network (192.168.1.0) и l2tp_network (192.168.3.0/24).
Routes для сетей за HUB
Добавляем маршруты для сетей за центральным маршрутизатором (HUB).
Добавляем правила для firewall для этих подсетей
Возможно этот шаг излишний, ведь уже есть nat. Но на всякий случай оставляю его тут.
Настройки L2TP-клиента
В мобильном телефоне (или кто там у нас l2tp-клиент) выбираем тип сети: L2TP PSK (with Pre-Shared Key).
Пишем логин и пароль от нашего пользователя, а в разделе Общий ключ IPSec указываем PSK-key, который задали ранее.
Замечание про MTU и IPSec
При проверке пинга от узла сегмента spoke2-network на узел сегмента spoke1-network начал наблюдать такие ошибки:
From 192.168.2.1 icmp_seq=27 Frag needed and DF set (mtu = 78)
From 192.168.2.1 icmp_seq=28 Frag needed and DF set (mtu = 68)
From 192.168.2.1 icmp_seq=29 Frag needed and DF set (mtu = 68)
From 192.168.2.1 icmp_seq=30 Frag needed and DF set (mtu = 68)
Это происходит из-за того, что в Настройках интерфейса тоннеля Interfaces -> IP Tunnel -> ipip-tunnel параметр Dont fragment = no.
После того, как ставим его в inheriet – пинги проходят нормально. Также очень вважно поставить в настройках туннеля значение MTU = 1500. Иначе по дефолту оно будет 68 и вы получите ту же ошибку.
Ссылки
Configure lan-to-lan tunnels between a main office and two remote offices (sometimes called Hub and Spoke).
Configure lan-to-lan tunnels between a main office and two remote offices (sometimes called Hub and Spoke). (резервная ссылка)
Настройка IPSec туннеля для нескольких маршрутизаторов Mikrotik
Развертывание Mikrotik Cloud Hosted Router
http://forum.dlink.ru/viewtopic.php?f=3&t=169198
https://blog.bravi.org/?p=1209
How to setup L2TP over IPsec on the DFL_0929172146_.docx
How to setup L2TP over IPsec on the DFL_0929172146_.docx (резервная ссылка)
Как настроить IPSec в DFL-210/260/800/860/1600/2500 или DI-8xx серии, для подключения хостов, которые не имеют постоянного внешнего адреса