适用于本地微信开发
好的,完全理解您的需求。您希望将公网服务器的 8866 端口作为入口,访问您本地(内网)电脑上运行在 8886 端口的服务。
这个场景非常适合使用 SSH 远程端口转发(Remote Port Forwarding),也常被称为 SSH 反向隧道。
它的原理是:在您的本地电脑上发起一个 SSH 连接到您的公网服务器,并“命令”公网服务器监听 8866 端口,然后将所有发送到这个端口的流量,通过这条已经建立好的 SSH 连接,安全地转发回您本地电脑的 8886 端口。
操作步骤
您需要两步关键操作:
- (可能需要)修改公网服务器的 SSH 配置。
- 在您的本地电脑上执行 SSH 命令。
详细说明
步骤一:配置公网服务器 (Server)
为了让公网服务器监听的端口能被公网上的任何人访问(而不仅仅是服务器自己访问),您需要确保 SSH 服务的 GatewayPorts 选项被设置为 yes。
登录您的公网服务器:
Bash
ssh user@your_public_server_ip编辑 SSH 配置文件
/etc/ssh/sshd_config。您可以使用nano或vim编辑器。Bash
sudo nano /etc/ssh/sshd_config找到
GatewayPorts这一行。- 如果它被注释掉了(前面有
#号)并且写着#GatewayPorts no,请去掉#号并把no改成yes。 - 如果找不到这一行,请在文件末尾添加新的一行。
- 最终确保文件中有这样一行:
GatewayPorts yes- 如果它被注释掉了(前面有
保存文件并重启 SSH 服务 以使配置生效。
对于使用 Systemd 的系统 (如 Ubuntu 16+, CentOS 7+, Debian 8+):
Bash
sudo systemctl restart sshd对于一些老系统:
Bash
sudo service ssh restart
安全提示: 开启
GatewayPorts意味着任何知道您服务器 IP 和8866端口的人都可以尝试访问您本地的服务。请确保您本地8886端口上运行的服务是安全的,或者在不需要时及时关闭隧道。重要提示: 重启sshd服务器最好断开ssh链接,重新连接一下,以防止修改配置后没有生效的情况发生(很重要)
步骤二:在您的本地电脑 (Local Machine) 上执行命令
这是建立隧道的关键命令。请打开您本地电脑的终端或命令行工具,而不是在公网服务器上执行。
基础命令:
Bash
ssh -R 8866:localhost:8886 user@your_public_server_ip命令解析:
ssh: SSH 客户端程序。-R: 参数,表示进行远程端口转发 (Remote Port Forwarding)。8866: 这是您希望在公网服务器上监听的端口。localhost:8886: 这是流量最终要被转发到的目标。localhost指的是本地电脑自己,8886是本地电脑上服务的端口。user@your_public_server_ip: 您用于登录公网服务器的用户名和 IP 地址。
执行此命令后,SSH 会要求您输入公网服务器的登录密码(或使用密钥自动登录)。连接成功后,隧道就建立好了。只要这个 SSH 连接保持活动状态,隧道就会一直工作。
如何访问
隧道建立成功后,您或互联网上的任何人都可以通过访问 http://your_public_server_ip:8866 (或使用其他协议,取决于您本地 8886 端口的服务类型)来访问您本地电脑上的服务了。
推荐:让隧道在后台稳定运行
上面的基础命令有一个缺点:如果您关闭了本地的终端窗口,SSH 连接就会断开,隧道也就失效了。为了让它在后台稳定运行,并且在网络波动时能自动重连,推荐使用以下更健壮的命令:
Bash
ssh -fN -R 8866:localhost:8886 user@your_public_server_ip -o ServerAliveInterval=60新增参数解析:
-f: 表示 SSH 连接成功后,在后台运行。-N: 表示不执行远程命令。这个参数告诉 SSH 客户端,我们仅仅是用来做端口转发的,不需要在远程服务器上打开一个 shell。-o ServerAliveInterval=60: 这是一个非常有用的选项,表示每隔 60 秒,本地 SSH 客户端会向服务器发送一个“心跳包”以保持连接活跃,防止因网络空闲而被路由器或防火墙断开。
如何停止后台运行的隧道?
您需要找到这个 SSH 进程的 PID 并结束它:
Bash
# 查找正在运行的 SSH 隧道进程
ps aux | grep "ssh -fN -R 8866"
# 从输出中找到进程号 (PID),然后使用 kill 命令结束它
kill <PID>高级工具: 如果您需要非常高的稳定性,可以考虑使用
autossh工具。它专门用于监控和自动重启失败的 SSH 隧道,比-o ServerAliveInterval更可靠。Bash
autossh -M 0 -fN -R 8866:localhost:8886 user@your_public_server_ip(需要先通过
sudo apt install autossh或yum install autossh等方式安装autossh)
总结
- 检查并设置公网服务器
/etc/ssh/sshd_config中的GatewayPorts yes,然后重启sshd服务。 - 在本地电脑上运行
ssh -fN -R 8866:localhost:8886 user@your_public_server_ip -o ServerAliveInterval=60。 - 通过
your_public_server_ip:8866访问您本地的服务。
好的,完全理解您的需求。您希望将公网服务器的 8866 端口作为入口,访问您本地(内网)电脑上运行在 8886 端口的服务。
这个场景非常适合使用 SSH 远程端口转发(Remote Port Forwarding),也常被称为 SSH 反向隧道。
它的原理是:在您的本地电脑上发起一个 SSH 连接到您的公网服务器,并“命令”公网服务器监听 8866 端口,然后将所有发送到这个端口的流量,通过这条已经建立好的 SSH 连接,安全地转发回您本地电脑的 8886 端口。
操作步骤
您需要两步关键操作:
- (可能需要)修改公网服务器的 SSH 配置。
- 在您的本地电脑上执行 SSH 命令。
详细说明
步骤一:配置公网服务器 (Server)
为了让公网服务器监听的端口能被公网上的任何人访问(而不仅仅是服务器自己访问),您需要确保 SSH 服务的 GatewayPorts 选项被设置为 yes。
登录您的公网服务器:
Bash
ssh user@your_public_server_ip编辑 SSH 配置文件
/etc/ssh/sshd_config。您可以使用nano或vim编辑器。Bash
sudo nano /etc/ssh/sshd_config找到
GatewayPorts这一行。- 如果它被注释掉了(前面有
#号)并且写着#GatewayPorts no,请去掉#号并把no改成yes。 - 如果找不到这一行,请在文件末尾添加新的一行。
- 最终确保文件中有这样一行:
GatewayPorts yes- 如果它被注释掉了(前面有
保存文件并重启 SSH 服务 以使配置生效。
对于使用 Systemd 的系统 (如 Ubuntu 16+, CentOS 7+, Debian 8+):
Bash
sudo systemctl restart sshd对于一些老系统:
Bash
sudo service ssh restart
安全提示: 开启GatewayPorts意味着任何知道您服务器 IP 和8866端口的人都可以尝试访问您本地的服务。请确保您本地8886端口上运行的服务是安全的,或者在不需要时及时关闭隧道。
步骤二:在您的本地电脑 (Local Machine) 上执行命令
这是建立隧道的关键命令。请打开您本地电脑的终端或命令行工具,而不是在公网服务器上执行。
基础命令:
Bash
ssh -R 8866:localhost:8886 user@your_public_server_ip命令解析:
ssh: SSH 客户端程序。-R: 参数,表示进行远程端口转发 (Remote Port Forwarding)。8866: 这是您希望在公网服务器上监听的端口。localhost:8886: 这是流量最终要被转发到的目标。localhost指的是本地电脑自己,8886是本地电脑上服务的端口。user@your_public_server_ip: 您用于登录公网服务器的用户名和 IP 地址。
执行此命令后,SSH 会要求您输入公网服务器的登录密码(或使用密钥自动登录)。连接成功后,隧道就建立好了。只要这个 SSH 连接保持活动状态,隧道就会一直工作。
如何访问
隧道建立成功后,您或互联网上的任何人都可以通过访问 http://your_public_server_ip:8866 (或使用其他协议,取决于您本地 8886 端口的服务类型)来访问您本地电脑上的服务了。
推荐:让隧道在后台稳定运行
上面的基础命令有一个缺点:如果您关闭了本地的终端窗口,SSH 连接就会断开,隧道也就失效了。为了让它在后台稳定运行,并且在网络波动时能自动重连,推荐使用以下更健壮的命令:
Bash
ssh -fN -R 8866:localhost:8886 user@your_public_server_ip -o ServerAliveInterval=60新增参数解析:
-f: 表示 SSH 连接成功后,在后台运行。-N: 表示不执行远程命令。这个参数告诉 SSH 客户端,我们仅仅是用来做端口转发的,不需要在远程服务器上打开一个 shell。-o ServerAliveInterval=60: 这是一个非常有用的选项,表示每隔 60 秒,本地 SSH 客户端会向服务器发送一个“心跳包”以保持连接活跃,防止因网络空闲而被路由器或防火墙断开。
如何停止后台运行的隧道?
您需要找到这个 SSH 进程的 PID 并结束它:
Bash
# 查找正在运行的 SSH 隧道进程
ps aux | grep "ssh -fN -R 8866"
# 从输出中找到进程号 (PID),然后使用 kill 命令结束它
kill <PID>高级工具: 如果您需要非常高的稳定性,可以考虑使用
autossh工具。它专门用于监控和自动重启失败的 SSH 隧道,比-o ServerAliveInterval更可靠。Bash
autossh -M 0 -fN -R 8866:localhost:8886 user@your_public_server_ip(需要先通过
sudo apt install autossh或yum install autossh等方式安装autossh)
总结
- 检查并设置公网服务器
/etc/ssh/sshd_config中的GatewayPorts yes,然后重启sshd服务。 - 在本地电脑上运行
ssh -fN -R 8866:localhost:8886 user@your_public_server_ip -o ServerAliveInterval=60。 - 通过
your_public_server_ip:8866访问您本地的服务。
