我已经设置了一个无IP帐户用于远程访问我家中的 ssh 服务器myserver.ddns.net
,效果很好......仅从外部。
从外面:
远程 ping:
$ ping myserver.ddns.net # success
远程ssh:
$ ssh myserver.ddns.net # success
从本地:
本地ping:
$ ping 192.168.2.8 # success
本地 ssh:
$ ssh 192.168.2.8 # success
远程 ping:
$ ping myserver.ddns.net # success, resolving to 90.113.108.192
远程ssh:
$ ssh myserver.ddns.net # loOong time waiting, then..
Connection closed by 90.113.108.192 port 22
为什么会这样呢?
答案1
更正确地说,关于从内部网络访问 NAT 的答案是:您不想这样做,因为:
- 消费级技术的限制;
- 性能原因 - NAT 使用更多的 CPU 资源和内存 - 尽管在国内规模上并不令人担忧;
- 路由更加复杂——要么使用,要么调试。
替代方案是:
- 如果仅从本地服务器访问,则创建一个主机文件条目;
- 创建名称服务器,并创建属于您的公共 DNS 名称的视图 - 不是您所呈现的情况,但通常在企业中;
- 创建名称服务器,并创建自定义内部名称,例如 ssh.home;
- 使用BIND+RPZ,并将外部名称重新定义为您的内部IP地址;
- 如果使用 Linux 机器进行路由,则使用 iptables+NAT,捕获到外部 IP 的 SSH 会话,并将它们 NAT 到您的内部 IP 地址。
关于我关于捕获 IP 地址/创建主机文件的评论,请参阅此答案我如何在家处理我的 DDNS 地址。处理 ISP 更改 IP 地址的更好方法?
对于 BIND+RPZ,请参阅: