我相信Google的答案可以在Google上find,但我真的不知道我在为Google做些什么。
我们有两个networking; 我们自己的内部networking(192.168.0。[0-255])和我们的'服务器'networking(内部地址是192.168.1。[0-255])。 我们的服务器networking位于一个远程数据中心,我们的服务器被聘用dedis(IE我们完全控制服务器软件,RedHat 5/6和FreeBSD的混合,但不能控制networking硬件或服务器硬件)。 我们的服务器networking位于防火墙的后面,限制了某些外部端口,我们也有完全的软件控制,但是它的function仅限于防火墙/ NAT(没有花哨的VPN东西等)。 我们的内部networking是相当基本的,我们有一个20Mb / s的线路连接到一个相当典型的Netgear家庭路由器。 我们也有一个运行我们的networking服务(DNS,DHCP等)的Mac OS / X服务器。
我们希望能够做到的是,从这些完全独立的networking中,只需使用IP地址或内部主机名(相同的区别)即可访问另一个networking上的服务器。
所以我坐在我的工作站上,192.168.0.10,在我们的内部networking上。 如果我打开我的terminal和ssh 192.168.1.20它将连接到我们的服务器networking中的192.168.1.20的服务器,就好像它坐在房间*一样。 同样的,如果我是通过SSH连接到服务器,并想从我们的内部networking上的Mac服务器上取下东西,我应该可以只用scp 192.168.0.100:file ./ 。
这扩展到其他的东西,比如在服务器上挂载一个NFS驱动器到我们的桌面*,连接到我们的数据库,而不必打开防火墙上的端口(我们将它们locking到我们的静态外部IP地址,但仍然很烦人)。
我知道我想要什么,但我不确定从哪里开始。 我想最简单的方法是在两个站点之间build立某种VPN连接,然后我们通过VPN隧道路由某些IP地址,我不知道这是否可能。
有没有什么软件(我们可以在我们的内部networking上获得新的硬件,但就像我说我们没有物理访问我们的服务器基础设施)将实现这一目标?
这可能是一个愚蠢的问题,有一个明显的答案,但我仍然难住。
*性能可能很糟糕,但不会比远程连接更糟糕。
VPN可以解决你的问题。 我推荐OpenVPN。
但是如果你只需要SSH和SCP,那么只要在边界路由器上configurationNAT设置就足够了。
例如:在分离的工作场所的边界路由器上打开端口(例如)2200到2210
喜欢这个:
之后,你可以连接到独立的工作场所:
ssh <wan_ip_of_detached_workplace> -p 2200
这将连接到分离的工作场所的192.168.1.20。
希望这会有所帮助。
编辑:这个答案的大部分可以帮助你ssh到无缝的内部networking上的一个盒子。 请参阅下面“ 使用其他networking资源 ”一节中的内容来了解更多信息。
你也可以用SSH做这个漂亮的事情:
第1步 :设置/select一个跳转框
许多企业networking有什么通常被称为“堡垒主机”或跳转框。 这台机器通常有许多networking服务被禁用,保存ssh(通常在一个非标准的端口上)。 如果您的“服务器”networking中没有这样的机器,请从您的内部networking中通过sshfind一个可用于testing的框。
第2步 :编辑你的sshconfiguration文件
find你的sshconfiguration文件(通常在~/.ssh/config )并启动你最喜欢的文本编辑器。 假设您的跳转框位于jump.foo.com ,您想要访问的主机之一位于server.foo.com 。 包括以下这些:
Host server.foo.com User <username> ProxyCommand /usr/bin/nc -x localhost:1080 %h %p Host jump.foo.com User <username> DynamicForward localhost:1080
用你的用户名replace<username> 。 您可能还需要编辑nc (netcat)的path:请注意,这是您本地主机上netcat的path。 如果configuration没有100%的意义,我会分解:
jump.foo.comconfiguration包括一个指令来启动一个监听指定端口的SOCKS代理(在我的例子中,端口1080)。 这意味着当你jump.foo.com到jump.foo.com ,你也会自动启动一个SOCKS代理…请继续关注。
server.foo.comconfiguration说:当我SSH到server.foo.com ,执行指定的ProxyCommand:
/usr/bin/nc -x localhost:1080 %h %p
其中-x选项允许您指定代理地址(在这种情况下,我们刚打开的端口1080上的localhost上的连接), %h = host和%p = port。
第3步 :ssh
ssh到jump.foo.com (我使用tmux ,一个屏幕替代品,并且总是有一个窗口打开,并连接到我的jump.foo.com )。 现在,在一个单独的窗口/terminal,尝试简单地直接SSH到server.foo.com 。 我应该注意到, server.foo.com可以是内部主机名或内部IP地址(在您的服务器networking上)。
假设你有一切权利,你应该传递到server.foo.com没有问题。
有很多方法可以使这个过程更加无缝,更强大的sshconfiguration和bash别名。 下面是我在第一次设置时用作参考的一些文章,它应该指向正确的方向:
http://blog.gidley.co.uk/2009/03/tunnelling-ssh-over-socks-proxy.html http://blog.electricjellyfish.net/2006/03/dynamicforward-where-have-you-been -all.html http://bent.latency.net/bent/git/goto-san-connect-1.85/src/connect.html
使用其他networking资源
假设你需要远程桌面到你的“服务器”networking上的主机windows.foo.com 。 在一个窗口中,
ssh -L 3390:windows.foo.com:3389 jump.foo.com
这将在localhost上的端口3390上的所有stream量转发到windows.foo.com上的端口3389(标准远程桌面端口)。 要真正远程访问windows.foo.com ,请将远程桌面应用程序指向localhost:3390并且应该能够透明地连接到windows.foo.com 。
man ssh或Google的“ssh端口转发”了解更多信息。
还要记住,你可以随时
telnet <server> <port>
确保你可以和port上的<server>交谈
telnet localhost 3390
在foo.comnetworking上添加新主机
您不必为跳转框中的每个服务器configuration一个条目。 只是
ssh -o "ProxyCommand /usr/bin/nc -x localhost:1080 %h %p" new.server.foo.com
是的,你应该能够通过主机名或IP访问内部networking上的主机。
就像我们在sshconfiguration文件中定义它一样,你可以通过-o选项将ProxyCommand arg传递给ssh。 同样,这应该通过在端口1080上的同一SOCKS代理将您的sshstream量发送到new.server.foo.com 。
对于每个foo.com域,您只需在您的sshconfiguration文件中添加通配符规则即可:
Host *.foo.com User <username> ProxyCommand /usr/bin/nc -x localhost:1080 %h %p
如果你想SSH的主机,没有在你的configuration文件中的条目,你也可以使用bash别名:
alias ssh-socks='ssh -o "ProxyCommand /usr/bin/nc -x localhost:1080 %h %p"' ssh-socks newer.server.foo.com
我不确定DNS请求是由您的localhost ,还是从跳转框发生。 当我在“服务器”networking上ssh'ing几个主机时,我在localhost主机上尝试了一个tcpdump
tcpdump port 53
并没有看到任何stream量(/ etc / hosts中没有entires …我不得不提出一个DNS请求来击中主机)。 这可能意味着DNS请求是从跳转框中进行的,但我不能百分之百地确信。
VPN隧道是一个答案,小坏添加( 部分细节只在下面)
这个隧道必须是 (好了, 要做的 更好 ,你可以使用从主机到主机的p2p VPN隧道)在边界之间build立,将作为额外的WAN-link出现,在其内部的所有通信的“远程“networking(是的,远程networking可能从本地可见,这取决于…但可行)。
它可以是硬件解决scheme或纯软件(OpenVPN将融入软件解决scheme),但 – 太复杂,为了一次性写下所有细节。
尝试从OpenVPN现场文档开始(如果您可以在两侧安装),并从中了解不同连接types的示例