18. Создание шлюза в удалённой ИС для доступа хостов к бэкап-серверу

Организация ssh-шлюза в удалённой ИС для возможности архивирования и восстановления с помощью посредника между borg-сервером и множеством borg-клиентов в условиях отсутствия прямой связности между ними.

2022-03-16

Топология

Имеется четыре машины в трёх Информационных Системах:

  • Information System 1 (IS1):
    • backup server
  • Information System 2 (IS2):
    • awx host
  • Information System 3 (IS3):
    • backup client 1
    • backup client 2
   +----------------------+
   |        IS1           |
+->| 'backup-server':ssh  |<-X
|  |                      |  |
|  +----------------------+  |
|  |        IS2           |  |
+-<|   'awx-host':ssh     |<-X
|  |                      |  |
|  +----------------------+  |
|  |        IS3           |  |
+->| 'backup-client1':ssh |<-X
|  |                      |  |
+->| 'backup-client2':ssh |<-X
   |                      |
   +----------------------+

Так как ssh-доступ между ‘Backup Server’ и ‘Backup Clients’ отсутствует, тогда как с хоста ‘Awx Host’ мы можем подключиться к любому хосту, то решением является создание с ‘Awx Host’ временного туннеля-шлюза между одним из Бэкап-клиентов, например, ‘backup-client1’, и Бэкап-сервером. Остальные Бэкап-клиенты смогут обратиться на произвольно выбранный tcp-порт хоста ‘backup-client1’, что позволит им общаться с Бэкап-сервером напрямую.

Решение

Находясь на AWX-хосте, выбираем призвольную машину в удалённой третьей ИС с бэкап-клиентами, и модернизируем на ней настройки sshd для возможности создания ssh-шлюза. Напомню, что такая возможность по умолчанию ограничена открытием порта на lo-интерфейсе 127.0.0.1, вместо интересующего нас 0.0.0.0.

‘backup-client1’. Включение ssh gateway

Итак, на хосте ‘backup-client1’ включаем опцию ‘GatewayPorts’ и перезапускаем демон sshd:

sed -i 's/#GatewayPorts no/GatewayPorts yes/' /etc/ssh/sshd_config
systemctl restart sshd

Проверка:

sshd -T | grep gatewayports

‘awx-host’. Прокидывание временного туннеля-шлюза между ‘backup-client1’ и ‘backup-server’

На машине ‘awx-host’ выполняем создание туннеля-шлюза. Для удобства последующего закрытия туннеля, используем мультиплексирование с созданием управляющего сокета, через который сможем подать команду на закрытие туннеля. Кроме того, запретим подачу команд через этот туннель удалённой машине, а также переведём соединение в фоновый режим:

ssh -MS /tmp/borg-is3 -Nf -R 0.0.0.0:2222:backup-server:22 eugene@backup-client1

После окончания операций бэкапа, через управляющий сокет, подаём команду закрыть туннель:

ssh -S /tmp/borg-is3 -O exit eugene@backup-client1

Настройка клиентов

Ключ ssh для доступа к borg-репозиторию создаём в ~/.ssh, а в ~/.bashrc добавляем переменные для работы с borg-репозиторием:

export BORG_RSH="ssh -i /root/.ssh/borg1"
export BORG_REPO="ssh://_borg@backup-client1:2222/./repo1"