Ipip tunnel mikrotik linux

IPIP IPsec VPN туннель между Linux машиной и Mikrotik за NAT провайдера

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

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

sudo install racoon ipsec-tools

Настраиваем 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:

# Генерируем ключ openssl genrsa -out server-name.pem 1024 # Извлекаем публичный ключ openssl rsa -in server-name.pem -pubout > server-name.pub.pem # Конвертируем plainrsa-gen -i server-name.pem -f server-name.privet.key plainrsa-gen -i server-name.pub.pem -f server-name.pub.key

Полученные ключи положим в папку: /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 нужно сконвертировать

plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key

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

log info; # Уровень логирования, при отладке используем Debug или Debug2. listen < isakmp 1.1.1.1 [500]; # Адрес и порт, на котором будет слушать демон. isakmp_natt 1.1.1.1 [4500]; # Адрес и порт, на котором будет слушать демон для клиентов за NAT. strict_address; # Выполнять обязательную проверку привязки к указанным выше IP. >path certificate "/etc/racoon/certs"; # Путь до папки с сертификатами. remote anonymous < # Секция, задающая параметры для работы демона с ISAKMP и согласования режимов с подключающимися хостами. Так как IP, с которого подключается Mikrotik, динамический, то используем anonymous, что разрешает подключение с любого адреса. Если IP у хостов статический, то можно указать конкретный адрес и порт. passive on; # Задает "серверный" режим работы демона, он не будет пытаться инициировать подключения. nat_traversal on; # Включает использование режима NAT-T для клиентов, если они за NAT. exchange_mode main; # Режим обмена параметрами подключения, в данном случае ---согласование. my_identifier address 1.1.1.1; # Идентифицируем наш linux хост по его ip адресу. certificate_type plain_rsa "server/server-name.priv.key"; # Приватный ключ сервера. peers_certfile plain_rsa "mikrotik.pub.key"; # Публичный ключ Mikrotik. proposal_check claim; # Режим согласования параметров ISAKMP туннеля. Racoon будет использовать значения подключающегося хоста (инициатора) для срока действия сессии и длины ключа, если его срок действия сессии больше, или длина его ключа короче, чем у инициатора. Если срок действия сессии короче, чем у инициатора, racoon использует собственное значение срока действия сессии и будет отправлять сообщение RESPONDER-LIFETIME. proposal < # Параметры ISAKMP туннеля. encryption_algorithm aes; # Метод шифрования ISAKMP туннеля. hash_algorithm sha512; # Алгоритм хеширования, используемый для ISAKMP туннеля. authentication_method rsasig; # Режим аутентификации для ISAKMP туннеля - по RSA ключам. dh_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана при согласовании ISAKMP туннеля. lifetime time 86400 sec; Время действия сессии. >generate_policy on; # Автоматическое создание ESP туннелей из запроса, пришедшего от подключающегося хоста. > sainfo anonymous

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

Читайте также:  Arm linux gnueabihf gdb
Вкладка «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.

sudo systemctl restart racoon

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

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

Читайте также:  Kali linux upgrade apt

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

sudo ip xfrm policy src 192.168.0.0/30 dst 192.168.0.0/30 dir out priority 2147483648 tmpl src 1.1.1.1 dst "IP NAT через который подключается mikrotik" proto esp reqid 0 mode tunnel src 192.168.0.0/30 dst 192.168.0.0/30 dir fwd priority 2147483648 tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1 proto esp reqid 0 mode tunnel src 192.168.0.0/30 dst 192.168.0.0/30 dir in priority 2147483648 tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1 proto esp reqid 0 mode tunnel

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

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

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

# Создаем интерфейс sudo ip tunnel add ipip-ipsec0 local 192.168.0.1 remote 192.168.0.2 mode ipip # Активируем sudo ip link set ipip-ipsec0 up # Назначаем адрес sudo ip addr add 192.168.0.1/30 dev ipip-ipsec0

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

sudo ip route add A.B.C.D/Prefix via 192.168.0.2

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

#!/bin/bash ip tunnel add ipip-ipsec0 local 192.168.0.1 remote 192.168.0.2 mode ipip ip link set ipip-ipsec0 up ip addr add 192.168.0.1/30 dev ipip-ipsec0 ip route add A.B.C.D/Prefix via 192.168.0.2

На 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
Читайте также:  Обои линукс минт 1920х1080

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

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

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

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

*mangle -A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu COMMIT

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

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

*nat -A PREROUTING -d 1.1.1.1/32 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.10.10.1 #На mikrotik, в таблице mangle, надо добавить правило route с назначением 192.168.0.1 для пакетов с адресом источника 10.10.10.1 и портов 80, 443. # Так же на linux работает OpenVPN сервер 172.16.0.1/24, для клиентов которые используют подключение к нему в качестве шлюза даем доступ в интернет -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1 COMMIT 

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

Источник

IPIP туннель между Ubuntu (16/18/20) и Mikrotik

Сегодня рассмотрим как поднять IPIP туннель с Ubuntu (16/18/20) на микротик. Такой туннель может пригодится например для переброса бэкапов с VDS к нам на сервер в локальной сети.

Схемка у нас будет примерно такая:

Микротик

В статье не рассматриваются правила фаервола (IP — Firewall). Но для работы IPIP туннеля, должен проходить трафик по протоколу ip-encap. Не забудьте настроить фильтр соответствующим образом!

Начнём с микротика, потому что независимо от того какую мы будет использовать ОС, на микротике не поменяется ничего. Первым делом добавляем интерфейс, для этого тыкаем кнопку Interfaces и жмём на плюсик, выбираем IP Tunnel. Заполняем поля: Name, Local Address (внешние адрес микротика), Remote Address (адрес убунты). Скрываем поле Keepalive, к сожалению опция работает только с микротиками.

Добавляем адрес, на вновь созданный интерфейс. IP — Addresses — кнопка плюс.

Я буду использовать для адресации внутри туннеля 30 подсеть. 30 подсеть допускает 2 адреса для хостов. В моём случае это 172.26.30.2 для микротика и 172.26.30.1 для убунты.

На этом настройка микротика завершена, переходим к Ubuntu. Настройка IPSEC для IPIP туннеля рассмотрена здесь.
IPIP туннель настраивается на версиях ниже 18 и 18 и выше разным образом, поэтому мы рассмотрим оба варианта

Ubuntu 16.04 (ifupdown)

Все команды в примерах ниже я выполняю из под рута. Если вы не работаете под рут пользователем, добавляйте sudo перед каждой командой.

Для настройки IPIP туннеля создадим файл с именем интерфейса /etc/network/interfaces.d/tun1 для этого выполним команду:

Источник

Оцените статью
Adblock
detector