Назад | Перейти на главную страницу

Как я могу скопировать с сервера в Интернете на сервер за маршрутизатором, выполняющим NAT?

У меня есть и VPS, и сервер за брандмауэром NAT. Я хочу использовать сервер за брандмауэром NAT в качестве резервного для VPS. VPS должен иметь возможность инициировать процесс резервного копирования и отправлять резервные копии через Интернет, минуя маршрутизатор, выполняющий NAT, и на резервную машину. У меня нет контроля над маршрутизатором, поэтому моя резервная машина не имеет общедоступного IP-адреса.

Есть ли у меня способ открыть SSH-туннель (или эквивалент) с машины резервного копирования на сервер, чтобы сервер мог копировать файлы через это соединение?

Топология такая:

 ________                      _______________      ________
| server | -- ( internet ) -- | router w/ NAT | -- | backup |
 --------                      ---------------      --------

Я делаю это, но делаю это наоборот.

У меня на сервере запущен сервер OpenVPN, а в резервной копии работает клиент OpenVPN. Это потому, что сервер не меняет IP-адреса. Теперь, пока работает резервная копия, не имеет значения, какой IP-адрес имеет блок NAT, он всегда будет иметь один и тот же IP-адрес в сети OpenVPN, и сервер всегда может его найти.

Также в качестве бонуса, поскольку соединение OpenVPN является "исходящим" через NAT, пока порт UDP разрешен (что по умолчанию на большинстве устройств), для устройства NAT также не требуется специальной конфигурации.

Откройте SSH-соединение от домашнего сервера к VPC, включите туннелирование, чтобы компьютер VPC мог подключаться к службам на домашнем компьютере; rsync или ftp, вероятно, будет проще всего.

Отвечая на свой вопрос:

Это просто говорит о том, что все, что вам нужно, это новый поисковый запрос: «обратный», как в «обратном туннеле ssh».

Итак, чтобы создать обратный туннель SSH, запустите SSH с машины за NAT (резервная копия, в моем примере) с -R и укажите, какой удаленный порт привязать к локальному порту, поэтому:

ssh -R remote_bind_port:localhost:local_port remote_user@server

Так, например:

ssh -R 1222:localhost:22 backup@example.com

Свяжет порт 1222 на example.com с портом localhost 22. То есть: пользователь на example.com может сделать ssh localhost -p 1222 для прохождения NAT и подключения к серверу SSH на машине за маршрутизатором.

Протокол безопасной передачи файлов - довольно хорошее и безопасное решение, но есть и другие решения, такие как использование rsync или, возможно, FTP.

Для rsync вы можете открыть порт № 873 на маршрутизаторе и перенаправить его на резервную цель. Для простой проблемы с FTP есть два симметричных решения, первое - открыть ftp-порт на резервной цели и снова выполнить пересылку. В второй Кажется, это полезно для вас, даже если у вас нет доступа к маршрутизатору для изменения правила NAT, в этом случае вам нужно настроить демон FTP на сервере в качестве репозитория и создать синхронизированный скрипт, который будет выполнять перенос на резервную машину .

Кроме того, решение для туннелирования кажется хорошей альтернативой, поэтому я рекомендую вам OpenVPN.