首页 / 更多教程 / frp内网穿透(利用阿里云服务器)
frp内网穿透(利用阿里云服务器)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了frp内网穿透(利用阿里云服务器),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7160字,纯文字阅读大概需要11分钟。
内容图文
目录内网穿透
内网: 可以理解为局域网(LAN,local area network), 顾名思义,是个本地的网络,只能实现小范围短距离的网络通信。在这个内网范围外的电脑或者设备(即外网)是无法直接访问到内网的设备的.
举个例子就是, 小明在某公司上班, 在公司内网中, 有一台服务器A(192.168.18.105), 小明在这台服务器上开发了一个python web应用. 由于服务器在内网, 所以如果小明周末回家后想继续加班, 是无法直接访问到那台公司的服务器的, 只能在本地调试, 这样不是很方便.
而内网穿透就能解决这个问题, 能够让外网设备访问到内网的设备. 实现内网穿透的方法也有很多, 这里介绍的是frp工具
frp介绍
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发.
使用frp的前提是必须要有一台具有公网IP的服务器或者电脑, 并且内网的服务器能够访问到这台有公网IP的服务器.
大致逻辑就是在公网服务器上安装frp服务端服务(称为frp服务端), 然后在内网服务器上安装frp客户端服务(称为frp客户端), frp客户端和服务端会相互建立连接并通信. 因此外网电脑可以通过公网服务器(frp服务端)访问到内网服务器(frp客户端), 公网服务器充当一个中间桥梁的作用.
本例用到的设备环境信息为:
内网服务器A: Ubuntu 内网IP: 192.168.18.105 用户名 clear
公网服务器B: 阿里云 Ubuntu 公网IP地址: 47.102.114.90 用户名 alex
一台想要访问内网服务器的电脑C: windows10
frp安装和配置(ssh)
下载:
在frp的github上下载最新版本的安装包, 现在的最新版本是v0.34.3
, 在内网服务器A和公网服务器B上都需要下砸frp压缩包, 这里选择的是frp_0.34.3_linux_amd64.tar.gz
安装:
分别在A/B两台服务器上解压, 这里是解压到了/usr/local/
目录下
cd /usr/local
# 创建frp目录
sudo mkdir frp
# 下载压缩包
sudo wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
# 解压到当前目录
sudo tar -zxvf frp_0.34.3_linux_amd64.tar.gz
# 重命名解压后的文件夹
sudo mv frp_0.34.3_linux_amd64 frp_0.34.3
# 进入文件夹
cd frp_0.34.3/
# 查看文件 ls
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE systemd
这里我们需要关注的是4个文件, 服务端(公网服务器)相关的文件frps 和 frps.ini
, 客户端(内网服务器)相关的文件frpc 和 frpc.ini
配置frp服务端(公网服务器上):
# 编辑服务端配置文件
sudo vim frps.ini
# 默认为下面2行
[common]
bind_port = 7000
# bind_port默认为7000端口, 这个端口是用来与客户端通信的端口(不是后面ssh命令中的端口)
# 查看7000端口是否已经被占用了
sudo netstat -anlp | grep 7000
# 有输出结果, 说明已经被占用了, 这里我们改成9000端口
bind_port = 9000
由于阿里云服务器有安全组规则
的机制, 因此需要在安全组规则
中将9000
端口开放出来, 这样客户端服务器才能访问到这个端口从而进行连接(修改后可以不需要重启服务器)
启动frp服务端(公网服务器上):
# 继续之前的操作, 当前地址为 /usr/local/frp/frp_0.34.3
# 运行启动命令(前台进程, ctrl+c可以停止进程)
./frps -c frps.ini
# 可以看到下面的输出
2021/01/02 15:26:38 [I] [service.go:190] frps tcp listen on 0.0.0.0:9000
2021/01/02 15:26:38 [I] [root.go:215] start frps success
# 或者运行后台启动命令(后台进程, ctrl+c可以停止进程的输出, 但是不会真正停止进程, 可以通过 kill 进程号 来停止)
./frps -c frps.ini &
[1] 40403 # 运行后会输出一个进程号
2021/01/02 15:28:21 [I] [service.go:190] frps tcp listen on 0.0.0.0:9000
2021/01/02 15:28:21 [I] [root.go:215] start frps success
配置frp客户端(内网服务器上):
# 编辑客户端配置文件
sudo vim frpc.ini
# 默认为下面几行, # 号后面的为解释
[common]
server_addr = 127.0.0.1 # 上面服务端的公网IP地址 47.102.114.90
server_port = 7000 # 上面服务器的配置文件中的bind_port 9000
[ssh] # 通过ssh连接到内网服务器的配置
type = tcp # ssh连接的协议类型
local_ip = 127.0.0.1 # 内网服务器的ip地址, 也可以为127.0.0.1
local_port = 22 # 内网服务器的ssh连接端口, 默认为22
remote_port = 6000 # 这个端口外网服务器(windows)通过ssh命令来访问内网服务器的端口, 因此该端口也需要添加到阿里云的网络安全组中
修改后的配置文件为
[common]
server_addr = 47.102.114.90
server_port = 9000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 9001
上面几个端口的说明:
bind_port和server_port两者需要相同, 这两个端口是用来服务端与客户端建立连接并进行通信的, 用来保证frp的内网穿透功能能够生效
local_port和remote_port, local_port是内网服务器的ssh连接端口, 一般服务器的ssh端口默认都是22, remote_port是ssh连接公网服务器的端口, 该端口接收到的连接会转发到内网服务器的22端口, 因此最终建立的连接是ssh到了内网服务器上
启动frp客户端(内网服务器上):
# 继续之前的操作, 当前地址为 /usr/local/frp/frp_0.34.3
# 运行启动命令(前台进程, ctrl+c可以停止进程)
./frpc -c frpc.ini
# 可以看到下面的输出
2021/01/02 15:48:13 [I] [service.go:288] [80cce7d4d0d00402] login to server success, get run id [80cce7d4d0d00402], server udp port [0]
2021/01/02 15:48:13 [I] [proxy_manager.go:144] [80cce7d4d0d00402] proxy added: [ssh]
2021/01/02 15:48:13 [I] [control.go:180] [80cce7d4d0d00402] [ssh] start proxy success
# 或者运行后台启动命令(后台进程, ctrl+c可以停止进程的输出, 但是不会真正停止进程, 可以通过 kill 进程号 来停止)
./frpc -c frpc.ini &
[1] 26937 # 运行后会输出一个进程号
2021/01/02 15:51:24 [I] [service.go:288] [8b27c278e8ff55c4] login to server success, get run id [8b27c278e8ff55c4], server udp port [0]
2021/01/02 15:51:24 [I] [proxy_manager.go:144] [8b27c278e8ff55c4] proxy added: [ssh]
2021/01/02 15:51:24 [I] [control.go:180] [8b27c278e8ff55c4] [ssh] start proxy success
外网连接内网服务器:
上面服务端和客户端都配置并启动后, 随便找一台能够上网的电脑, 这里使用windows, 运行下面的ssh命令就可以连接到内网服务器
ssh -p remote_port 内网服务器的用户名@公网服务器的公网IP
# 如: ssh -p 9001 clear@47.102.114.90
# 这里的端口9001就是客户端配置文件中的remote_port
# clear就是内网服务器的用户名, 注意不是公网服务器的用户名
# 47.102.114.90是公网服务器的ip
frp配置访问web服务
方式一: 在frp客户端配置中添加tcp配置项
# 在内网服务器(客户端), 编辑配置文件 frpc.ini, 添加配置项
# my_project可以自定义
# 内网服务器的web服务是运行在了11111端口上, 因此local为11111
# remote_port可以随意配置,是内网11111端口的公网映射端口, 这里也配成了11111
[my_project]
type = tcp
local_ip = 127.0.0.1
local_port = 11111
remote_port = 11111
重新启动frp客户端, 通过postman调用内网服务器的接口, 可以成功调用
方式二: 通过公网服务器的域名直接访问内网服务器
# 在公网服务器(服务端), 编辑配置文件 frps.ini, 添加一行配置项
vhost_http_port = 80 # 对于下面的客户端配置中type为http协议的对应端口, http协议端口默认为80, 可以理解为之前的remote_port, 也可以设置为11111
# 在内网服务器(客户端), 编辑配置文件 frpc.ini, 添加配置项
# my_project可以自定义
# type不是tcp了, 而是http
# 内网服务器的web服务是运行在了11111端口上, 因此local_port为11111
# custom_domains是公网服务器的域名
[my_project]
type = http
local_ip = 127.0.0.1
local_port = 11111
custom_domains = www.alex-gcx.top
重启frp客户端和服务端服务, 通过域名(不需要加端口)访问内网服务器接口
此时直接通过IP访问会报错找不到网页
一台frp服务器穿透多个内网服务器
现在内网中再拿来一台服务器, 内网IP地址为192.168.30.80
, 同样按上面的步骤配置frp客户端即可, 需要注意的就是[]中的实例名(common需要重复)
和remote_port
不要重复即可, 如:
[common]
server_addr = 47.102.114.90
server_port = 9000
[ssh2]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 9002
内容总结
以上是互联网集市为您收集整理的frp内网穿透(利用阿里云服务器)全部内容,希望文章能够帮你解决frp内网穿透(利用阿里云服务器)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。