Я не думаю, что существует определенный предел.
Единственный предел, который я вижу, - то, что изменения сохранены в течение 30 дней, если у Вас нет подписки воришки.
Я предполагаю, что порт SSH на firewall_2 («BC» на вашей диаграмме) доступен извне. Могут ли компьютеры в сети 1 (10.2.0. *) Подключаться к Интернету напрямую (т.е. через NAT) или только через проксирование через firewall_1? Поскольку вы не указываете, я предполагаю, что нет.
Вероятно, самый простой способ сделать - это туннелировать rsync через SSH, туннелируемый через SSH (очевидно, что «простейший» - относительный). Сначала создайте внешний туннель, запустив это на firewall_1:
firewall_1# ssh -N -p 22 -c 3des user2@firewall_2.example.com -L 10.2.0.2:5432:10.3.0.3:22
Обратите внимание, что это запускает локальный (firewall_1) конец туннеля, привязанный к его внутреннему IP (10.2.0.2), на произвольном порту (я использовал 5432).
Затем с server_1 запустите rsync и используйте его параметр -e
, чтобы запустить его через SSH:
server_1# rsync -e "ssh -N -p5432 -c 3des" -a /local/path server2user@10.2.0.2:/remote/path
Этот SSH направляется в порт 5432 на IP-адресе 10.2.0.2, который внешний туннель перенаправляет на 10.3.0. 3 (server_2) порт 22 (стандартный SSH).
Кстати, если координировать настройку на нескольких компьютерах (т.е. создать туннель из firewall_1, а затем использовать его из server_1) сложно, дайте мне знать; с немного большей сложностью, можно запустить все это с server_1 с помощью одной команды. Хотя вы должны иметь возможность настроить внешний туннель один раз, а затем просто оставить его ...
SSH имеет параметр под названием ProxyCommand, который позволяет передавать весь трафик SSH в команду, которую можно запустить на другом хосте. Вероятно, вы можете связать несколько из них вместе, чтобы достичь того, что вы хотите сделать.
Если вы можете напрямую подключиться с internal_server_1 к firewall_2, вы можете использовать что-то вроде этого (например, как значение для -e
, если вы используете rsync):
ssh -o ProxyCommand="ssh -W %h:%p firewall_2" internal_server_2
rsync по умолчанию использует SSH (порт 22). Итак, вам необходимо выполнить переадресацию портов на ваших брандмауэрах, чтобы иметь возможность rsync с внутреннего сервера 1 на внутренний сервер 2.
Это можно сделать с помощью iptables
на firewall1 и firewall2 следующим образом:
На брандмауэре1
iptables -A POSTROUTING -s 10.2.0.3 -p tcp --dport 5022 -j SNAT --to-source AC.IP.addr.ess
На брандмауэре2
iptables -A PREROUTING -s AC.IP.addr.ess -p tcp --dport 5022 -j DNAT --to-destination 10.3.0.3:22
Используя такие правила, вы можете получить доступ к внутреннему серверу2 с внутреннего сервера1, используя порт 5022, например:
internal_server1$ ssh -p 5022 user@BC.public.ip.addr
тестированная полная команда выглядит следующим образом:
rsync -av --delete -e "ssh -o ProxyCommand='ssh -l username -W %h:%p jumphost-ip'" ./source_path/ username@internal-ip:/dest_path/