Туннель SSH и Rsync через два прокси/брандмауэра

Я не думаю, что существует определенный предел.

Единственный предел, который я вижу, - то, что изменения сохранены в течение 30 дней, если у Вас нет подписки воришки.

3
задан 14 April 2012 в 11:35
4 ответа

Я предполагаю, что порт 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 с помощью одной команды. Хотя вы должны иметь возможность настроить внешний туннель один раз, а затем просто оставить его ...

1
ответ дан 3 December 2019 в 06:41

SSH имеет параметр под названием ProxyCommand, который позволяет передавать весь трафик SSH в команду, которую можно запустить на другом хосте. Вероятно, вы можете связать несколько из них вместе, чтобы достичь того, что вы хотите сделать.

Если вы можете напрямую подключиться с internal_server_1 к firewall_2, вы можете использовать что-то вроде этого (например, как значение для -e , если вы используете rsync):

ssh -o ProxyCommand="ssh -W %h:%p firewall_2" internal_server_2
2
ответ дан 3 December 2019 в 06:41

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
0
ответ дан 3 December 2019 в 06:41

тестированная полная команда выглядит следующим образом:

rsync -av --delete -e "ssh -o ProxyCommand='ssh -l username -W %h:%p jumphost-ip'" ./source_path/ username@internal-ip:/dest_path/
0
ответ дан 3 December 2019 в 06:41

Теги

Похожие вопросы