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:
Эти надписи это какая-то недоработка винбокса, очевидно и пир у нас есть и метод авторизации более чем надёжный. Чтобы убрать предупреждение, сначала нажимаем 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 довольно простая программа, назначение которой создавать SSL туннели. Необходимость в них может возникнуть если программа, слушающая какой-то порт, не поддерживает шифрование, […]
Как подружить Debian Squeeze и Adobe Flash с PulseAudio
PulseAudio незаменимая вещь в Desktop-инсталляции Linux, но к сожалению не все приложения умеют с ним работать. К счастью это дело поправимое, в […]
И еще немного про 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 вместо старого.
Читайте также: