IPIP IPsec VPN туннель между Linux машиной и Mikrotik за NAT провайдера
upd: Отличный разбор про устройство современного стэка IPsec протоколов ESPv3 и IKEv2 опубликовал stargrave2. Рекомендую почитать.
Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)
- Eth0 1.1.1.1/32 внешний IP
- ipip-ipsec0 192.168.0.1/30 будет наш туннель
Mikrotik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 внутренний IP от провайдера. Внешний IP NAT провайдера динамический.
- ipip-ipsec0 192.168.0.2/30 будет наш туннель
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 не забыв про владельца и права.
Возвращаемся в раздел «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 |
Вкладка «Proposal» Параметр | Значение |
---|---|
Name | На ваше усмотрение (далее MyPeerProposal) |
Auth. Algorithms | sha512 |
Encr. Algorithms | aes-128-cbc |
Lifetime | 08:00:00 |
PFS Group | modp2048 |
Вкладка «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
Источник
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
- Главная
- Настройка туннелей GRE и IPIP на роутерах Mikrotik
Настройка туннелей GRE и IPIP на роутерах Mikrotik
Одна из наиболее часто решаемых системным администратором задач — объединение нескольких сетей в единое пространство, для обеспечения совместной работы с общими ресурсами (site-to-site). Обычно для этих целей используется VPN, тип которого большой роли не играет. Но именно для данной задачи более предпочтительно использовать IPIP или GRE-туннели, особенно если вам требуется хорошая пропускная способность соединения. В данной статье мы расскажем об особенностях настройки и использования данного вида подключений.
Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор — официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
Сначала коротко о протоколах. GRE (Generic Routing Encapsulation — общая инкапсуляция маршрутов) — протокол инкапсуляции, разработан компанией Cisco и предназначен для инкапсуляции пакетов сетевого уровня (L3) в IP-пакеты. IPIP (IP Encapsulation within IP — инкапсуляция IP в IP) во многом похож на GRE, но работает только с IPv4-трафиком. Наиболее популярным и используемым протоколом является GRE, его поддержка присутствует во всех современных ОС и сетевом оборудовании. Mikrotik поддерживает оба вида туннелей.
Туннели, созданные с помощью данных протоколов, не имеют никаких механизмов обеспечения безопасности (шифрование, аутентификация), поэтому в чистом виде они практически не используются. Для обеспечения нужного уровня безопасности используется IPsec, поверх которого уже разворачивается GRE или IPIP-туннель ( GRE over IPsec, IPIP over IPsec). Далее, говоря о данном типе туннелей мы будем подразумевать ввиду именно их.
Еще одна особенность указанных протоколов — они работают без сохранения состояния соединения (stateless) и понять в каком состоянии находится туннель невозможно. Мы можем только настроить обе стороны и проверить передачу данных между ними. Кроме очевидных минусов такое решение имеет и свои плюсы, GRE или IPIP-интерфейсы являются статичными и присутствуют в системе вне зависимости от состояния туннелей, что облегчает настройку маршрутизации. А состояние туннеля позволяют контролировать механизмы RouterOS, которые с заданной периодичностью умеют проверять доступность его второго конца.
Ни GRE, ни IPIP не используют порты, поэтому они не могут преодолеть NAT, это требует от обоих узлов иметь выделенные IP-адреса или находиться в одной сети. Проблема NAT частично снимается при использовании IPsec, за счет использования протокола NAT-T, но требование выделенных адресов узлов остается. Кроме того, по этой причине вы не сможете установить более одного GRE или IPIP-соединения между узлами.
Итак, подведем коротко итог: для использования GRE или IPIP-туннелей вам потребуются выделенные IP-адреса с обоих сторон и для защиты передаваемых данных обязательно использовать IPsec. Что касается оборудования, то предпочтительно использовать роутеры с аппаратной поддержкой шифрования — hEX, RB3011/4011 и все остальные модели на базе процессоров ARM. В этом случае вполне достижима пропускная способность туннеля на уровне 300-400 МБит/с. На остальных моделях роутеров (MIPSBE, SMIPS) вы получите не более 30-40 МБит/с. Подробнее об этом вы можете прочитать здесь.
Далее мы будем придерживаться следующей схемы:
Согласно которой у нас имеются две условные сети: A — 192.168.111.0/24, внешний IP-адрес 198.51.100.1 и B — 192.168.222.0/24, внешний адрес 203.0.113.1. Между ними мы будем поднимать GRE или IPIP-туннель с внутренними адресами 10.10.10.1 и 10.10.10.2.
Настройка GRE-туннеля
Открываем Winbox и переходим в Interfaces — Interface где добавляем новый интерфейс с типом GRE Tunnel, в открывшемся окне заполняем поля: Local Address — внешний IP-адрес этого роутера, Remote Address — внешний IP-адрес противоположного роутера, IPsec Secret — общий ключ IPsec, рекомендуется использовать длинную случайную строку из цифр, букв в обоих регистрах и спецсимволов. Также обязательно снимите флаг Allow Fast Path.
В терминале это можно выполнить командой:
Полностью аналогичную настройку выполняем и на втором роутере, только меняем местами Local Address и Remote Address, после чего туннель должен перейти в рабочее состояние. За отслеживание состояние туннеля отвечает параметр Keepalive, по умолчанию он предполагает десять попыток с интервалов в 10 секунд, если за это время с противоположной стороны не будет получен ответ, то туннель будет считаться неработоспособным.
Важный момент связан с настройками IPsec, RouterOS использует для туннелей настройки по умолчанию и нет возможности это переопределить, поэтому на обоих роутерах профили default в IP — IPsec — Proposals и Profiles должны иметь одинаковые настройки.
В противном случае вы будете получать ошибку при согласовании параметров IPsec:
Если все сделано правильно, то в Interfaces — Interface напротив туннеля появится флаг R — running, что означает, что туннель находится в рабочем состоянии.
Настройка IPIP-туннеля
Настройка данного вида туннеля ничем не отличается от GRE, также переходим в Interfaces — Interface и добавляем новый интерфейс с типом IP Tunnel. Указываем все те же параметры: Local Address — внешний IP-адрес этого роутера, Remote Address — внешний IP-адрес противоположного роутера, IPsec Secret — общий ключ IPsec, также снимаем флаг Allow Fast Path.
В терминале это же действие:
Затем дублируем настройки на второй роутер, заменяя местами Local Address и Remote Address, также учитываем все то, что было сказано выше о настройках IPsec.
Настройка маршрутизации
Итак, туннель поднят, теперь нужно пустить в него трафик между сетями. Прежде всего присвоим адреса туннельным интерфейсам. Согласно схеме со стороны роутера А это будет 10.10.10.1, а со стороны роутера B — 10.10.10.2. Переходим в IP — Addresses и добавляем новый адрес: Address — 10.10.10.1/24 — именно так, с указанием префикса (/24, что соответствует маске 255.255.255.0), в противном случае сеть у вас работать не будет. В поле Interface указываем имя интерфейса GRE или IPIP-туннеля.
В терминале для этого же действия выполните команду:
Где вместо interface=gre-tunnel1 укажите имя собственного туннельного интерфейса.
Аналогичные настройки следует выполнить и на втором роутере.
Теперь приступим к указанию маршрутов, для роутера A нам нужно указать маршрут к сети 192.168.222.0/24 через туннель. Переходим в IP — Routes и создаем новый маршрут. В качестве Dst. Address указываем сеть назначения — 192.168.222.0/24, в поле Gateway указываем шлюз в эту сеть — противоположный конец туннеля, который имеет адрес 10.10.10.2, после того как мы нажмем Apply в поле рядом со шлюзом появится исходящий интерфейс, в качестве которого будет выступать наш туннель.
В терминале:
На втором роутере делаем аналогичные настройки с учетом IP-адреса роутера и сети назначения.
После чего пробуем получить из одной сети доступ к узлу другой. Если все сделано правильно, то попытка увенчается успехом.
Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор — официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
Дополнительные материалы:
Mikrotik
The Dude
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Источник