将本地服务共享给服务器方法之一(SSH -R)

随笔3周前发布 巫婆梅
2 0 0

文档说明:只记录关键地方; 发布时间: 2023-12-27
需求: 通过公网临时访问本地正在开发的服务
运行环境: linux macos
状态: 实验完善中
用途例子:

1、 本地调试微信公众号 服务器推送的消息
2、 公网临时预览,预览本地开发的服务
3、 服务器访问本地 NAS 服务
4、 远程协助等等
5、 服务器共享本地代理服务

实验探索方案

通过检索将本地服务共享给服务器 其实有很多实现方法,比如:

frp
ngok
WireGuard
tailscale
zerotier
todesk
RustDesk
SSH -R 命令 最方便快捷
等等,以及各种 SDN 解决方案

最后结论: 只要能解决内网 NAT 穿越的工具,都可以实现此功能

比如常用 ICE(Interactive Connectivity Establishment)建立端到端的数据通道 (STUN、TURN 协议的一套框架,用于找到一条可用且最优传输数据通道连接) 也就是 webRTC 里面的 p2p 数据通道

选择的方案

不想配置,不想注册帐号,又想快速使用

使用 ssh -R 命令 快速实现

(SSH -R)服务端配置

# SSH服务端配置
vi /etc/ssh/sshd_config
# GatewayPorts yes
#配置完毕重启sshd
systemctl restart sshd

(SSH -R)本地配置

例子说明:

服务器公网地址: 39.104.48.241 , 服务器内网地址: 172.23.149.62

本地服务地址: 127.0.0.1:9501 (你的本地提供的 http 服务)

按需修改你本地服务地址即可

ip='39.104.48.241'
keyfile=/home/jingingxyk/huhehaote-sdn-test.pem
{
ssh -o StrictHostKeyChecking=no
-o ExitOnForwardFailure=yes
-o TCPKeepAlive=yes
-o ServerAliveInterval=15
-o ServerAliveCountMax=3
-i $keyfile
-v -CTgN
-R 172.23.149.62:2000:127.0.0.1:9501
root@$ip
} || {
echo $?
}

在服务器验证是否配置成功例子

例子一: 服务器访问本地网页服务

curl -v http://172.23.149.62:2000/index.html

例子二: 服务器 访问 本地 mysql 服务

本地服务的端口 6379

把上述命令 127.0.0.1:9501 替换为 127.0.0.1:6379

mysql -p 2000 root@172.23.149.62

例子三: 将本地代理服务共享给服务器

本地服务的端口 7892

把上述命令 127.0.0.1:9501 替换为 127.0.0.1:7892

curl -v --proxy 'http://172.23.149.62:2000' https://chromium.googlesource.com
curl -v --proxy 'socks5h://172.23.149.62:2000' https://chromium.googlesource.com

参考文档

SSH 命令的三种代理功能(-L/-R/-D)
SSH 连接保持不断线
NAT介绍以及穿透各种类型nat的技术实现包括对称型nat
【译】 NAT 穿透是如何工作的:技术原理及企业级实践
ICE协议下NAT穿越的实现(STUN&TURN)
Using WebRTC data channels

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...