首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过两个代理/防火墙进行SSH隧道和Rsync

通过两个代理/防火墙进行SSH隧道和Rsync
EN

Server Fault用户
提问于 2012-04-14 08:35:47
回答 4查看 5.8K关注 0票数 3

斯雷纳里奥:

代码语言:javascript
复制
[internal_server_1]AA------AB[firewall_1]AC----+
          10.2.0.3-^        ^-10.2.0.2         |
                                            internet
          10.3.0.3-v        v-10.3.0.2         |
[internal_server_2]BA------BB[firewall_2]BC----+

端口AC,BC有有效的互联网地址。所有系统都运行linux,并拥有对所有系统的根访问权限。

需要安全地将内部_server_1:/若干/路径同步到内部_server_2:/另一个/路径

我的想法是在两个防火墙之间建立ssh安全隧道,例如来自firewall_1的隧道

代码语言:javascript
复制
firewall1# ssh -N -p 22 -c 3des user2@firewall_2.example.com -L xxx/10.3.0.3/xxxx

之后将从internal_server_1运行rsync,类似于:

代码语言:javascript
复制
intenal1# rsync -az /some/path user@xxxx.yyyy.com:/another/path

我不知道

  • 如何为rsync创建正确的ssh隧道(哪些端口需要隧道)
  • 我要去哪里做rsync?(如属ssh隧道,则为远端通讯地址)

对于这种情况,是否有任何帮助互联网资源的想法或指针?

谢谢。

EN

回答 4

Server Fault用户

回答已采纳

发布于 2012-04-14 16:06:05

我假设firewall_2上的SSH端口(图中的“BC”)可以从外部访问。网络1 (10.2.0.*)上的计算机能否直接(即通过NAT)访问互联网,或者仅通过firewall_1代理?既然你没有具体说明,我就假设没有。

可能最简单的方法是在SSH隧道上隧道rsync,在SSH上隧道(显然,“最简单”是相对的)。首先,通过在firewall_1上运行以下命令构建外部隧道:

代码语言:javascript
复制
firewall_1# ssh -N -p 22 -c 3des user2@firewall_2.example.com -L 10.2.0.2:5432:10.3.0.3:22

注意,这在绑定到其内部IP (10.2.0.2)的任意端口上运行隧道的本地(firewall_1)端(我使用了5432)。

然后,从server_1运行rsync并使用它的-e选项在SSH上运行它:

代码语言:javascript
复制
server_1# rsync -e "ssh -N -p5432 -c 3des" -a /local/path server2user@10.2.0.2:/remote/path

该SSHes进入IP地址10.2.0.2上的5432端口,外部隧道转发到10.3.0.3 (server_2)端口22 (标准SSH)。

顺便说一句,如果在多台计算机上协调设置(即从firewall_1创建隧道,然后从server_1中使用它)很困难,请告诉我;稍微复杂一点,只需一个命令就可以将其全部从server_1中触发。虽然你应该能建一次外隧道,然后离开它.

票数 1
EN

Server Fault用户

发布于 2012-04-14 16:18:32

SSH有一个名为ProxyCommand的选项,它允许您将所有SSH通信传递给可以在不同主机上运行的命令。也许您可以将其中的多个链接在一起,以实现您想要做的事情。

如果您可以直接从internal_server_1连接到firewall_2,您可以使用类似的东西(例如,如果使用rsync作为-e的值):

代码语言:javascript
复制
ssh -o ProxyCommand="ssh -W %h:%p firewall_2" internal_server_2
票数 2
EN

Server Fault用户

发布于 2012-04-14 08:58:28

rsync默认使用SSH (端口22)。因此,您需要在防火墙上进行端口转发,以便能够从内部服务器1同步到内部服务器2。

这可以使用iptables在firewall1和firewall2上完成,如下所示:

On firewall1

代码语言:javascript
复制
iptables -A POSTROUTING -s 10.2.0.3 -p tcp --dport 5022 -j SNAT --to-source AC.IP.addr.ess

On firewall2

代码语言:javascript
复制
iptables -A PREROUTING -s AC.IP.addr.ess -p tcp --dport 5022 -j DNAT --to-destination 10.3.0.3:22

使用这些规则,您可以使用端口5022从内部server2访问内部server1,如下所示:

代码语言:javascript
复制
internal_server1$ ssh -p 5022 user@BC.public.ip.addr
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/379411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档