我有一台笔记本电脑,我主要将其用作台式机,但偶尔会移动网络。我有一个具有静态地址的 vps,我想将端口从 vps 转发到笔记本电脑,这样我就可以从公共地址访问笔记本电脑,即使笔记本电脑位于没有端口转发设置的路由器后面。
通过在启动时运行笔记本电脑上的命令/脚本可以实现这一点吗?
如果这很重要的话,所有东西都在运行 Linux,我正在尝试将 minecraft 流量从具有公共地址且没有内存的 vps 转发到具有大量内存但没有公共地址的笔记本电脑,该笔记本电脑偶尔会移动到不同的网络。这可以通过 ssh 以某种方式实现吗?
在此先感谢您的帮助。
答案1
通常的方法是创建 VPN(例如使用 OpenVPN)。但您也可以使用 SSH。
ssh -R [bind_address:]port:host:hostport
您可以使用没有密码的密钥自动执行此操作,但中断的 SSH 连接不会自动重新启动。因此,从循环中进行 SSH 调用会很有用。不过 OpenVPN 会更有用。
编辑1
如果你想要转发除本地主机之外的其他远程地址,请不要忘记同时输入
GatewayPorts yes
在sshd_config
文件中服务器然后重启服务器。然后你必须使用以下格式的命令ssh
:
-R 1.2.3.4:port:host:hostport
-R \*:port:host:hostport # the \ being for the shell only
-R :port:host:hostport
是host
当地的端(通常localhost
为主机的其他 IP 地址之一)。
答案2
正如 Hauke Laging 正确指出的那样 - ssh 连接可能会中断。
您应该使用autossh
它在发生故障时自动启动和重新启动隧道。
答案3
在您的~/.ssh/config
文件中,您可以像这样定义端口转发:
Host alias
HostName 12.34.56.78
[Port 12345]
[User patrick]
[LocalForward 6900 localhost:6900]
答案4
也许在笔记本电脑上使用 dyndns?
或者您可以向 VPS 添加一个小型 Web 脚本(该脚本将更新防火墙),笔记本电脑可以在启动时使用 wget/curl 请求该页面。
该脚本可以是 bash/shell 脚本,并通过 ssh 执行,但从 shell 脚本中查找连接 IP 可能会更复杂(例如与 $_SERVER['REMOTE_ADDR'] 相比)