从网络外部和内部使用相同地址访问路由器后面的Web服务器

Net*_*ern 5 networking router wireless-networking port-forwarding

我有一个具有外部公共静态IP地址的路由器,在路由器后面,我有一个具有静态IP(内部地址)的Web服务器。

我在路由器中配置为将端口 80 转发到 Web 服务器,当我从外部访问公共 IP 时,它就可以工作。当我尝试从网络内部访问时,我得到了路由器界面登录页面。

我需要一种从网络内部和外部访问具有相同地址 \ URL 的 Web 服务器的方法

Ana*_*man 3

正如对您的问题的评论中所建议的,您有多种选择:

\n
    \n
  • 查看您的路由器是否支持NAT Hairpinning(根据 @DavidPostill,也称为 NAT 环回或 NAT 反射)以及是否需要启用它(根据 @AFH)。

    \n
  • \n
  • 如果您的路由器不支持发夹,请购买一台支持发夹的新路由器。此功能在现代消费级路由器中很常见,但您仍然可能需要在购买任何新产品之前进行一些研究。

    \n
  • \n
  • 可以使用基于 Linux 的固件(例如 Tomato、DD-WRT 或 OpenWRT)升级路由器,这些固件可以允许发夹(但这可能是一项非常技术性的工作)。

    \n
  • \n
  • 正如@SpiderPig 所建议的,您可以在内部网络上设置自己的私有 DNS 服务器。此路线技术性更强(如果可以启用发夹,则没有必要),但可能是两种技术解决方案中更安全的一种。

    \n
  • \n
\n

私有 DNS 要求

\n

虽然不同的网络配置有明显不同的步骤,但使用最后一个解决方案解决缺乏发夹问题的原则是相同的:

\n
    \n
  • 使用 DNS 服务器配置您的域的外部版本,该服务器不会直接为该域的内部版本提供服务(可能是您的注册商提供的 DNS 或第 3 方服务,例如Namecheap FreeDNS)。

    \n
  • \n
  • 为您的内部网络配置一个单独的 DNS 服务器(例如ISC BIND),以在本地处理您的域。也就是说,在该服务器上为您的域创建一个条目,并将其指向正确的内部 Web 服务器 IP。然后,您可以让内部计算机使用此本地 DNS 服务器进行域解析。

    \n
  • \n
\n

此设置有效的原因是因为非内部查询通过一个(外部)DNS 提供商(具有您的公共 IP),而内部查询则通过第二个(即具有您的私有 IP 的本地 DNS 服务器)。

\n

可能值得一提的是,除了“常规”域之外,此选项也可能适用于许多“动态 DNS”提供商(提供商自动满足第一个要求)。

\n
\n

请注意,Namecheap FreeDNS 和 BIND 目前都是免费的,因此非常划算。

\n
\n

BIND 基础知识

\n

我假设您已使用注册商配置了您的域,以使用您无法控制的 DNS 服务器。在这种情况下,您可能不需要采取额外的步骤来满足上面列出的第一个要求。

\n

关于第二个要求(您的本地网络设置),我不久前写了一篇关于在具有本地域的 Windows 上使用 BIND的基础知识的相当详尽的解释。

\n

至于选择哪台计算机用作本地 DNS 服务器,唯一真正的要求是它始终处于开启状态(因为域解析需要它)。除了该规定之外,您几乎可以选择网络上您喜欢的任何计算机(甚至是 Web 服务器本身)。

\n

答案注释

\n

在我上面链接的答案中,肯定有一些地方你可以忽略(主要是 WAMP 的东西)。否则,此处详细的设置是您的域在本地所需的基本设置。根据您的情况,需要更改的几件事是:

\n
    \n
  1. 将“free.goodies”示例域替换为您自己的(外部)域。

    \n
  2. \n
  3. 确保任何其他杂项与您的设置匹配(例如安装路径、IP 地址、文件名、rndc 机密等)

    \n
  4. \n
  5. 确保取消注释“named.conf”中“forwarders”行(即删除哈希#):

    \n
          forwarders { 8.8.8.8; 8.8.4.4; };\n
    Run Code Online (Sandbox Code Playgroud)\n
  6. \n
\n

请注意,最后一项是绝对必要的,以便您的本地网络可以联系非本地域(即除您的域之外的互联网的其余部分)。列出的特定 IP 按原样运行(它们是 Google 的公共 DNS 服务器),但您也可以替换您喜欢的任何其他 IP(包括 ISP 的 IP)。

\n

您仍然需要确保配置本地计算机和路由器以使用本地 DNS 服务器(如链接答案末尾附近的详细信息)。

\n

Linux笔记

\n

如果您使用的是 Linux,您当然可以选择从 ISC BIND 网站安装文件。然而,作为替代方案,许多 Linux 发行版都已经安装了 BIND 或可以通过各自的存储库使用 BIND。

\n

就本地 DNS 服务器而言,有许多针对不同发行版的优秀网络教程。但原理是一样的 \xe2\x80\x94 设置本地 DNS 服务器以完全从本地网络访问您的域(不需要互联网)。

\n

注意事项

\n
    \n
  • 成功在本地访问您的域并不总是意味着它可以从外部访问。您始终需要使用不使用路由器的网络(例如通过其数据计划连接的手机)来测试外部访问。

    \n
  • \n
  • 运行 DNS 服务器,特别是使用 TLD(例如.com.net)模拟域存在一些潜在风险。虽然可以这样做(如此处所述),但您可能需要考虑研究任何潜在的陷阱。

    \n
  • \n
\n