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

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

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

ubuntu 16 (ifupdown)
ubuntu 18/20 (netplan)

Микротик

В статье не рассматриваются правила фаервола (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 перед каждой командой.
для просмотра списка интерфейсов можно набрать команду ip a

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

nano /etc/network/interfaces.d/tun1

И вставим в этот файл текст:

auto tun1
    iface tun1 inet static
    address 172.26.30.1
    netmask 255.255.255.252
    pre-up ip tunnel add tun1 mode ipip local 98.213.46.5 remote 145.16.220.86
    post-down iptunnel del tun1

Где:

    • tun1 — название интерфейса туннеля
    • 172.26.30.1 — локальный адрес внутри туннеля
    • 98.213.46.5 — внешний адрес Ubuntu
    • 145.16.220.86 — внешний адрес микротика

Сохраняем файл (Ctrl + O затем Ctrl + X выходим). После этого можем поднимать интерфейс командой ifup tun1.  Для проверки воспользуемся командой ip a:

С этого момента пакеты между адресами 172.26.30.1  и 172.26.30.2 будут ходить по туннелю. Можем проверить коммандой ping

Но на схеме я так же указал внутреннюю подсеть за микротиком — 172.16.220.0/24. Давайте так же добавим маршрут в неё. Для этого в файл который мы только что создали, /etc/network/interfaces.d/tun1 добавим строчку:

up ip ro add 172.16.220.0/24 dev tun1

файлик после этого будет выглядеть примерно так:

auto tun1
    iface tun1 inet static
    address 172.26.30.1
    netmask 255.255.255.252
    pre-up ip tunnel add tun1 mode ipip local 98.213.46.5 remote 145.16.220.86
    up ip route add 172.16.220.0/24 dev tun1
    post-down iptunnel del tun1

Для применения изменений передёрнем интерфейс.

ifdown tun1
ifup tun1

Проверим таблицу маршрутизации командой route -n. Должно выглядеть примерно так:

На этом всё. Пакеты будут успешно проходить. К созданному туннелю можно настроить IPSEC шифрование. Переходим к IPIP туннелю с помощью нетплана.

Ubuntu 18.04  / Ubuntu 20.04 (netplan)

Как известно, начиная с 18 версии в Ubuntu решили использовать netplan. Примеры настройки приведены — здесь. Процесс очень похож на настройку туннеля в 16 версии, отличается немного синтаксис.

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

Для настройки туннеля без маршрута добавим файл: /etc/netplan/02-ipip-tun1.yaml

nano /etc/netplan/02-ipip-tun1.yaml

вставляем следующий текст:

network:
  version: 2
  tunnels:
    tun1:
      mode: ipip
      remote: 145.16.220.86
      local: 98.213.46.5
      addresses:
        - 172.26.30.1/30
Поскольку это yaml формат, то количество отступов (обязательно пробелов) имеет значение. Каждый новый вложенный параметр должен отступать от предыдущего минимум на 2 пробела.

Где:

    • tun1 — название интерфейса туннеля
    • 172.26.30.1/30 — локальный адрес внутри туннеля
    • 98.213.46.5 — внешний адрес Ubuntu
    • 145.16.220.86 — внешний адрес микротика
    • ipip — тип туннеля.

Для применения настроек набираем:

netplan apply

Как видим настройка даже чуть проще чем в 16 версии, просто непривычно.

Для добавления маршрута внутренней сети, приводим наш ямл к следующему виду:

network:
  version: 2
  tunnels:
    tun1:
      mode: ipip
      remote: 145.16.220.86
      local: 98.213.46.5
      addresses:
       - 172.26.30.1/30
      routes:
        - to: 172.16.220.0/24
          via: 172.26.30.2
          on-link: true

Тут тоже всё довольно просто:

  • to — куда мы добавляем маршрут;
  • via — адрес шлюза;
  • on-link — добавлять маршрут только после поднятия интерфейса.

Применение изменений всё той же командой netplan apply. На этот туннель так же как и в 16 версии можно повесить IPSEC.

Если остались вопросы — задавайте их в комментариях.