18. Создание шлюза в удалённой ИС для доступа хостов к бэкап-серверу
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 dmr@backup-client1
После окончания операций бэкапа, через управляющий сокет, подаём команду закрыть туннель:
ssh -S /tmp/borg-is3 -O exit dmr@backup-client1
Настройка клиентов
Ключ ssh для доступа к borg-репозиторию создаём в ~/.ssh
, а в ~/.bashrc
добавляем переменные для работы с borg-репозиторием:
export BORG_RSH="ssh -i /root/.ssh/borg1"
export BORG_REPO="ssh://borg@backup-client1:2222/./repo1"