华为云服务器实现frp内网穿透

背景

疫情影响学校不开学,但是实验该做还是要做,然而实验室的服务器开机后封锁在了校园网内,想从家里通过外网访问还需要费点功夫。想起来之前为了搭个人博客买了阿里云的服务器,这个时候就要派上用场了,有的同学可能会说zerotier很好用,但是zerotier是p2p比较依赖网速,并且我这边实验室服务器是需要多人同时使用docker容器,需要我这个网管配置好后,其他人直接ssh连接容器端口登陆。

工具

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议

目标

通过frp内网穿透使在家的我能够远程ssh连接处于内网的实验室GPU服务器,中间跳板是阿里云服务器。

那么学会这套方法后,中间跳板不局限于云服务器,只要是具有公网ip的东东合理配置后都能作为内网穿透的跳板。

我的设备环境

frp服务端:阿里云应用轻量服务器   Centos7

frp客户端:实验室服务器  Ubuntu16.04

Step1:frp服务端(阿里云服务器)配置

首先到frp的release界面下载适合自己电脑的程序

Releases · fatedier/frp · GitHub 可以直接去这个页面下载

也可以通过wget命令下载

wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz

然后解压

tar -zxvf  frp_0.32.1_linux_amd64.tar.gz

然后进入cd到frp_0.32.1_linux_amd64目录,对于服务端的配置可以直接先将frpc和frpc.ini文件删除,之后配置frps.ini

 
  1. [common]

  2. bind_port = 7000 #与客户端绑定的进行通信的端口

保存后就可以启动服务端了

 
  1. # 前台启动

  2. ./frps -c ./frps.ini

  3. # 后台启动(正常使用后推荐后台启动)

  4. nohup ./frps -c ./frps.ini &

Step2:frp客户端(实验室服务器)配置

首先还是程序下载并解压

 
  1. wget https://github.com/fatedier/frp/releases/download/v0.32.1/frp_0.32.1_linux_amd64.tar.gz

  2. tar -zxvf frp_0.32.1_linux_amd64.tar.gz

然后进入cd到frp_0.32.1_linux_amd64目录,对于客户端的配置可以直接先将frps和frps.ini文件删除,之后配置frpc.ini

 
  1. [common]

  2. server_addr = 106.15.333.9 # 公网服务器ip

  3. server_port = 7000 # 与服务端bind_port一致

  4. #公网通过ssh访问内部服务器

  5. [ssh]

  6. type = tcp # 连接协议

  7. local_ip = 192.168.3.48 # 内网服务器ip(127.0.0.1也行)

  8. local_port = 22 # ssh默认端口号

  9. remote_port = 6000 # 自定义的访问内部ssh端口号

  10. # 解释一下local_port和remote_port

  11. # 我们ssh访问的是公网ip,remote_port是公网服务器的port,访问remote_port后会转发到local_port

保存后就可以启动客户端了

 
  1. # 前台启动

  2. ./frpc -c ./frpc.ini

  3. # 后台启动(正常使用后推荐后台启动)

  4. nohup ./frpc -c ./frpc.ini &

Step3:ssh远程连接内网服务器

 
  1. ssh -p remote_port username@公网ip

  2. # 举例

  3. ssh -p 7000 horizon@106.15.333.9

connect time out问题

阿里云服务器上正常启动了frps后,在客户端启动frpc时等待了一段时间报错

[service.go:82] login to server failed: dial tcp 106.15.333.9:7000: connect: connection timed out

当错误提示出现time out超时后,需要检查服务端的bind_port或者说serve_port是不是真的打开了,如果被防火墙拦截了,那么客户端启动frpc时就无法正常访问这个端口来实现穿透。

这里我打开了阿里云的界面找到防火墙(注意!ECS云服务器需要去调整安全组开放端口,而我是轻量应用服务器直接找到防火墙即可),果然防火墙只打开了几个常用的端口,bind_port=7000这个端口没有被开放,添加一下规则开放端口(可以尝试全部开放,免得以后再设置)

这个问题其实花了比较长的时间才解决,主要是阿里云服务器用的不熟,不知道可以直接在防火墙这里开放端口,我开始的时候在centos里尝试了各种防火墙开放端口的命令都没有成功,开放端口后重新启动客户端的frpc就能正常连接了。

多端口转发

由于我这里需要多人同时访问,一个local_port和remote_port对应肯定不够用,网上的有方法说这样写可以实现TCP范围转发,大家可以参考

 
  1. # 本地端口和远程端口可以指定多个范围,如下格式,且范围之间必须一一对应

  2. local_port = 6010-6020,6022,6024-6028

  3. remote_port = 16010-16020,16022,16024-16028

但是实际上我这样写没有成功,报错提示这是非法端口号,于是我换了一种方法,配置多个ssh来实现多端口转发

 
  1. [common]

  2. server_addr = 106.15.333.9 # 公网服务器ip

  3. server_port = 7000 # 与服务端bind_port一致

  4. #公网通过ssh访问内部服务器

  5. [ssh1]

  6. type = tcp # 连接协议

  7. local_ip = 192.168.3.48 # 内网服务器ip(127.0.0.1也行)

  8. local_port = 22 # ssh默认端口号

  9. remote_port = 6000 # 自定义的访问内部ssh端口号

  10. [ssh2]

  11. type = tcp # 连接协议

  12. local_ip = 192.168.3.48 # 内网服务器ip(127.0.0.1也行)

  13. local_port = 50000 # ssh默认端口号

  14. remote_port = 50000 # 自定义的访问内部ssh端口号

  15. [ssh3]

  16. type = tcp # 连接协议

  17. local_ip = 192.168.3.48 # 内网服务器ip(127.0.0.1也行)

  18. local_port = 50001 # ssh默认端口号

  19. remote_port = 50001 # 自定义的访问内部ssh端口号

理解起来也很容易,就是服务端开放三个端口6000,50000,50001访问,当ssh访问ip:port时就会按照对应关系来转发,访问服务端6000转发到客户端22,访问服务端50000转发到客户端50000。

这样我所需要的内网穿透功能就全部实现了,frp功能非常强大还有很多用法可以探索!

 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值