我可以从我的家庭networking使用它的内部IP地址如192.168.10.2 SSH我的Linux机器。 或者从外部,我可以通过我的外部IP地址如74.23.43.98通过端口转发连接到我设置的路由器,将端口22上的传入连接转发到内部地址192.168.10.2。 但是,如果我在家,我无法通过外部IP地址连接。 这只适用于我的networking外部。 这是普遍真实的还是我特定的摩托罗拉路由器的一个特点?
谢谢
这是一个与NAT和本地networking有关的普遍问题。 基本上,当路由器将74.23.43.98重写为192.168.10.2时,源地址不会被重写,所以目标机器将数据包直接发送回源,而不是通过路由器。 由于源机器不期望从192.168.10.2返回数据包(而是希望从74.23.43.98看到数据包),所以丢弃这些数据包,没有任何用处。
如果你的路由器是好的,应该可以configuration做正确的事情(重写内部到内部NATstream量的源地址),但是如果它没有在默认情况下做,它可能不算作“任何好”。 另外,如果它是有特色的,你应该能够为你的服务器设置第二个内部networking,这将确保所有的stream量都通过路由器。
这应该是可能的(我已经做了我的linksys路由器),虽然我不完全确定你为什么要这样做。
首先值得澄清一下“无法连接”的含义。 你可以ping你的外部地址,并得到答复? 是sshd日志尝试连接? 你可以通过转发的端口进行远程login(certificate该端口至less打开)?
我有几台机器pipe理着防火墙,这些机器限制哪些主机可以通过SSH连入networking。 在大多数情况下,这不是一个问题,因为当我在家里或在办公室时,我通常都有一个静态IP,但是当我在其他地方的远程networking上时,会导致我无尽的麻烦。 我的解决scheme是通过使用我的SSH客户端configuration中的ProxyCommand ,通过防火墙允许通过其中一台主机转发的静态IP,从而简化转发。 这适用于我使用OpenSSH,并且应该与支持ProxyCommand其他SSH客户端一起工作,因此如果有疑问,请检查您的客户端文档。 它还需要安装netcat的TCP / IP瑞士军刀。
在我的〜/ .ssh / config文件里面我有以下configuration:
Host InternalHost ProxyCommand ssh StaticHost nc %h 22 HostName InternatHost-FQDN
我使用简短的主机名来引用configuration,允许我使用完全限定的域名来访问它,而不使用转发。 这个configuration的作用是连接到StaticHost并运行netcat在端口22上转发到InternalHost-FQDN 。除非你有SSH身份密钥设置login到StaticHost&InternalHost而不提示input密码,否则会收到两个提示input密码。 在我的情况下,我有两个我的SSH身份密钥安装并加载到SSH代理的SSH密钥,并find自己login没有任何密码请求提示。
这个configuration也可以让你使用scp命令像使用InternalHost一样来回传输文件,就像login到shell一样简单。