Ipsec mikrotik linux настройка

Обновлено: 05.07.2024

Иногда кажется, что создатели Mikrotik намеренно лишают себя прибыли, не создавая однозначных пошаговых руководств по настройке своих детищ. Почти 100% потребителей этих роутеров пытаются настроить VPN, использовать два или более WAN одновременно или в качестве резервных. Именно это ищут по всей сети (и часто вне рунета) счастливые владельцы этих замечательных устройств. Представьте, на сколько бы увеличилась армия владельцев, если бы для настройки этих функций было два-три визарда в веб-интерфейсе. А сейчас.. сейчас именно благодаря сложности настройки (и, соотв., меньшему количеству желающих купить) мы имеем недорогое, малокапризное для несложных задач устройство, которое надо заставить работать 24х7х365. Например, в качестве VPN-сервера. Поехали!

Протокол L2TP обеспечивает канал передачи данных, туннель.

IPSec обеспечивает защиту данных от просмотра.

Итак, имеем роутер Mikrotik с прошивкой 6.30 (июль 2015) c LAN 192.168.88.0/24 (сеть по-умолчанию). WAN не важен, например, 1.2.3.4.

Настройка туннелирования (L2TP)

/ Определям диапазон адресов VPN-пользователей


Name: vpn_pool
Addresses: 192.168.112.1-192.168.112.10
Next pool: none

Лучше для клиентов vpn использовать отдельную адресацию. Так проще отделять одних от других. И вообще, бест практис.

/ Профиль для нашего конкретного туннеля


General:
Name: l2tp_profile
Local address: vpn_pool (а можно указать 192.168.88.1, сами смотрите, как вам больше нравится)
Remote address: vpn_pool
Change TCP MSS: yes

Protocols:
all to default:
Use MPLS: default
Use compression: default
Use Encription: default

Limits:
Only one: default

/ Готовим пользователя VPN


Name: vpn_user1
Password: bla-bla-bla
Service: l2tp
Profile: l2tp_profile

/ Включаем сервер L2TP


На предыдущем этапе мы создали туннель для передачи данных и включили IPSec. В этом разделе мы настроим параметры IPSec.


Address: 0.0.0.0/0
Port: 500
Auth method: pre shared key
Passive: yes (set)
Secret: tumba-yumba-setebryaki (это не пароль пользователя!)

Policy template group: policy_group1
Exchange mode: main l2tp
Send Initial Contact: yes (set)
NAT Traversal: yes (set)
My id: auto
Proposal check: obey
Hash algorithm: sha1
Encryption Algorithm: 3des aes-128 aes-256

DH Group: modp 1024
Generate policy: port override
Lifitime: 1d 00:00:00
DPD Interval: 120
DPD Maximum failures: 5

Name: default
Auth algorithms: sha1
Enrc. algorithms: 3des, aes-256 cbc, aes-256 ctr
Life time: 00:30:00
PFS Group: mod 1024

Firewall

Давайте уж к консоли, что-ли для разнообразия:

Это правило надо поднять выше финальных запрещающих правил, если у вас они есть.

IPsec туннель на Linux машине будем поднимать с помощью racoon. Не буду описывать подробности, есть хорошая статья у vvpoloskin.

Устанавливаем необходимые пакеты:

Настраиваем racoon, он условно будет выступать в роли ipsec сервера. Так как mikrotik в main режиме не может передавать дополнительный идентификатор клиента, а внешний ip адрес через который он коннектится к Linux динамический, использовать preshared key (авторизацию по паролю) не получится, так как пароль должен сопоставляться либо с ip адресом подключающегося хоста, либо с идентификатором.

Будем использовать авторизацию по RSA ключам.

Демон racoon использует ключи в формате RSA, а mikrotik — в формате PEM. Если генерировать ключи утилитой plainrsa-gen идущей вместе с racoon, то конвертировать публичный ключ для Mikrotika в формат PEM с ее помощью не получится — она конвертирует только в одну сторону: PEM в RSA. Сгенерированный plainrsa-gen ключ не смогли прочитать ни openssl, ни ssh-keygen, поэтому с их помощью также не получится выполнить конвертацию.

