30、【Ubuntu】【远程开发】内网穿透:反向隧道建立(二)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【远程开发】内网穿透:反向隧道建立(一)

分析了 SSH 建立反向隧道的关键选项 -R,并分析了 bind_address 的作用,下面继续

内网穿透

回到 -R 选项,还是第一种形式

  • bind_address 上篇 blog 已经解释了
  • port:公网端口,在远程服务器上监听的端口号
  • host:主机 ip,这里直接填 localhost 即可,主机为本地服务器
  • hostport:本地服务器上的端口(比如 localhost:22 是本地 SSH)

OK,再来看 -R 选项的详细描述,其功能可以在远程服务器(比如云主机)上监听一个端口,所有连到这个端口的流量,都会被 SSH 隧道转发回主动连接远程服务器的本地电脑里,举个形象点的比喻,就像在远程服务器上开一个门(端口),任何人敲这个门,SSH 就会通过加密隧道把请求转回到主动连接的本地机器上,连接到指定的服务

可以看到,其工作原理 就是 SSH 先在远程服务器上创建一个监听套接字 ,当有人连接这个端口时,SSH 就把这个连接通过已建立的加密隧道传回本地机器里,然后本地机器再根据指定的目标发起新的连接

如果想在服务器上监听特权端口的话,就必须用 root 用户登录服务器 ,关于特权端口的定义,可以参考 IANA 官方的端口分配策略(IANA 就是之前说过的负责分配互联网 IP 地址范围的机构)IANA Port Numbers

可以看到,端口范围被分成了三类

  • System Ports:范围 0~1023,分配给系统级服务,比如 HTTP/80SSH/22 等,一般和 root 权限绑定
  • User Ports:范围 1024~49151,可以注册给用户使用
  • Dynamic/Private Ports:范围 49152~65535,临时使用

所以可以看出来,端口号小于 1024 的是特权端口,比如 80443,如果想在服务器上监听这些特权端口,就得用 root 用户登录服务器,不然只能用 ≥1024 的端口

-R 选项中,比较关键的,还有下面这段描述

默认情况下,SSH 在远程服务器上监听的 TCP 端口,只会绑定到回环地址 127.0.0.1,也就是 bind_address 为空的情况,bind_address 为空的情况,上篇 blog 【Ubuntu】【远程开发】内网穿透:反向隧道建立(一) 已经详细讲了,这样主要是出于安全考虑,防止无意中把内网服务暴露到公网

这个默认行为可以通过指定 bind_address 来覆盖(也就是改变绑定的 IP 地址),比如 0.0.0.0:(IPv4),::: (IPv6),*:(IPv4+IPv6),实践中几乎都用 *:0.0.0.0:,允许所有 IP 访问

这里最关键的是后面这句话,只有当服务器的 sshd 配置中启用了 GatewayPorts,指定的 bind_address(比如 0.0.0.0:*:)才会生效,否则会被忽略,仍只绑定 127.0.0.1 回环地址

关于 GatewayPorts 的配置,在终端输入

bash 复制代码
man 5 sshd_config

可以打开 sshd 配置的用户说明,找到 GatewayPorts 选项关键字

GatewayPorts 这个选项控制是否允许其他远程主机 连接到为客户端 设置的端口转发服务,这里有两个名词,一个是其他远程主机,一个是客户端,画个图就明白了

在准备搭建的内网穿透环境中,其他远程主机就是在外地的用户,客户端就是内网的服务器,云服务器作为 server 只是做一个转发功能,所以这里的

  • remote hosts:指除了云服务器和内网服务器以外的其他机器,比如在外地的用户
  • ports forwarded for the client:这个词很常见了,在 -R 选项中,指内网服务器通过反向隧道在 SSH 云服务器上开启的监听端口

OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【远程开发】内网穿透:反向隧道建立(三)

相关推荐
程途拾光1584 小时前
企业部门协作泳道图制作工具 PC端
大数据·运维·流程图
dishugj4 小时前
【linux】Redhat 6.3系统安装zabbix-agent软件包,无法使用YUM源问题
linux·运维·zabbix
石像鬼₧魂石4 小时前
HexStrike-AI人工智能 渗透测试学习(Metasploitable2 192.168.1.4)完整流程总结
学习·ubuntu
时光803.4 小时前
快速搭建青龙面板Docker教程
windows·ubuntu·bash·httpx
无奈笑天下5 小时前
【麒麟镜像vmtools异常排查指导书】
linux·运维·经验分享·云计算·kylin
dajun1811234565 小时前
PC端中文免费在线跨职能泳道图制作工具
运维·架构·流程图·敏捷流程·交通物流
Xの哲學5 小时前
Linux多级时间轮:高精度定时器的艺术与科学
linux·服务器·网络·算法·边缘计算
FlourishingMind5 小时前
蓝牙授时CTS (Current Time Service)、PTP、NTP
运维·服务器·网络
2301_800050995 小时前
docker
运维·docker·容器
QT 小鲜肉6 小时前
【Linux命令大全】001.文件管理之mmove命令(实操篇)
linux·服务器·前端·chrome·笔记