A端-Nextcloud服务器IP: 192.168.91.117 B端-VPS服务器地址:192.168.91.118(例)

A端 192.168.91.117 80 Nextcloud访问端口 内网 B端 192.168.91.118 9988 通过访问9988端口转发到A端的80端口 外网 9989 autossh监测端口,ssh超时关闭后会自动启动反向隧道

| A端 | 192.168.91.117| 80 | Nextcloud访问端口 |内网 | | -------- | -------- | -------- | |**B端 ** | **192.168.91.118 ** | **9988 **|通过访问9988端口转发到A端的80端口|外网 |||9989|autossh监测端口,ssh超时关闭后会自动启动反向隧道 |||

B端操作 打开防火墙放行端口 firewall-cmd --add-port=9988/tcp --permanent firewall-cmd --add-port=9989/tcp --permanent Firewall-cmd --reload

修改sshd配置文件

vim /etc/ssh/sshd_config

GatewayPorts yes

设置为yes后,会使9988监听在所有IP地址,不然会直接监听在127.0.0.1本机上。

A端操作 通过SSH建立反向隧道,将B端9988访问的请求和流量通过隧道转发到A端的80端口,但是SSH存在超时关闭的问题,我们就要用autossh来建立隧道,在ssh超时后会自动重新链接。

配置A端免密ssh登录B端 创建密钥 ssh-kenygen 将公钥传给B端 ssh-copy-id root@192.168.91.118 过程中会输入一次B端的root密码 完成后可免密直接ssh到B端

安装autossh yum install autossh -y

运行 autossh -M 9989 -fCNR 9988:localhost:80 root@47.240.160.186 意思是指定B端9988转发到A端本地80端口 使用root账号登录启动

参数说明

-p 22 远程主机SSH端口,默认是22,也可以省略 -i "*.pem" 基于密钥认证,如果基于口令认证,忽略 -f 表示后台执行,autossh 本来就在后台执行,所以不需要 -o ServerAliveInterval=180 保持连接Alive间隔180秒,可以调小 -N 表示不执行任何命令 -R 建立反向隧道 -L 建立正向代理 -M 监听隧道状态的端口,如果隧道不正常,告诉内网机器重连 -C 允许压缩数据 ** 打开防火墙放行端口** firewall-cmd --add-port=9990/tcp --permanent Firewall-cmd --reload

** 检查运行状态** A端 ps aux | grep ssh

B端 netstat -ntlp 9988 9989在0.0.0.0上监听为正常,是127.0.0.1的话就kill该进程重新链接

设置开机自启 在启动文件中添加 vim /etc/rc.d/rc.local 在末行添加 autossh -M 9989 -fCNR 9988:localhost:80 root@47.240.160.186 给 rc.local 文件赋予权限 chmod +x /etc/rc.d/rc.local

现在通过B端的公网地址加上端口来访问内网的Nextcloud云盘了 http://vps_ip:9988