Мы сгенерируем PEM ключ с помощью openssl, а затем конвертируем его для racoon с помощью plainrsa-gen:

Полученные ключи положим в папку: /etc/racoon/certs/server. Не забываем установить владельцем пользователя, от чьего имени запускается демон racoon (обычно root), права 600.

Настройку mikrotik опишу при подключении через WinBox.

Ключ server-name.pub.pem загрузим в mikrotik: Меню «Files» — «Upload».

Открываем раздел «IP» — «IP sec» — вкладка «Keys». Теперь генерируем ключи — кнопка «Generate Key», затем экспортируем публичный ключ mikrotika «Expor Pub. Key», скачать его можно из раздела «Files», правой кнопкой по файлу — «Download».

Импортируем публичный ключ racoon, «Import», в выпадающем списке поля «File name» ищем загруженный ранее нами server-name.pub.pem.

Публичный ключ mikrotik нужно сконвертировать

и положить в папку /etc/racoon/certs не забыв про владельца и права.

Конфиг racoon с комментариями: /etc/racoon/racoon.conf

Возвращаемся в раздел "IP" — "IPsec"

Вкладка "Profiles"
Параметр
Значение
Name На ваше усмотрение (по умолчанию default)
Hash Algorithm sha512
Encryption Algorithm aes-128
DH-Group modp2048
Proposhal_check claim
Lifetime 1d 00:00:00
NAT Traversal true (ставим галочку)
DPD 120
DPD Maximum failure 5
Вкладка "Peers"
Параметр
Значение
Name На ваше усмотрение (далее MyPeer)
Address 1.1.1.1 (IP linux машины)
Local Address 10.0.0.2 (IP WAN интерфейса mikrotik)
Profile default
Exchange Mode main
Passive false
Send INITIAL_CONTACT true
Вкладка "Identities"
Параметр
Значение
Peer MyPeer
Atuh. Method rsa key
Key mikrotik.privet.key
Remote Key server-name.pub.pem
Policy Tamplate Group default
Notrack Chain пусто
My ID Type auto
Remote ID Type auto
Match By remote id
Mode Configuration пусто
Generate Policy no
Вкладка "Policies — General"
Параметр
Значение
Peer MyPeer
Tunnel true
Src. Address 192.168.0.0/30
Dest. Address 192.168.0.0/30
Protocol 255 (all)
Template false
Вкладка "Policies — Action"
Параметр
Значение
Action encrypt
Level requier
IPsec Protocols esp
Proposal MyPeerProposal

Скорее всего у вас, как и у меня, на WAN интерфейсе настроен snat/masquerade, это правило надо скорректировать, чтобы исходящие пакеты ipsec уходили в наш туннель:
Переходим в раздел "IP" — "Firewall".
Вкладка "NAT", открываем наше правило snat/masquerade.

Вкладка "Advanced"
Параметр
Значение
IPsec Policy out: none

Рестартуем демона racoon

Если при рестарте racoon не запускается, значит в конфиге имеется ошибка, в syslog racoon выводит информацию о номере строки, в которой обнаружена ошибка.

Демон racoon при загрузке ОС стартует раньше поднятия сетевых интерфейсов, а мы указали в секции listen опцию strict_address, необходимо добавить в файл systemd юнита racoon
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.

Сейчас наши ipsec туннели должны подняться, смотрим вывод:

Если туннели не поднялись, смотрите syslog, либо journalctl -u racoon.

Теперь необходимо настроить L3 интерфейсы, чтобы можно было маршрутизировать трафик. Есть разные варианты, мы будем использовать IPIP, так как его mikrotik поддерживает, я бы использовал vti, но, к сожалению, в mikrotik его до сих пор не реализовали. От IPIP он отличается тем, что дополнительно может инкапсулировать multicast и ставить метки (fwmark) на пакеты, по которым можно их фильтровать в iptables и iproute2 (policy-based routing). Если нужна максимальная функциональность — тогда, например, GRE. Но не стоит забывать, что за дополнительную функциональность платим большим оверхедом.

Перевод неплохого обзора туннельных интерфейсов можно посмотреть тут.

На Linux:

