目标:允许一个人远程连接到我的(Django)网络服务器,该服务器在我的 Windows 10 机器上本地运行一周左右。
我尝试了什么:禁用防火墙(Windows),我的路由器上似乎没有防火墙。我用 ext 在我的路由器上设置了端口转发。IP 设置为 0.0.0.0,本地 IP 设置为我的静态 PC IP。它不起作用,我猜ISP有一个额外的盒子。
问题:是否有任何不涉及我的 ISP 的解决方法?
- 我想我的机器上应该有可以访问的开放端口,因为我确实使用 Zoom 和其他软件,对吧?我可以以某种方式使用其中之一吗?
- 是否可以在两台计算机之间创建某种 VPN 或“隧道”,以便其他人可以连接到我的 PC?
感谢您的帮助和想法。
解决方案
多亏了下面的答案,Ngrok 的免费版本似乎起到了作用。
有点,但不完全是。
首先,端口不是对称的;连接的每一端都有自己的端口号。例如,HTTP 连接不只是“通过”端口 80 - 它会进入服务器的端口 80,而在您这边有一个不同的(临时分配的)端口号(例如 mypc:24567 → zoom.com:80) . 因此,能够与远程端口 80 建立出站连接并不意味着您将自动能够接受到您这边的端口 80 的入站连接。
更重要的是,当您在 NAT 之后并进行出站连接时,路由器会进行临时端口分配,这些端口分配的持续时间与单个连接的持续时间一样长(并且通常只匹配来自您正在通话的特定远程 IP:端口的数据包至)。
例如,当您从 192.168.1.99:24680 到 ZoomServer:443 连接到 Zoom 的服务器之一时,路由器会跟踪将某个外部端口映射到 192.168.1.99:24680 的临时“端口转发”状态,但一旦被遗忘路由器看到 TCP 连接正在关闭。
某些 VoIP 软件(如 Zoom)可能仅使用出站连接,出于隐私原因通过其服务器中继所有内容。其他程序尝试点对点连接参与者——通常他们仍然需要一个中央“会面点”服务器,以便双方可以合作并欺骗他们的 NAT 允许连接通过。
可以,只要相关方之一可以接收入站连接以建立隧道。这不需要直接成为“其他人”;它可能是第三个 VPN 服务器,充当两个人连接的集线器。(我的意思是您在自己的服务器上设置的个人 VPN - 不是商业 VPN 服务;出于安全原因,这些服务可能会阻止内部通信。)
SSH 中的“TCP 转发”功能也可以轻松使用——该
-R
选项(远程隧道)将接受 SSH 服务器上的连接并将它们通过隧道连接到您的本地计算机。当您在服务器上拥有 root 权限并且可以在其 sshd_config 中启用“GatewayPorts”时,这是最有用的,因为这将允许其他人直接连接到服务器的隧道端口,而他们根本不需要使用 SSH。还有专门为 HTTP/HTTPS 执行此操作的专用隧道服务(例如Ngrok/Serveo/Localtunnel/Pagekite)。