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