Вопрос или проблема
Не удалось найти полный рабочий пример этого во всем широком Интернете. Этот вопрос похож на Использовать рабочий 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 – это просто примеры.)
Цель:
Цель состоит в том, чтобы получить доступ к вторичному 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:
-
На HUB:
curl --interface 10.0.0.2 icanhazip.com
Ожидаемый результат:
109.99.99.96
– IP адрес SPOKE. -
На SPOKE:
curl --interface 10.0.0.1 icanhazip.com
Ожидаемый результат:
23.20.20.10
– IP адрес HUB.
Заключение
Настройка GRE туннеля через Netplan может показаться сложной, но при внимательном подходе и понимании необходимых параметров, задача становится вполне выполнимой. Спроектированная конфигурация обеспечит необходимую двунаправленную связь и доступ к веб-сервисам, развёрнутым на HUB, через вторичный IP на SPOKE. Не забудьте протестировать соединение и при необходимости обновить файлы конфигурации для устранения возможных проблем.