Этот способ подойдет, когда необходимо объединить две локальные сети или же клинту необходимо получить доступ к удаленной сети. При этом у сервера на wan-интерфейсе необходимо чтобы был установлен статический "белый" ip-адрес, а у клиента может быть "динамическим", который может находиться в том числе и за nat-провайдера. Плюс будет приведен пример классовой маршрутизации - когда vpn-клиенту на windows, не нужно будет добавлять статический маршрут к удаленной сети, маршрут добавится автоматически.
Будут использоваться:
- Сервер - RouterOS v6.48.3:
- Тунельный протокол - L2TP;
- Протокол шифрования - IPSec (в транспортном режиме);
- Клиенты:
- MikroTik;
- KeeneticOS 3.6.10 или NDMS;
- Windows 10 build 20H2;
IPsec transport mode: в этом режиме есть возможность шифровать данные без изменения маршрутизации. Т.е. мы шифруем трафик который попадает под критерии ipsec policy - например L2TP, GRE, IPIP и в целом любой другой трафик (telnet, ftp или tcp и udp) между заданными узлами. Этот режим используется когда у нас есть какие-либо туннельные интерфейсы.
Правило хорошего тона: выбирать адресацию на всех интерфейсах единую. Не использовать смешивания, если взяли сеть 172.16/12, то использовать ее везде, внутри гл. офиса, VPN-туннели, филиалы. Это позволит там где необходимо прописать один маршрут.
Кратко о маршрутизации:
- Маршрутизация определяет куда отправлять пакеты для достижения сети назначения;
- Для настройки маршрутизации нам необходимы адреса на двух концах туннеля;
- Маршруты могут быть настроены с gateway интерфейса L2TP;
Схема сети:
# Сервер
- WAN: static white ip-address
- LAN: 172.16.5.0/24, GW: 172.16.5.1
VPN Tunnel:
- CL: 172.16.255.2, static
- GW: 172.16.255.1
# Клиент
- WAN: dynamic white or gray ip-address
- LAN: 172.17.5.0/27, GW: 172.17.5.1
Server:
PPP Profiles:
Создание профиля. Т.к. мы будем шифровать L2TP с помощью IPsec, то встроенное шифрование на уровне PPP - следует отключить, чтобы предотвратить ситуацию с двойным шифрованием. Это шифрование будет работать на CPU без использования апаратной разгрузки. Также добавим клиентский vpn-интерфейс в "Interface List".
- Address List: добавить клиентский "remote address" в адрес лист;
- Interface List: добавить клиентский интерфейс в интерфейс лист;
- DNS Server: если не указать, то VPN-клиенту добавятся IP из "Local Address" и из IP -> DNS -> "Dynamic Servers";
- Change TCP MSS: Maximum Segment Size - максимально возможный размер сегмента TCP;
- Use Compression: использовать сжатие;
- Use Encryption: использовать ppp-шифрование;
- Only One: запретить использование одного и того же PPP-Secrets несколько раз;
/ppp profile
add name=L2TP/IPsec local-address=172.16.255.1 interface-list=VPN dns-server=172.16.255.1 change-tcp-mss=yes use-mpls=no use-compression=no use-encryption=no only-one=yes
PPP Secrets:
Создание пользователей. Для каждого пользователя задается свой статический ip-адрес "remote-address". Значение "local-address" можно не задавать, т.к оно будет браться из профиля "L2TP/IPsec". При использовании "IP -> Pool" (которые прописываются в "Profiles -> Remote Address"), если клиенту нужно выдать статический ip, то динамический из пула можно перебить, указав в "Secrets" необходимый "Remote Address".
Также настройку "Routes" можно задавать через пробел в виде: | Адреса сети | Шлюза | Метрики |.
- Service: Для какого сервиса можно использовать данный secrers;
- Routes: Проброс маршрута с шашей ROS в удаленную сеть;
- Т.к. впрофиле L2TP/IPsec уже указан Local Address, то повторно в Secrets, задавать его необязательно.
/ppp secret
add name=L2TP_USER1 password=pass service=l2tp profile=L2TP/IPsec remote-address=172.16.255.2 routes=172.17.5.0/27
Создание интерфейса: L2TP Server Binding.
Для каждого пользователя создается свой интерфейс. Это позволит при настройке firewall прявязать правила для конкретного L2TP-интерфейса. А также, при создании маршрута в удаленную сеть, указать шлюз по названию интерфейса.
/interface l2tp-server
add name=L2TP_USER1 user=L2TP_USER1
Т.к. в профиле задан "Interface List", то "L2TP Server Binding" не используем.
Включаем L2TP сервер с использованием Use IPSec:
Настройки из раздела /ip ipsec с названиями - Peer Profiles, Peers, Policy Proposals, Policies, оставляем с дефолтными значениями. Значение ipsec-secret= меняем на свое.
- Use IPsec: required (обязательно), yes (и да и нет), no (нет);
- One Session per Host: С одного хоста (сети ISP) мы не можем делать подклчения с разными PPP Secrets;
- Caller ID Type: number (позволяет с одной сети множество подключений клиентов);
- Max Sessions: Максимальное количество одновременно подключенных клиентов;
- Allow Fast Path: c IPsec не работает;
/interface l2tp-server server
set authentication=mschap2 default-profile=L2TP/IPsec enabled=yes ipsec-secret=secretpass use-ipsec=required
Прописываем маршруты:
Если не задан параметр routes в ppp secrets, то добавляем маршрут в удаленную сеть в ручном режиме.
/ip route
add distance=1 dst-address=172.17.5.0/28 gateway=172.16.255.2 (L2TP_USER1)
Настройка Firewall:
- Настроим трансляцию сетевых адресов с использованием шлюза 172.16.255.1. Это может понадобиться, когда на стороне клиета не прописан маршрут в нашу сеть и соответственно мы не сможем подключиться к нему с нашей сети по адресу 172.17.5.1.
- И разрешим прохождение трафика из сети 172.16.5.0/24 в сеть 172.17.5.0/27.
/ip firewall nat
add action=src-nat chain=srcnat comment="LAN to L2TP_USER1" \
dst-address=172.17.5.0/27 out-interface-list=VPN src-address=\
172.16.5.0/24 to-addresses=172.16.255.1
# Forward:
/ip firewall filter
add action=accept chain=forward comment="L2TP/IPsec (Internal to External)" \
src-address=172.16.5.0/24 dst-address=172.17.5.0/27 in-interface-list=bonding1.5 out-interface=VPN
Разрешим входящие подключения на порты 1701,500,4500 (udp) и протокол 50 (ipsec-esp) wan-интерфейса.
/ip firewall filter
add action=accept chain=input comment="L2TP/IPsec, NAT-T, IPsec-ESP" in-interface-list=ISP dst-port=1701,500,4500 protocol=udp
add action=accept chain=input in-interface-list=ISP protocol=ipsec-esp
- Запрещаем все остальное, на интерфейсах в сторону провайдера;
add action=drop chain=input in-interface-list=ISP
add action=drop chain=input in-interface=ether1
Client's:
Настройка RouterOS:
Создаем клиентское подключение и добавляем маршрут в удаленную сеть.
- Клиентское подключение:
/interface l2tp-client add
name=L2TP_USER1 connect-to=ip-to-server user=L2TP_USER1 password=pass \
profile=default use-ipsec=yes ipsec-secret=secretpass allow=mschap2 disabled=no
- Маршрут в удаленную сеть:
/ip route add
dst-address=172.16.5.0/24 gateway=172.16.255.1
KeeneticOS:
Настройка VPN-подключения к удаленной сети
Интернет -> другие подключения -> Добавить подключение
- Использовать для выхода в Интернет: -
- Имя подключения:
- Тип (протокол): L2TP/IPsec
- Адрес сервера: Domain Name or IP
- Имя пользователя: L2TP_USER1
- Пароль: pass
- Проверка подлинности: MS-CHAP v2
- Секретный ключ: ipsec-secret
Настройка статического маршрута и Межсетевого экрана:
Сетевые правила -> Маршрутизация -> Статические маршруты -> Добавить
- Тип маршрута: Маршрут до сети
- Адрес сети назначения: 172.16.5.0
- Маска подсети: 255.255.225.0
- Адрес шлюза: 172.16.255.1
- Интерфейс: Имя VPN-подключения
- Добавлять автоматически: *
Сетевые правила -> Межсетевой экран -> Имя VPN-подключения:
- Протокол: ICMP | Адрес источника: 172.16.5.0/24 | Порт источника: - | Адрес назначения: - | Порт назначения: -
- Протокол: TCP | Адрес источника: 172.16.5.0/24 | Порт источника: Любой | Адрес назначения: 172.17.5.0/27 | Порт назначения: Любой
- Протокол: UDP | Адрес источника: 172.16.5.0/24 | Порт источника: Любой | Адрес назначения: 172.17.5.0/27 | Порт назначения: Любой
- Протокол: TCP | Адрес источника: 172.16.255.1 | Порт источника: Любой | Адрес назначения: 172.17.5.0/27 | Порт назначения: Любой
- Протокол: UDP | Адрес источника: 172.16.255.1 | Порт источника: Любой | Адрес назначения: 172.17.5.0/27 | Порт назначения: Любой
Клиент Windows 10:
Win+R > rasphone -> Сеть на рабочем месте
- Адрес в интернете: open-networks.ru
- Имя объекта назначения: VPN WORK
- [*] Запомнить учетные данные
- Создать.
-> Свойства
-> Безопасность
- Тип VPN: Протокол L2TP c IPsec - Дополнительные параметры -> Общий ключ IPsec secret
- Шифрование данных: Самое стойкокое (отключатся, если нет шифрования)
- Разрешить следующие протоколы -> MS-CHAP v2
-> Сеть
- IPv4 - Свойства - Дополнительно -> [-] Использовать основной шлюз в удаленной сети
Передача маршрута удаленным клиетам: [link] | [link]
Пример классовой маршрутизации.
В Windows, если при подключении, vpn-клиенту выдается ip-адрес из диапазонов 10.0.0.0/8, 172.16.0.0/12 и 100.64.0.0/10 то будет автоматически создан маршрут до этой сети с масками /8, /16 и /8. Необходимость в ручном добавлении маршрутов в эти сети отпадает. С адресацией 192.168.0.0/16 такой трюк не сработает.
Windows к сети 172.16.0.0/12 по умолчанию добавляет маршрут с маской /16.
Т.е. если vpn-клиент получит адрес 172.17.0.10, то маршрут будет 172.17.0.0/16.
- 172.17.0.0/16
Хост(min): 172.17.0.1
Хост(max): 172.17.255.254
Но нужно, чтобы изначально локальная сеть находящаяся за VPN-сервером (сеть, в которую необходимо получить доступ VPN-клиенту), была в диапазоне адресации 10.0.0.0/8. 172.16.0.0/12 или 100.64.0.0/10.
Для заметок - с L2TP/IPsec хорошо работает RIP.
Добавление статического маршрута:
Для примера - к удаленной сети. .
- Просмотреть таблицу маршрутизации,
cmd> route print
- Добавить маршрут,
cmd> route ADD -p 172.16.5.0 MASK 255.255.255.0 172.16.255.1
- Удалить маршрут,
cmd> route delete 172.16.5.0
172.16.255.1 - адрес vpn-сервера; 172.16.5.0/24 - удаленная сеть.
Динамическая маршрутизация:
В отличии от туннельного IPsec, есть интерфейсы, которые позволят нам использовать протоколы динамической маршрутизации (OSPF, RIP, BGP).
Заметки:
- Необходимость подбора значения MTU и MRU для VPN-подключения ROS. [link]
C включенной в профиле опцией: "Change TCP MSS". Можно настроить эти значения как на стороне L2TP Server (применятся заданные значения для всех клиентов), так и конкретно на стороне проблемного L2TP Client.
- ML-PPP (MRRU) - с заданными значениями на стороне L2TP Server и L2TP Client - mrru: 1600. В статусе подключения mtu изменится на 1596. При использовании mrru, тоже необходимо подобрать значения mtu и mru. Необходим для того, чтобы не уменьшать MSS в туннеле. В тестах показал себя хуже.
- Если на стороне сервера или клиента интернет подключен по оптоволоконной линии и имеет нестандартное значение MTU, то, скорее всего, будут наблюдаться проблемы с подключением к ресурсам, например, не открываются локальные сайты, RDP и VNC соединения, обрывается сессия и не прогружается интерфейс в Winbox, не подключается к ROS по SSH. При этом ресурсы сети пингуются в обоих направлениях.
- ML-PPP (MRRU) - на стороне Windows клиента включается в "Параметры PPP -> Согласовывать многоканальное подключение для одноканальных подключений".
- Одновременная работа нескольких L2TP/IPsec клиентов - если они находятся в локальной сети за одним белым IP-адресом, то на сервере возможна работа только одного клиентского подключения.
Ссылки по теме: | lanmarket.ua | howitmake.ru | bozza.ru | mikrotik.vetriks.ru |