Полное работающее примеры программирования симметричного GRE-туннеля с помощью netplan?

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

Не смог найти полноценно рабочий пример этого в широком интернет-пространстве.

Сценарий:

  • Оба сервера на Ubuntu 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.

Аналогично, при выполнении команды curl --interface 109.99.99.96 icanhazip.com на HUB ожидаемый вывод будет 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-туннелей может представлять собой сложную задачу, особенно когда речь идет о двунаправленной связи между двумя серверами. В данном примере мы создадим полноценный симметричный GRE-туннель между HUB и SPOKE с использованием Netplan на операционной системе Ubuntu 22.04. Данная инструкция позволит вам успешно настроить необходимую конфигурацию.

Сценарий

  • HUB (сервер с веб-сервером): 23.20.20.10
  • SPOKE (сервер с общедоступным IP):
    • Основной IP: 109.99.99.82
    • Вторичный IP: 109.99.99.96

Цель заключается в том, чтобы запросы, отправленные на вторичный IP SPOKE, обрабатывались веб-сервером HUB. В результате запуска команды curl http://109.99.99.96 мы должны получить содержимое сайта, размещенного на 23.20.20.10, а также видеть вторичный IP при выполнении команд с HUB.

Настройка GRE-туннеля

Конфигурация 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:
        - 10.0.0.1/30           # IP для SPOKE в туннеле
  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
      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 в туннеле
  version: 2

Объяснение конфигурации

  1. IP-адреса туннеля: Мы создали туннель между SPOKE и HUB с адресами 10.0.0.1 для SPOKE и 10.0.0.2 для HUB. Эти адреса должны быть уникальными и находиться в одной подсети.
  2. Двунаправленный трафик: Настроенная конфигурация позволяет GRE-туннелю функционировать в обе стороны. Теперь пакеты, отправленные на вторичный IP SPOKE, будут направляться на веб-сервер HUB, и наоборот.
  3. Обновление конфигурации: После обновления файлов конфигурации, необходимо применить изменения командой:

    sudo netplan apply

Проверка функциональности

После применения конфигурации проверьте работу туннеля:

  1. Проверка состояния туннеля на HUB:

    ip a show gre1
  2. Проверка состояния туннеля на SPOKE:

    ip a show gre1
  3. Проверка пинга: Убедитесь, что трафик может проходить через туннель, используя команды ping:

    • С SPOKE на HUB:
      ping 10.0.0.2
    • С HUB на SPOKE:
      ping 10.0.0.1
  4. Проверка доступа к странице:
    На SPOKE выполните:

    curl -H "Host: 109.99.99.96" http://10.0.0.2

    Это должно вернуть ответы от веб-сервера HUB.

Заключение

Настроив GRE-туннель между HUB и SPOKE, вы сможете направлять трафик с внешнего мира на сервер HUB, используя вторичный IP на SPOKE. Работа обоих направлений туннеля позволит вам эффективно управлять сетевым трафиком и предоставит доступ к ресурсу, расположенному на HUB. Обеспечьте также правильные настройки брандмауэра и политики безопасности для обеспечения надежной работы вашего туннеля.

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

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