如何设置仅允许本地网络设备通过域名访问家中的Web服务器
如何设置仅允许本地网络设备通过域名访问家中的Web服务器
我明白你现在的需求:家里的Web服务器原本配置好能被公网访问,但你只想让本地局域网里的设备通过域名访问,不想对外暴露对吧?先理一理你目前的情况和试过的方案问题,再给你几个靠谱的解决办法。
你的现状
- 家里已经有一台配置完成、可被公网访问的Web服务器
- 本地局域网内的设备,用服务器的本地IP
192.168.1.7就能正常连接 - 当设置端口转发允许所有IP(
0.0.0.0)访问时,通过公网IP和域名都能访问服务器,但你现在想要限制访问权限,只让本地设备能通过域名访问
你尝试过的方案及遇到的问题
- 给单台设备连接VPN,再设置端口转发仅允许该VPN IP访问:确实能限制访问,但没法让所有本地设备都连同一个VPN,实用性不强
- 设置端口转发仅允许某台本地设备的IP(
192.168.1.3)访问:只能单台设备使用,而且请求不带公网IP,多设备配置时只能生效一个 - 还尝试过其他端口转发配置,但没找到合适的解决方案
推荐的解决办法
方法一:利用路由器的本地域名解析(最省心)
这是我最推荐的方案,不用改动服务器配置,全在路由器上就能搞定:
- 先确认你的路由器支持本地DNS解析(大部分家用路由器都有这个功能,有的叫“域名重定向”“本地域名映射”)
- 在路由器的本地DNS设置里,把你的域名映射到服务器的本地IP
192.168.1.7 - 然后修改路由器的端口转发规则:直接关闭公网端口转发(或者设置仅允许
192.168.1.0/24这个局域网段访问),不要允许0.0.0.0访问 - 这样本地设备访问你的域名时,路由器会直接把请求转到服务器的本地IP;而公网设备访问域名时,因为没有对应的端口转发规则,根本连不上你的服务器,完美符合你的需求
方法二:在Web服务器上配置IP访问限制
如果你的路由器没有本地DNS解析功能,直接在服务器上做限制也可以:
- 如果你用的是Nginx,在配置文件里添加如下规则,只允许局域网段访问:
location / { allow 192.168.1.0/24; deny all; # 保留你原有配置的其他内容 } - 如果你用的是Apache,修改
.htaccess文件或者主配置文件:<Directory /var/www/html> Require ip 192.168.1.0/24 Require all denied </Directory> - 配置完成后,只有局域网内的设备能通过域名或IP访问服务器,公网IP的访问请求会直接被服务器拒绝
方法三:路由器防火墙规则限制
还可以在路由器的防火墙里设置访问规则:
- 保留原来的端口转发配置,但在防火墙中添加规则:仅允许来自
192.168.1.0/24网段的流量访问服务器的对应端口 - 同时添加规则拒绝所有其他IP的访问请求,这样公网流量根本无法到达你的服务器,只有本地设备能通过域名访问
备注:内容来源于stack exchange,提问作者Steve Silva




