![从网络外部和网络内部使用相同地址访问路由器后面的 Web 服务器](https://linux22.com/image/1541407/%E4%BB%8E%E7%BD%91%E7%BB%9C%E5%A4%96%E9%83%A8%E5%92%8C%E7%BD%91%E7%BB%9C%E5%86%85%E9%83%A8%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E5%9C%B0%E5%9D%80%E8%AE%BF%E9%97%AE%E8%B7%AF%E7%94%B1%E5%99%A8%E5%90%8E%E9%9D%A2%E7%9A%84%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我有一个具有外部公共静态 IP 地址的路由器,在路由器后面,我有一个具有静态 IP(内部地址)的 Web 服务器。
我在路由器中配置了将端口 80 转发到 Web 服务器,当我从外部访问公共 IP 时,它就可以正常工作。当我尝试从网络内部访问时,我得到了路由器界面登录页面。
我需要一种方法来从网络内部和外部访问具有相同地址 \ URL 的 Web 服务器
答案1
正如您在问题评论中所建议的那样,您有几种选择:
看看你的路由器是否支持NAT 发夹弯(也称为 NAT 环回或 NAT 反射(@DavidPostill))以及是否需要启用它(@AFH)。
如果您的路由器不支持发夹式连接,请购买支持该功能的新路由器。此功能在当今的消费级路由器中相当常见,但您在购买新路由器之前仍可能需要做一些研究。
可能可以使用基于 Linux 的固件(如 Tomato、DD-WRT 或 OpenWRT)升级路由器,从而实现发夹弯技术(但这可能是一项技术性很强的工作)。
根据@SpiderPig的建议,您可以在内部网络上设置自己的私有DNS服务器。此方法技术性更强(如果可以启用发夹式连接则不需要),但可能是两种技术解决方案中更安全的一种。
私有 DNS 要求
虽然不同的网络配置显然有不同的步骤,但解决最后一个解决方案的发夹弯问题的原理是相同的:
使用不直接为您的域名提供服务的 DNS 服务器配置您的域的外部版本内部的该域名的版本(可能是您的注册商或第三方服务提供的 DNS,例如Namecheap 免费DNS)。
配置单独的 DNS 服务器(例如ISC绑定) 为您的内部网络提供本地 DNS 服务器,以处理您的域。也就是说,在该服务器上为您的域创建一个条目,并将其指向正确的内部 Web 服务器 IP。然后,您可以让内部计算机使用此本地 DNS 服务器进行域解析。
此设置之所以有效,是因为非内部查询要经过一个(外部)DNS 提供商(具有您的公共 IP),而内部查询要经过第二个(即具有您的私有 IP 的本地 DNS 服务器)。
值得一提的是,除了“常规”域名之外,此选项也可能适用于许多“动态 DNS”提供商(提供商自动满足第一个要求)。
注意,Namecheap FreeDNS和BIND目前都是免费的,因此非常划算。
BIND 基础知识
我假设您已通过注册商配置了您的域名,以使用您无法控制的 DNS 服务器。在这种情况下,您可能不需要采取额外步骤来满足上面列出的第一个要求。
关于第二个要求(您的本地网络设置),我写了一篇关于让 BIND 在具有本地域的 Windows 上运行一会儿回来。
至于选择哪台计算机作为本地 DNS 服务器,唯一的实际要求是它始终处于开启状态(因为需要它进行域解析)。除了这个规定之外,您几乎可以选择网络上任何您喜欢的计算机(甚至是 Web 服务器本身)。
答题说明
在我上面链接的答案中,肯定有几个地方你可以忽略(主要是 WAMP 的东西)。否则,那里详述的设置是你本地域所需的基本设置。对于你的情况,需要更改的几件事是:
用您自己的(外部)域名替换“free.goodies”示例域名。
确保任何其他杂项与您的设置相符(例如安装路径、IP 地址、文件名、rndc 机密等)
确保取消注释“named.conf”中“forwarders”行(即删除哈希#):
forwarders { 8.8.8.8; 8.8.4.4; };
请注意,最后一项是绝对必要的,以便您的本地网络可以连接非本地域(即除您的域之外的互联网其余部分)。列出的特定 IP 按原样运行(它们是 Google 的公共 DNS 服务器),但您也可以替换任何其他您喜欢的 IP(包括您的 ISP 的 IP)。
您仍然需要确保配置本地计算机和路由器以使用本地 DNS 服务器(如链接答案末尾所述)。
Linux 注意事项
如果您使用的是 Linux,您当然可以选择从 ISC BIND 网站安装文件。但是,作为替代方案,许多 Linux 发行版都已安装 BIND 或可通过其各自的存储库获取 BIND。
就本地 DNS 服务器而言,针对不同发行版有许多不错的网络教程。但原理是一样的 — 设置本地 DNS 服务器,以便完全从本地网络访问您的域(无需互联网)。
注意事项
成功在本地访问您的域名并不一定意味着可以从外部访问。您始终需要使用不使用路由器的网络(例如通过数据计划连接的手机)测试外部访问。
运行 DNS 服务器,特别是模拟以下顶级域名时,存在一些潜在风险.com或者。网。虽然可以这样做(如此处所述),但您可能需要考虑研究任何潜在的陷阱。