Теперь можно добавить маршруты для сетей за mikrotik

Чтобы наш интерфейс и маршруты поднимались после перезагрузки, нужно описать интерфейс в /etc/network/interfaces и там же в post-up добавлять маршруты, либо прописать все в одном файле, например, /etc/ipip-ipsec0.conf и дергать его через post-up, не забудьте про владельца файла, права и сделать его исполняемым.

На Mikrotik:

Раздел «Interfaces», добавляем новый интерфейс «IP tunnel»:

Вкаладка «IP tunnel» — «General»
Параметр
Значение
Name На ваше усмотрение (далее IPIP-IPsec0)
MTU 1480 (если не указывать, то mikrotik начинает резать mtu до 68)
Local Address 192.168.0.2
Remote Address 192.168.0.1
Ipsec Secret Деактивируем поле (иначе будет создан новый Peer)
Keepalive Деактивируем поле (иначе интерфейс будет постоянно выключаться, так как у mikrotika какой-то свой формат этих пакетов и с linux не работает)
DSCP inherit
Dont Fragment no
Clamp TCP MSS true
Allow Fast Path true

Раздел «IP» — «Addresses», добавляем адрес:

Параметр Значение
Address 192.168.0.2/30
Interface IPIP-IPsec0

Теперь можно добавлять маршруты в сети за linux машиной, при добавлении маршрута, gateway будет наш интерфейс IPIP-IPsec0.

PS

Так как наш сервер linux является транзитным, то на нем имеет смысл задать параметр Clamp TCP MSS для ipip интерфейсов:

создаем файл /etc/iptables.conf со следующим содержимым:

и в /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

В сети за mikrotik у меня работает nginx (ip 10.10.10.1), делаем доступным его из интернета, добавим в /etc/iptables.conf:

Не забывайте добавить соответствующие разрешения в iptables, если у вас включены фильтры пакетов.

В предыдущей статье рассмотрели IPIP туннель между микротиком и убунтой. Теперь добавим IPSEC между Mikrotik и Ubuntu на этот туннель с помощью пакета Stongswan.


Схему возьмём из предыдущей статьи, тут ничего принципиально не меняется:

IPSEC более мене стандартизирован, можно настраивать шифрование между различными устройствами.

Микротик

подготовка

  • сертификат микротика (пара открытый-закрытый сертификаты)
  • сертификат убунту (пара открытый-закрытый сертификаты)
  • CA (открытый сертификат)

Генерируемые сертификаты должны быть типа сервер(есть клиентские и серверные). Сгенерировать их можно по статьям на этом сайте (windows/linux). Я же использовал Cert Manager из pfsense.

Для микротика нужны будут сертификат микротика (пара открытый-закрытый серт-ключ), CA и ТОЛЬКО открытый серт ubuntu. Выделяем сгенерированные ранее файлы в файловом менеджере и перетаскиваем их в окно Winbox (для хардкорщиков можно scp использовать).

После добавления файлов у нас должна получится примерно такая картинка:

настройка


Переходим на вкладку Peers и добавляем новый пир:

Следующий шаг Identities:


Suggestion use stronger pre-shared key or different authentication method

Эти надписи это какая-то недоработка винбокса, очевидно и пир у нас есть и метод авторизации более чем надёжный. Чтобы убрать предупреждение, сначала нажимаем Apply. Затем меняем Auth Method на pre shared key. Жмём ок, ок на предупреждении и ок ещё раз (три раза окей). Баг.


Переходим на вкладку Proposals, здесь всё как в Profiles (ну почти):

Последняя вкладка, Policies. Заполняем поля в двух вкладках: General и Action:



Это всё, переходим к Ubuntu.

Ubuntu

Версия Ubuntu не имеет значения, настройки идентичные

Для настройки IPSEC между Mikrotik и Ubuntu нам понадобится пакет Strongswan. Установка в две команды:

Появилась потребность в организации VPN тунеля между локальным роутером MikroTik c RouterOS на борту и удаленным сервером на базе Ubuntu Linux. Причем сервер должен выглядеть для локальной сети местным, т.е. находится в этом же L2-сегменте. В качетве тунеля был выбран l2tp, практика показывает что он более стабилен, чем тот же pptp. Так как l2tp не обеспечивает шифрование данных поверх него был настроеен ipsec. В качестве сервера l2tp выступает RouterOS. Конфигурация узлов следуюущая:

Узел Внешний адрес Локальный адрес
MikroTik 192.168.0.1 10.0.0.1/24
Linux 192.168.1.100 10.0.0.100

1. L2TP сервер на стороне MikroTik

Создаем пользоваьеля для VPN.

Для того чтобы присутсвие удаленного сервера в локальной сети работало необходимо Proxy ARP на локальном интерфесе.

2. L2TP клиент Ubuntu Linux

Устананвливаем xl2tpd, это сервер и клиент для протокола l2tp.

Приводим конфигурационный файл /etc/xl2tpd/xl2tpd.conf к следующему виду

Добавляем учетные данные пользователя в /etc/ppp/chap-secrets

Тунель долежен подняться и работать. Однако, данные передаются через интернет инкапсулированными без шифрования, в большинстве случаем это не приемлемо. Поэтому продолжаем и настраиваем ipsec поверх l2tp-тунеля.

3. MikroTik IPSEC

Политики шифрования трафика.

4. Ubuntu IPSEC

В Linux нам потребуется два пакета, собственно ipsec-tools и racoon, поскольку мы используем pre-shared key для идентификация.

Заносим реквизиты в /etc/racoon/psk.txt

Приводим /etc/racoon/racoon.conf к следующему виду

Настраиваем политики шифрования трафика /etc/ipsec-tools.conf

Если все сделано правильно, то можно увидеть следующее:

Вам также может понравиться


Вчера Red Hat проводили вебинар на тему миграции БД Oracle с проприетарных версий Unix на RHEL. Насколько это оправдано каждый решает сам, […]

Авторизация для stunnel с помощью сертификатов openvpn

Авторизация для stunnel с помощью сертификатов openvpn

Stunnel довольно простая программа, назначение которой создавать SSL туннели. Необходимость в них может возникнуть если программа, слушающая какой-то порт, не поддерживает шифрование, […]

pulseAudio

Как подружить Debian Squeeze и Adobe Flash с PulseAudio

PulseAudio незаменимая вещь в Desktop-инсталляции Linux, но к сожалению не все приложения умеют с ним работать. К счастью это дело поправимое, в […]

И еще немного про tc и честное распределение скорости

И еще немного про tc и честное распределение скорости

При использовании очереди sfq в Linux получаем практически честное распределения трафика между пользователям, точнее между сетевыми соединениями пользователей. Получается, что чем больше […]

5 комментариев “ L2TP/IPSEC между роутером MikroTik и Ubuntu Linux ”

Кроме этого, не получается с пробросом порта на камеру в подсети опенврт.

На микротике открыл порт, смотрю торчем на л2тп интерфейс. запросы из вне идут. А назад нет.

Дело в маршрутах на оперврт я так понимаю? когда я с локалки микротика захожу все пашет, так как прописан маршрут.
а из когда из вне, трафик идёт через тунель, только в одну сторону, назад он не идёт.

я вижу 2 выхода. смаскарадить или маршрут по умолчанию поменять на тунель. только как это сделать?

Эту проблему поборол. на опенврт прописал в конфигах след.

Если туннель не грузить, он не падает.

Сделал по офф мануалу с микротик wiki site2site l2tp

прописал маршруты. сдвинулось, но не сильно,

с локалки микротика смог зайти в веб-интерфейс openwrt. а дальше на камеру зайти не смог( которая в локалке openwrt) не пингуется..

грешу на модем в режиме сетевой карты. где-то читал, что с ним и vpn могут быть проблемы.

Есть два варианта:
1. Локальная сеть ходит на удаленный сервер через l2tp с NAT, который не корректно настроен
2. Локальная сеть ходит на удаленный сервер через l2tp, при этом на удаленном сервере не прописан маршрут в локальную сеть через l2tp

P.S. C наступающим новым годом!

Понимаю, что дело в микротике. пробовал proxy-arp на интерфейс бридж ставить и на лан2, ничего не меняется.

