斯雷纳里奥:
[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的隧道
firewall1# ssh -N -p 22 -c 3des user2@firewall_2.example.com -L xxx/10.3.0.3/xxxx之后将从internal_server_1运行rsync,类似于:
intenal1# rsync -az /some/path user@xxxx.yyyy.com:/another/path我不知道
对于这种情况,是否有任何帮助互联网资源的想法或指针?
谢谢。
发布于 2012-04-14 16:06:05
我假设firewall_2上的SSH端口(图中的“BC”)可以从外部访问。网络1 (10.2.0.*)上的计算机能否直接(即通过NAT)访问互联网,或者仅通过firewall_1代理?既然你没有具体说明,我就假设没有。
可能最简单的方法是在SSH隧道上隧道rsync,在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注意,这在绑定到其内部IP (10.2.0.2)的任意端口上运行隧道的本地(firewall_1)端(我使用了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该SSHes进入IP地址10.2.0.2上的5432端口,外部隧道转发到10.3.0.3 (server_2)端口22 (标准SSH)。
顺便说一句,如果在多台计算机上协调设置(即从firewall_1创建隧道,然后从server_1中使用它)很困难,请告诉我;稍微复杂一点,只需一个命令就可以将其全部从server_1中触发。虽然你应该能建一次外隧道,然后离开它.
发布于 2012-04-14 16:18:32
SSH有一个名为ProxyCommand的选项,它允许您将所有SSH通信传递给可以在不同主机上运行的命令。也许您可以将其中的多个链接在一起,以实现您想要做的事情。
如果您可以直接从internal_server_1连接到firewall_2,您可以使用类似的东西(例如,如果使用rsync作为-e的值):
ssh -o ProxyCommand="ssh -W %h:%p firewall_2" internal_server_2发布于 2012-04-14 08:58:28
rsync默认使用SSH (端口22)。因此,您需要在防火墙上进行端口转发,以便能够从内部服务器1同步到内部服务器2。
这可以使用iptables在firewall1和firewall2上完成,如下所示:
iptables -A POSTROUTING -s 10.2.0.3 -p tcp --dport 5022 -j SNAT --to-source AC.IP.addr.essiptables -A PREROUTING -s AC.IP.addr.ess -p tcp --dport 5022 -j DNAT --to-destination 10.3.0.3:22使用这些规则,您可以使用端口5022从内部server2访问内部server1,如下所示:
internal_server1$ ssh -p 5022 user@BC.public.ip.addrhttps://serverfault.com/questions/379411
复制相似问题