我有一台安装了 Ubuntu 服务器的虚拟机。
尝试通过外部网络使用我创建的域名连接到该虚拟机。
到目前为止,我能够通过 LAN 连接到我的虚拟机
我至今所做的事情:
- 我已经在路由器上打开了两个端口
- 我已经在我的客户虚拟机(ubuntu 服务器)上打开了两个端口
- 我有一个通过 NAT 从 ISP 获得的动态公共 IP
- 我正在使用 no-ip 动态 DNS 服务指向我的动态公共 IP
问题:
- 当我尝试通过域名(公共 IP)连接时,无法访问我的虚拟机
- 检查端口https://www.portchecktool.com/尽管我在路由器上打开了端口,但仍显示端口未打开的消息
我该怎么做才能将公共 IP 连接到我的虚拟机?
答案1
检查端口https://www.portchecktool.com/尽管我在路由器上打开了端口,但仍显示端口未打开的消息
您的端口似乎“未打开”,因为端口后面没有任何设备可以应答。
原因:
您的列表中缺少转发端口从路由器(公共 IP)到 VM(本地 IP)。——这必须在连接到公共 IP 的路由器上进行配置。
连接到本地服务器:
- 外部客户端尝试通过以下方式连接到虚拟机
DomainName:Port
- NoIP.com 的 DNS 解析将请求更改为
Your_public_IP-Address:Port
- 您的路由器收到请求
Your_public_IP-Address:Port
并将其转发至Local_IP:Port
(此处的端口号可以更改为其他端口号) - VM 收到请求
Local_IP:Port
并应答。 - 路由器知道该连接,将
Local_IP:Port
其转换回来Public_IP:Port
并将答案发送回原点。 - 客户端得到了答案。
它只能看到,Public_ IP:Port
但对虚拟机的内部网络一无所知。
目前您的列表中缺少第 3 号。
更新:ISP 禁止传入连接
根据 ISP 的说法,NAT 阻止了动态公共 IP 地址。[...] 有没有办法绕过 NAT 服务器保护?或者他们无法路由一对多的 NAT
除了租用静态 IP 外,绕过此 ISP 阻止的唯一方法是从网络内部发起连接。
这取决于拦截的复杂程度。一种可能性是它们拦截传入的SYN
数据包。此SYN
数据包是启动 TCP 连接所需的数据包。
另一个(可能是您的情况)是网络设计。它类似于具有一对多 NAT 的私有网络,因此从外部看,到您的路由器 IP 的路径不是唯一的,无法路由。
对于这两种情况,解决方案都是相同的:
您的连接必须从您的专用网络内部开始,以便路由器了解此连接的路径。这样,数据包SYN
也将来自您的本地网络,即允许的方向。
通过这种技术,远程服务连接、消息服务和视频会议软件可以绕过这个问题和防火墙。特洛伊木马和机器人奴隶也可以做到这一点。
由于您可能在网络的另一端没有静态 IP,因此您也必须对另一个方向使用 No-IP.com 服务。
如果您的客户端有同样的ISP阻塞问题,您需要第三台服务器作为“运营商”服务器来建立连接。
使用 VPN 解决方案可以解决您的问题。
- 您的互联网路由器可能具有这些功能。
- OpenVPN 之类的软件能够
- 也可以考虑通过 SSH 来解决。
- 还有一些外部服务。
但你首先应该考虑一下你认为客户的网络有多安全。你应该始终记住,VPN 连接是一种直接网络连接(通常绕过防火墙),可以双向使用!
因此,首先考虑一下您的网络设计。
答案2
最后是公网 IP 的问题,我无法从动态 IP 转发端口,NAT 服务器似乎不允许这样做,设置静态公网 IP 后问题就解决了