通过ssh端口转发实现内网穿透效果

把服务发布到服务器上

前提条件: 需要有一台能通过ssh连接的服务器, 用于转发流量

添加ssh远程连接配置(在本地操作)

# 编辑ssh远程连接配置
vim ~/.ssh/config

# 添加以下配置
Host aaa.internet.company
  HostName 10.0.1.23
  User root
  # 通过指定的密钥免密登录
  IdentityFile ~/.ssh/id_ed25519_xxx
  # 将本地主机(192.168.2.88)的8000端口映射到远程主机(10.0.1.23)的8000端口, 相当于访问192.168.1.94:8000的流量都转发到10.0.0.23:8000上去
  # LocalForward <本地IP>:<本地端口> <远程IP>:<远程端口>
  LocalForward 192.168.2.88:8000 10.0.1.23:8000
  # 将远程主机(10.0.1.23)的9000端口映射到本地主机(192.168.2.88)的9000端口, 相当于访问10.0.0.23:9000的流量都转发到192.168.1.94:9000上去
  # RemoteForward <远程IP>:<远程端口> <本地IP>:<本地端口>
  RemoteForward 10.0.1.23:9000 192.168.2.88:9000

LocalForward配置的作用: 让本地机器所在局域网内的其他机器可以通过访问本地机器的指定端口来访问远程机器的指定端口(相当于反向内网穿透)

RemoteForward配置的作用: 让远程机器所在局域网内的其他机器可以通过访问远程机器的指定端口来访问本地机器的指定端口(相当于内网穿透)

  • 连接远程服务器
# 连接服务器
ssh aaa.internet.company

调整ssh配置(在服务器中操作)

允许SSH服务器监听所有网络接口上的转发端口,而不仅仅是本地回环地址

# 编辑文件
vim /etc/ssh/sshd_config
# 找到`GatewayPorts`配置, 放开注释, 并修改值为yes: `GatewayPorts yes`, 不配置只能通过回环地址(localhost)转发
# 重启ssh服务, 使配置生效
systemctl restart sshd

开放端口(在服务器中操作)

配合nginx使用时, 这一步可以省略

# 查看开放的端口
# firewall-cmd --list-ports
# 开发指定的端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
# 关闭指定的端口
# firewall-cmd --zone=public --remove-port=9000/tcp --permanent
# firewall-cmd --reload

开启流量转发(在本地操作)

# 前台启动
# ssh -N aaa.internet.company
# 后台启动
ssh -Nf aaa.internet.company

# -N 不执行远程命令,只进行数据转发
# -f 后台运行

至此, 即可通过服务器IP加端口访问本地服务了, 也可配合nginx反向代理本地服务, 通过IP或域名访问, 无需再开放额外的端口


SSH Tunneling(SSH隧道)是一种通过加密的安全外壳协议(Secure Shell Protocol,简称SSH)传输其他流量的技术。它可以用于实现内网穿透,让外部网络能够访问位于内网中的资源。 以下是利用SSH Tunneling实现内网穿透的具体步骤: 1. **准备条件** - 拥有一个带公网IP的服务器(称为跳板机),并开放SSH服务。 - 客户端(如个人电脑或手机)以及需要被访问的目标内网机器均能正常上网,并安装好SSH客户端软件。 2. **本地端口转发(Local Port Forwarding)** 这是最简单的形式。假如你想从互联网上的任意地方访问只有在公司内部才能使用的数据库服务(比如MySQL),你可以这样做: ``` ssh -L [本地绑定地址]:[本地监听端口]:[目标服务器地址]:[目标服务器端口] 用户名@[跳板机公网ip] ``` 示例: ```bash ssh -L 127.0.0.1:3306:localhost:3306 user@public_server_ip ``` 此命令将在您的计算机上启动一个SSH会话,并将所有发往您计算机的127.0.0.1:3306 的数据发送到 public_server 上并通过它再传送到最终目标即 localhost:3306 (这里的localhost是从public_server角度来看的实际内网mysql server). 3. **远程端口转发(Remote Port Forwarding)** 当我们想把内网里的某个服务暴露出来给别人用的时候就适合这种方法。假设你有一台只能在家里面联网的小型web应用服务器,但是现在外面的朋友也想看看它的成果,那么就可以这么做: ``` ssh -R [远程绑定地址]:[远程监听端口]:[源服务器地址]:[源服务器端口] 用户名@[跳板机公网ip] ``` 示例: ```bash ssh -R *:8080:localhost:80 user@public_server_ip ``` 4. **动态端口转发(Dynamic Port Forwarding/SOCKS Proxy)** 对于不确定要访问哪些网站的情况或者希望更灵活地控制所有的出站连接时,可以选择创建SOCKS代理: ``` ssh -D [本地绑定地址]:[本地监听端口] 用户名@[跳板机公网ip] ``` 使用浏览器或者其他支持socks5代理的应用设置上述生成的代理后,即可伪装成从jumpserver发出的所有请求了。 注意:以上各种模式都需要提前确认防火墙规则允许相应的入站和出站流量才行哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随猿Fa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值