networking - 来自 ISP 的 DDNS,可从外部访问,但不能从内部访问
问题描述
所以,我最近发现我的 ISP 有这个免费功能,所以我决定在家里建一个小型服务器,运行一些东西,如 FTP、HTTP、SSH,一些数据库,你明白了。
也许我应该先简要描述一下我的本地网络。我有一台路由器和一台主 PC,PC 将运行所有服务器。我将 DHCP 配置为保留192.168.0.2
主 PC 的 MAC 地址,并创建了一个虚拟服务器(转发 -> 虚拟服务器 -> 添加新),将端口 80 映射到192.168.0.2
TCP 和 UDP 上的 80。我还在 ubuntu 16.04 上运行 apache2,显然可以访问 localhost 并查看 apache 主页(在主 PC 上)。
经过多次不必要的重新启动(我认为它会起作用!)我发现我的笔记本电脑连接到同一个路由器(可以说192.168.0.3
)我无法通过输入外部 ip 或 sudomain 连接到我的主 PC,只能通过内部 IP 地址192.168.0.2
. 如果我用我的笔记本电脑(热点)连接到另一个网络并尝试访问子域,它就可以工作。
我希望能够从本地网络内部访问我的子域,但显然我不能,只能从外部访问。
现在我认为它肯定来自我的路由器配置,也许我应该设置某种默认网关,以停止搜索子域,因为它就在这里托管。任何人都知道我应该做什么?
解决方案
这完全取决于路由器的配置方式(NAT 组件)。
基本上,路由器有两个(或更多)IP 地址:WAN128.66.1.1
端口上的公共 IP 地址(假设为 )和LAN端口上的私有地址(在这种情况下,假设为 ) 。假设传输到端口 80 (HTTP) 和正确的端口转发配置,两种情况是可能的:192.168.0.1
- 您在网络之外(例如在咖啡馆):任何传输(数据包)都将使用外部 IP 地址路由到您的家庭路由器
128.66.1.1
。然后,当数据包到达路由器的WAN端口时,端口转发(或DMZ)设置会将数据包重新路由到192.168.0.2
. 一切都很好。 - 您在网络内:如果您使用外部 IP 地址
128.66.1.1
(直接使用或使用任何 DNS 名称),数据包将(由您的 PC)发送到路由器LAN端口,以便路由到互联网(您的 PC 不知道那192.168.0.2
是最终目的地)。如果路由器被配置为区分发送到的数据包128.66.1.1
和发送到的数据包192.168.0.1
,那么它将检测到该数据包是要路由到分配给WAN的外部 IP 地址,然后它将使用相同的端口转发设置,就好像数据包从广域网进入港口。如果它无法区分这两种情况,那么您最终将成为您所描述的场景(换句话说,路由器将使用自己的资源进行响应,就好像您联系了它的内部 IP)。
有些路由器可以从 UI 配置,有些则需要固件修改(最终用户无法完成)。
iptables
基于 - 的防火墙,此设置通过在规则和链(表)中使用标志PREROUTING
来POSTROUTING
控制nat
。此外,您需要为来自内部网络的数据包配置 NAT 规则(SNAT
或),目标是外部 IP。MASQUERADE
推荐阅读
- javascript - 如何将中间件传递给express node.js中的指定路由
- javascript - 如何调试/捕获 D3 的错误
- javascript - iView UI 下拉项点击
- laravel-5.5 - 安装护照包,它给出了错误:reverting ./composer.json to its original content
- regex - 使用具有动态值的正则表达式搜索字符串的一部分
- php - 我在 php 中的查询工作得非常好,但它没有填充我的数据库
- python - Bottle 中的基本身份验证和向用户浏览器发送文件
- javascript - 如何使用 Google Cloud Storage JSON API 获取可恢复上传的上传进度信息?
- php - symfony4 : csrf 令牌无效。请尝试重新提交表单
- javascript - 警告 避免嵌套承诺 promise/no-nesting