Создание GRE-туннеля с помощью netplan

Вопрос или проблема

Не удалось найти полный рабочий пример этого во всем широком Интернете. Этот вопрос похож на Использовать рабочий GRE-туннель по умолчанию на удаленном сервере, но с использованием netplan вместо команд ip. На самом деле, использование команд ip работает для меня, поэтому проблем с маршрутизаторами между серверами нет. Однако мне нужно сделать это способом netplan:

Сценарий:

  • Оба сервера на Ubunutu 22.04
  • Машина “HUB” (хостит веб-сервер): 23.20.20.10
  • Машина “SPOKE” (имеет “публичный” IP):
    • Основной IP: 109.99.99.82
    • Вторичный IP: 109.99.99.96

(Все IP – это просто примеры.)

Цель:

Цель состоит в том, чтобы получить доступ к вторичному IP SPOKE из внешнего мира, но на самом деле получить веб-страницу с машины HUB:

Таким образом, curl http://109.99.99.96 будет отдавать страницу, которая на самом деле идет с 23.20.20.10.

Аналогично, когда в терминале на HUB, выполнив curl --interface 109.99.99.96 icanhazip.com, ожидаемый вывод будет 109.99.99.96, даже если команда была выдана с HUB, реальный IP которого 23.20.20.10.

Чтобы ответ был принят, туннель должен работать в обоих направлениях.

На SPOKE файл /etc/netplan/SPOKE.yaml в настоящее время выглядит следующим образом:

network:
  ethernets:
    eth0:
      addresses:
      - 109.99.99.82/24   # Локальный основной IP на SPOKE
      - 109.99.99.96      # Локальный вторичный IP на SPOKE
      routes:
        - to: default
          via: 109.99.99.1
      nameservers:
        addresses:
        - 1.1.1.1
        - 8.8.8.8
  tunnels:
    gre1:
      mode: gre
      local: 109.99.99.82       # Локальный основной IP на SPOKE
      remote: 23.20.20.10       # Удаленный основной IP на HUB
      addresses:
        - 109.99.99.96/24       # IP туннеля от SPOKE к HUB
  renderer: networkd
  version: 2

На HUB файл /etc/netplan/HUB.yaml в настоящее время выглядит следующим образом:

network:
  ethernets:
    enp0:
      addresses:
      - 23.20.20.10/29
      nameservers:
        addresses:
        - 1.1.1.1
        - 8.8.8.8
        search: []
      routes:
      - to: default
        via: 23.20.20.1
  version: 2

Мой вопрос:

Пожалуйста, исправьте конфигурацию, чтобы туннель работал в обоих направлениях! Как показано здесь, конфигурация абсолютно ничего не делает ни в одном направлении.

SPOKE.yaml был создан, исходя из документации и некоторых “похожих” примеров в Интернете.

HUB.yaml – это заводская настройка, у меня нет идеи, что там вставить.

Пожалуйста, помогите, я не смог найти даже ОДИН рабочий пример полного дуплексного GRE-туннеля, сделанного с помощью netplan в Интернете!

Спасибо! ❤️

Ответ или решение

Настройка GRE туннеля с использованием Netplan для Ubuntu 22.04: Полное руководство

В данной статье мы рассмотрим, как правильно настроить GRE туннель между двумя серверами на базе Ubuntu 22.04, используя Netplan. Мы уделим внимание корректировке конфигурационных файлов для обеих машин – HUB и SPOKE, чтобы обеспечить двунаправленную передачу данных через туннель.

Сценарий

В вашем сценарии у нас есть две машины:

  • HUB (хостит веб-сервер) с IP-адресом 23.20.20.10.
  • SPOKE (с публично доступным IP) с основными IP-адресами 109.99.99.82 и 109.99.99.96.

Цель состоит в том, чтобы запрашивая curl http://109.99.99.96, получать страницу с HUB, а не SPOKE. Также необходимо, чтобы команды на HUB, выполняемые через IP SPOKE, возвращали корректный внешний адрес.

Настройка конфигурации

Конфигурация на SPOKE

Для настройки GRE туннеля на спомощью Netplan мы начнем с корректировки файла /etc/netplan/SPOKE.yaml:

network:
  ethernets:
    eth0:
      addresses:
      - 109.99.99.82/24  # Локальный основной IP на SPOKE
      - 109.99.99.96     # Локальный вторичный IP на SPOKE
      routes:
        - to: default
          via: 109.99.99.1
      nameservers:
        addresses:
        - 1.1.1.1
        - 8.8.8.8
  tunnels:
    gre1:
      mode: gre
      local: 109.99.99.82       # Локальный основной IP на SPOKE
      remote: 23.20.20.10       # Удаленный основной IP на HUB
      addresses:
        - 10.0.0.1/30          # IP адрес на стороне SPOKE для GRE туннеля
      routes:
        - to: 10.0.0.0/30
          via: 10.0.0.2        # MARSHALL: IP адрес на стороне HUB для GRE туннеля
  renderer: networkd
  version: 2
  • Обратите внимание: Мы используем внутренний адрес 10.0.0.1 для SPOKE и 10.0.0.2 для HUB. Это выделенные адреса для вашего GRE туннеля.

Конфигурация на HUB

Теперь перейдем к редактированию файла /etc/netplan/HUB.yaml:

network:
  ethernets:
    enp0:
      addresses:
      - 23.20.20.10/29
      nameservers:
        addresses:
        - 1.1.1.1
        - 8.8.8.8
      routes:
      - to: default
        via: 23.20.20.1
  tunnels:
    gre1:
      mode: gre
      local: 23.20.20.10       # Локальный основной IP на HUB
      remote: 109.99.99.82     # Удаленный основной IP на SPOKE
      addresses:
        - 10.0.0.2/30          # IP адрес на стороне HUB для GRE туннеля
      routes:
        - to: 10.0.0.0/30
          via: 10.0.0.1        # MARSHALL: IP адрес на стороне SPOKE для GRE туннеля
  version: 2

Окончательная установка и активация

После того как обе конфигурации настроены, примените их с помощью команды:

sudo netplan apply

Проверка работы туннеля

Для проверки работоспособности GRE туннеля выполните следующие команды на HUB и SPOKE:

  1. На HUB:

    curl --interface 10.0.0.2 icanhazip.com

    Ожидаемый результат: 109.99.99.96 – IP адрес SPOKE.

  2. На SPOKE:

    curl --interface 10.0.0.1 icanhazip.com

    Ожидаемый результат: 23.20.20.10 – IP адрес HUB.

Заключение

Настройка GRE туннеля через Netplan может показаться сложной, но при внимательном подходе и понимании необходимых параметров, задача становится вполне выполнимой. Спроектированная конфигурация обеспечит необходимую двунаправленную связь и доступ к веб-сервисам, развёрнутым на HUB, через вторичный IP на SPOKE. Не забудьте протестировать соединение и при необходимости обновить файлы конфигурации для устранения возможных проблем.

Оцените материал
Добавить комментарий

Капча загружается...