Вопрос или проблема
Не смог найти полноценно рабочий пример этого в широком интернет-пространстве.
Сценарий:
- Оба сервера на Ubuntu 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
.
Аналогично, при выполнении команды 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:
Цель заключается в том, чтобы запросы, отправленные на вторичный 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
Объяснение конфигурации
- IP-адреса туннеля: Мы создали туннель между SPOKE и HUB с адресами
10.0.0.1
для SPOKE и10.0.0.2
для HUB. Эти адреса должны быть уникальными и находиться в одной подсети. - Двунаправленный трафик: Настроенная конфигурация позволяет GRE-туннелю функционировать в обе стороны. Теперь пакеты, отправленные на вторичный IP SPOKE, будут направляться на веб-сервер HUB, и наоборот.
-
Обновление конфигурации: После обновления файлов конфигурации, необходимо применить изменения командой:
sudo netplan apply
Проверка функциональности
После применения конфигурации проверьте работу туннеля:
-
Проверка состояния туннеля на HUB:
ip a show gre1
-
Проверка состояния туннеля на SPOKE:
ip a show gre1
-
Проверка пинга: Убедитесь, что трафик может проходить через туннель, используя команды ping:
- С SPOKE на HUB:
ping 10.0.0.2
- С HUB на SPOKE:
ping 10.0.0.1
- С SPOKE на HUB:
-
Проверка доступа к странице:
На SPOKE выполните:curl -H "Host: 109.99.99.96" http://10.0.0.2
Это должно вернуть ответы от веб-сервера HUB.
Заключение
Настроив GRE-туннель между HUB и SPOKE, вы сможете направлять трафик с внешнего мира на сервер HUB, используя вторичный IP на SPOKE. Работа обоих направлений туннеля позволит вам эффективно управлять сетевым трафиком и предоставит доступ к ресурсу, расположенному на HUB. Обеспечьте также правильные настройки брандмауэра и политики безопасности для обеспечения надежной работы вашего туннеля.