我目前在家中有一台台式机,它除了其他功能外还用作 Web 服务器。它运行的是 Ubuntu 12.04 和 Apache 2.2.22。我为不同的站点设置了各种虚拟服务器。一些虚拟服务器供本地使用,而其他虚拟服务器则需要外部访问。但是,现在它们都可以从外部访问。
例如,我家里有一套 Phillips Hue 灯。其中一个站点控制这些灯。我还有一些站点控制房子周围的其他项目。我希望这些站点只能在 LAN 上访问。相反,我也有 Gitlab 实例和其他我希望能够从外部访问的站点。
所以,我的问题是:我必须做什么才能将内部站点与外部站点隔离?就像我家的本地内联网一样。
这是在 Apache、我的域名服务还是我的家用路由器中处理的?我需要设置本地 DNS 服务器吗?我希望能够使用不同的子域或目录来访问本地站点。例如,local.example.com 只能在 LAN 上访问,而 www.example.com 可以在任何地方访问。www.example.com/local/ 也适用于本地站点。
答案1
好吧,经过一个月的思考和搜索,我相当确定这是一个 DNS 问题。根据我的研究,我收集了我认为最好的两个解决方案。每个解决方案都需要将 DNS 记录添加到网络上的某台机器上。
1. 在我现有的 Ubuntu 机器上设置 DNS 服务器。
这样,我本地网络上的所有 DNS 流量都将通过 Ubuntu 机器。Dnsmasq 似乎是可行的方法。然后,我将设置服务器以使用我的 ISP(或任何人)的 DNS 服务器进行远程请求,同时为本地机器添加我自己的记录。最后,我可以使用 apache 中的虚拟主机将不同的子域解析为我的 Web 服务器上的不同站点。一个看似不错的教程在这里:
http://2008.alepe.com/about_computers/about_linux/simple_intranet_dns_server_in_linux.html
我不喜欢这种方法的一点是,任何远程 DNS 请求都依赖于我的家庭服务器。它 24/7 全天候运行,但我用它来做很多事情,而不仅仅是一个网络服务器。因此,需要进行一定程度的修修补补,我希望它偶尔会因为我尝试一些东西而宕机。话虽如此,当其他人在家上网时,我并不总是在家,我不想让他们蒙在鼓里。所以...
2. 最终获得与 DD-WRT 或类似固件兼容的路由器。
我目前的路由器不具备此功能,但我可以花几块钱买一个内置 DNS 功能的路由器。这样,我就可以避免使用我的服务器,同时仍然在房子里始终在线的机器上拥有自定义的内部 DNS 记录。教程在这里:
http://cybernetnews.com/local-internal-dns-ddwrt/
看来我只需要在 DNSmasq 选项下添加我的 DNS 记录就可以了。apache 中的虚拟主机将设置相同。