В интернете можно найти много примеров настройки L2TP over IPSEC, в том числе с использованием оборудования Mikrotik. Беда только в том, что многие из этих гайдов являются либо не совсем корректными, либо не совсем понятными для тех, кто с IPSEC до этого не сталкивался или сталкивался поверхностно, ну и почти нигде не рассматривается вариант с L2TP-сервером на базе Linux-машины и микротиком в качестве клиента (что, опять же, может вызвать у тех, кто не имел раньше опыта с настройкой IPSEC, массу вопросов и непонимания, почему же ничего не работает).
В данной статье рассматривается организация L2TP over IPSEC с использованием Ubuntu Linux в качестве сервера (например, виртуалка в каком-нибудь DigitalOcean'е) и роутером с Mikrotik RouterOS в качестве клиента. В качестве аутентификации будем использовать pre-shared key (PSK).
ip-адреса и прочие вещи, указанные в примере (чтобы было понятно, что к чему):

Внешний IP-адрес Linux-машины с L2TP-сервером: 1.1.1.1 Внешний IP-адрес Mikrotik-клиента: 2.2.2.2 (примечание: если Mikrotik имеет динамический внешний адрес, то далее будет отдельный пункт для таких случаев) Диапазон адресов для L2TP-клиентов: 10.0.0.0/29

Подразумевается, что все команды, выполняемые на сервере, делаются от имени root.

L2TP-клиентам будем раздавать адреса из диапазона 10.0.0.0/29

Сервер

В первую очередь нам нужно внести изменения в системные настройки ipv4. Дописываем в /etc/sysctl.conf следующие строчки:


Применяем изменения без перезагрузки с помощью sysctl -p, на всякий случай делаем


Устанавливаем нужные пакеты (iptables-persistent в списке нужен для сохранения конфигурации iptables и автоматического восстановления оной после ребута, если вы используете другую утилиту такого толка, например vuurmuur, то не ставьте iptables-persistent и все упоминаия о нем в дальнейшем тексте статьи просто пропускайте):


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


Сохраним конфигурацию iptables командой /etc/init.d/iptables-persistent save

Настраиваем IPSEC. В файл /etc/ipsec.conf прописываем следующее (важно - обязательно соблюдая отступы как в примере):


Теперь прописываем ключи в файл /etc/ipsec.secrets


Если внешний адрес у клиента динамический, то вместо 2.2.2.2 пишем %any

Переходим к настройке L2TP-демона. Открываем /etc/xl2tpd/xl2tpd.conf и пишем:


Прописываем опции pppd в /etc/ppp/options.xl2tpd:


И наконец добавляем L2TP-пользователей в /etc/ppp/chap-secrets:


Перезапускаем ipsec и xl2tpd


Теперь настраиваем Mikrotik. Поскольку статья ориентирована на начинающих, я постараюсь показать все на примерах скриншотов из winbox.

Важно: красным на скриншотах выделены разделы/вкладки/и т.д. для того, чтобы было проще их заметить среди остальных (многие почему-то не очень хорошо ориентируются среди множества пунктов меню в winbox, хотя по-моему там всё предельно просто и удобно). В общем, если на скриншоте приведены какие-либо параметры, значит они нужны, поэтому сверяться со скриншотами рекомендую крайне внимательно.

Открываем PPP, вкладку Profiles, добавляем новый:

Затем переходим во вкладку Policies и добавляем:


Теперь добавляем peer в одноименной вкладке (в поле Secret прописываем ключ, который на сервере добавили в /etc/ipsec.secrets):

Возвращаемся в раздел PPP, во вкладке Interfaces создаем новый интерфейс L2TP client:

Сохраняем и применяем настройки. Если все сделано правильно, то L2TP-соединение должно установиться, а в разделе IPSEC - Installed SA должны появиться две записи для наших IPSEC-туннелей.

Дополнительная информация для случаев, когда Mikrotik имеет динамический внешний ip

Будем считать, что внешним интерфейсом у нас на микротике является ether1-gateway

Сохраняем. Теперь каждые две минуты роутер будет проверять, изменился ли внешний ip, и если да, вносить его в нашу IPSEC Policy вместо старого.

Читайте также: