使用同一域从其 LAN 和外部访问服务器

使用同一域从其 LAN 和外部访问服务器

情况

我的局域网上有一个运行 LAMP 服务器的服务器,我将它用于 TeamSpeak、nextcloud、个人网站托管等。

我“通过”cloudflare 拥有一个域名,重定向到我的公共 IP 地址。

我从局域网和外部访问服务器。

我的问题/我想改变什么

由于我的服务器位于我的局域网上,因此它与我的客户端具有相同的公共 IP 地址(显然,只有当我在家时才如此)。因此我无法访问我的服务器,因为无法 ping 我自己公共 IP(我猜这是正常现象)。

因此,为了解决这个问题,我使用我的 hosts 文件将我的域名重定向到我服务器的本地 IP 地址。但每次我改变位置(几乎每天)时,我都必须编辑此文件。

而且这也只适用于少数可以编辑此文件的设备。因此,在我的手机(Android)上,我无法访问我的网站或任何特定于域的内容。

有什么办法可以解决这个问题?

我确实有一些想法

  • 找到某种方法,使我的公共 IP 地址可以从我的 LAN 上“ping 通”
  • 设置本地 DNS 服务器
  • 根据请求的 IP 地址使用不同的 DNS 区域文件(如果可能的话)(也许 cloudflare 提供了此功能)。(如果请求的 IP 地址与域重定向到的 IP 地址相同,它会使用我的本地服务器 IP 来回答)

编辑(17.03.17)

我忘了说了,我以后也想用这个服务器来处理邮件。所以必须为此做好准备。

我现在已经在其上安装了一个 DNS 服务器,它将我的域名解析为服务器的本地 IP 地址(使用bind9; 也可以反向解析)。这完全没问题,但为此我必须手动设置我的 DNS 服务器(我的计算机正在请求的服务器),导致加载时间变慢(其他网站)。但这也不是完美的解决方案,因为这样一来,像我的朋友这样的人就无法访问服务器,因为他们的列表中没有我自己的 DNS 服务器。更改路由器的默认 DNS 服务器可以解决这个问题吗?

不幸的是,我有一个动态公共 IP 地址,它大约每三周更改一次。到目前为止,我已经手动更改了我的 DNS 条目,但这必须更改(这就是我改用 cloudflare 的原因,他们为此提供了一个 API)。

为了从外部访问我的服务器,我必须重定向/转发一些端口。以下是它们的屏幕截图:

在此处输入图片描述

答案1

答案取决于您的实用程序。如果您仅使用 http 与内部局域网上的服务器通信(通过公共名称),那么您可以根据端口更改行为。例如,您还可以根据源 IP 地址从本地灯发出重定向。(例如,如果它将源地址作为外部网关,那么它可以将请求重定向到内部 IP 地址)。但这不会让您获得名称映射。

即便如此,听起来路由器的端口转发配置有误。不说发夹式连接,我的路由器也不支持,但我使用端口转发,可以通过外部域/接口路由从局域网内部或外部连接到内部服务器。例如,我有一个 home.domain.com DNS 条目指向路由器的 wan 接口。无论我在内部还是外部,对 home.domain.com 的请求都会转到 wan 接口,然后通过端口转发回到正确的目标服务器。这在某些方面仍然是间接的,但它有效,所以它也应该对你有用。

还有一个问题,即您的局域网内有多少其他服务器提供端口/服务。只有一台吗?

最后,我也会时不时地考虑这个问题,因为我也想要一个依赖于我所连接网络的主机名策略。也许一个简单的选择是{(a)编写一个调度程序脚本(如果您使用的是 Windows)或(b)向 ifup/ifcfg 添加一个脚本},该脚本 ping 特定的 Linux 主机或 LAN 内的其他已知资产,然后根据它设置主机值。它不像运行具有自己的内部规则的 DNS 服务器那么优雅(顺便说一句,这可能同样容易处理,因为 dhcp 可以提供内部 lan DNS 服务器)。

也许它不工作是因为您对域名使用了 IP 重定向,而不是动态 DNS?例如,我们的公共 IP 是动态的,因此我让内部服务器定期使用面向外部/公共的 IP 地址更新我的 dnsmadeeasy 子/域。然后主机名查找直接转到正确的 IP 地址,而不会重定向到那里。

答案2

很抱歉我花了这么长时间才写出这个最终答案。

(在编辑问题时已经提到)
最完美的方法是使用支持 hairpin/NAT 的路由器。但我的路由器不支持。这就是我决定使用 DNS 服务器的原因。我只需要更改计算机和手机等设备上的默认 DNS 服务器(顺便说一下,这在每个常见的操作系统上都是可能的)。这导致加载时间稍微慢了一些(至少我认为是这样)。但这不是什么大问题。

但下一个问题(其他人在我的 LAN 中无法访问服务器,因为他们的列表中没有我的 DNS 服务器)是一个更大的问题,因此我决定就此作罢。我认为唯一可行的方法是更改​​路由器中的默认 DNS 服务器。但要做到这一点,我必须修改整个设置,但有已知的方法可以做到这一点。

关于我更改 IP 地址的问题:
我写了一个小脚本,每隔五秒钟检查我是否有新的 IP 地址,如果有,它会通过上面提到的 cloudflare API 自动更改它。如果有人需要它,但又懒得自己写,我可以发布它。

感谢@Beracah 的回答:)

相关内容