Строим сеть вида Hub and Spoke + L2TP

// Январь 11th, 2018 // Системное администрирование

ipsec-logoВ этом посте мы будем рассматривать схему организации связи офисов по средством ipsec туннелей на базе оборудования D-Link и Mikrotic. Возьмем схему их предыдущего поста (site-to-site) и развернем её до уровня (hub-and-spoke), также известная как топология звезда.

Нам необходимо построить сеть следующего вида.

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.

Три вещи, которые должны быть

Чтобы всё работало, должно быть три вещи.

  1. Проброшенные в туннель сети lannetworks. В Mikrotik это задаётся через несколько IPSEC Policy. По одной policy для каждой подсети.
  2. Маршрут до целевой подсети.
  3. Правило srcnat для целевой подсети.

Особенность динамического конца IPSEC туннеля в D-link DFL

ВНИАМНИЕ: Динамический тоннель, может только принимать подключения, но не устанавливать их.
Примечание: Если у вас уже настроены статические тоннели или в будущем вам необходимо будет их использовать, убедитесь, что статические тоннели находятся выше созданного в предыдущем шаге динамического тоннеля. Все тоннели находящиеся ниже созданного тоннеля будут неработоспособны. Для изменения порядка тоннелей нажмите правой кнопкой мышки по имени тоннеля и выберите из контекстного меню поднять или опустить.

ВНИМАНИЕ 2: Динамический тоннель может быть только один. Этот тоннель способен подключить всех клиентов с динамическими адресами, в т.ч. с интерфейса wan2, если корректно настроен PBR.

Настройка D-link dfl-260e

Для начала забиваем объекты в Address book. Очень удобно использовать папки в ней для групп объектов. Я создал папку Tunnels, куда мы будем складывать всё добро, касающиеся туннелей.

dfl-address-book-1

Создаём в ней адреса.

dfl-address-book-2

Здесь мы указываем внешний адрес филиала 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.

ikea-MyAlgo

 

ipsec-myalgo

Почему настройки именно такие? Это выяснилось методом проб и ошибок и они таки работают.

Objects -> Key Ring

Тут добавляем наш ключ типа Pre-Shared Key для IPSec туннеля. Можем один для всех сразу, можем для каждого свой. Главное не забыть и не перепутать потом.

Создаём пользователя L2TP

Заходим в System -> Users -> Local User Databases, делаем там группу пользователей для авторизации по L2TP.

dfl-users

Группа интерфейсов на DFL

Т.к. у нас будет 3 тоннеля (2 x site-to-site и 1 x site-to-client), то в Policy надо писать кучу правил, разрешающих трафик из каждого в каждый. Чтобы этого не было, заходим в Network -> Miscellaneous -> Interface group и там создаём группу интерфейсов all-subnets-group, в которой будут все интерфейсы, за которыми прячутся сегменты сети.

dfl-interface-group

IPSec -> tunnels

Вот, что у меня получилось.

tunnels

Дальше пойдут скриншоты настроек тоннеля. Всё, кроме Local Net, Remote Net, Remote Endpoint — одинаковое.

ipsec-spoke1-general

 

ipsec-spoke1-authentication

 

ipsec-spoke1-virtual-routing

 

ipsec-spoke1-xauth

 

ipsec-spoke1-routing

 

ipsec-spoke1-ike-settings

 

ipsec-spoke1-keep-alive

 

ipsec-spoke1-advanced

Маршруты на DFL

После поднятия туннелей у нас должны добавиться автоматические маршруты. Выглядеть это будет так:

df-routes-auto

 

Policies на DFL

В разделе Policies -> Firewalling -> Rules -> Main IP Rules также создаём две папки, одну для site-to-site тоннелей, другую для site-to-client тоннелей.

ipsec-dfl-main-ip-rules

 

Папка правил tunnels

Сначала я понаделал кучу правил (отображено серым), а потом просто свёл их в одно с помощью группы интерфейсов.

ipsec-dfl-main-ip-rules-tunnels

Папка правил vpn_l2tp

Тут первое правило дублирует аналог и папки tunnels так что его в принципе можно убрать.

Правила to-internet-alllow и to-intetnet-nat разрешают трафик из l2tp в Интернет и делают src-nat для него.

ipsec-dfl-main-ip-rules-l2tp

 

 

L2TP сервер на DFL

Заходим в Network -> PPTP/L2TP Servers и создаём там наш сервер.

dfl-l2tp-server

 

l2tp_server_gen

 

 

 

 

l2tp_server_pppl2tp_server_add_route

l2tp_server_virtual_routing

Авторизация L2TP

Заходим в Policies -> Rules -> Authentification Rules и добавляем там l2tp-auth правило.

l2tp-auth-rules

 

l2tp-auth-rules-general

l2tp-auth-rules-log-settings

l2tp-auth-rules-authentication-options

l2tp-auth-rules-accounting

l2tp-auth-rules-agent-options

l2tp-auth-rules-restrictions

Часть II. Настройка «Spoke»

В этой части мы будем настраивать маршрутизатор филиала Spoke2. Это Mikrotik и мы включаем у него Mikrotic Cloud IP, и получаем DDNS запись.

Делаем базовую настройку для какой-нибудь сети по этому посту. Потом добавляем вторую (и следующие сети) вот так:

При настройки второй части IPSEC тоннеля на Mikrotic нужно будет сделать три вещи: srcnat (firewall), route, ipsec policy. Это при добавлении новой подсети в тоннель.

Добавляем новую IPSec Policy

spoke2-ipsec-policy-general

В IP -> IPSec -> Policies -> General добавляем подсети, которые находятся со стороны центрального маршрутизатора HUB-а (т.е. за HUB-ом). Когда тоннели поднимутся, то напротив каждой политики в столбце PH2 state будет надпись established.

spoke2-ipsec-policy-action

Обратите внимание Level = requre здесь значит, что мы используем один SA для всех подсетей. Именно так, по-умолчанию ведет себя D-link dfl-260e.

Добавляем правило NAT

spoke2-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).

spoke2-routes

Добавляем правила для firewall для этих подсетей

Возможно этот шаг излишний, ведь уже есть nat. Но на всякий случай оставляю его тут.

spoke2-firewall-rules

Настройки L2TP-клиента

В мобильном телефоне (или кто там у нас l2tp-клиент) выбираем тип сети: L2TP PSK (with Pre-Shared Key).

Пишем логин и пароль от нашего пользователя, а в разделе Общий ключ IPSec указываем PSK-key, который задали ранее.

l2tp-client-properties

Замечание про 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)

spoke2-ipsec-mtu

Это происходит из-за того, что в Настройках интерфейса тоннеля 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 серии, для подключения хостов, которые не имеют постоянного внешнего адреса

Share

Спасибо!


Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:


Комментировать