FRP搭建内网穿透及答疑

214 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

Q&A

Q:为什么要用内网穿透

A:因为没有公网IP,现在的公网IP申请异常困难,甚至申请不到(工信部投诉中国移动也是一样的)

Q:内网穿透的工具有哪些

A:内网穿透的工具中比较有名的就是花生壳和FRP两种

Q:为什么不使用花生壳进行穿透

A:花生壳的免费版本只有1Mbps的带宽,而且只有两条映射。需要提高带宽或者映射就需要付费

Q:映射是什么

A:映射就是链接的线路,正常情况下SSH需要一条链路,部署一个项目需要一条,那么就没有映射了,而“物理服务器”肯定不只是部署一个项目,所以要么付费购买,要么另寻他路

Q:为什么使用FRP搭建内网穿透

A:FRP是免费的,而且没有映射线路的限制,虽然搭建的时候比花生壳麻烦,但是优点也很明显

Q:听说使用FRP需要使用域名+端口或者IP+端口

A:在不使用Nginx的时候确实需要,但是如果使用了Nginx的话,就可以直接使用域名进行访问了,如果没有域名,那确实是只能使用IP+端口的方式访问

Q:为什么需要云服务器

A:因为是自己搭建的FRP内网穿透,那么就需要一台拥有公网IP的服务器作为中转站

Q:云服务器的配置要什么要求

A:由于云服务器只是一个中转的服务器,因此CPU和内存方面没有太多的要求,可以使用现有的云服务器也可以开一台轻量服务器,因为轻量服务器性能和价格偏低,但是带宽会比ECS服务器高很多,所以轻量服务器会更划算

服务端

服务端也就是云服务器,FRP需要下载的版本是最新版本的Linux版本,不要最新版的话也可以自行下载,x86_64的处理器记得选择amd64.tar.gz版本

1、在Linux的/usr中新建文件夹frp,通过ftp将下载好的frp传入该文件夹内并且解压,然后删除frpc、frpc.ini、frpc_full.ini三个文件,会用到命令分别是:

(1)wget下载命令:
wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
(2)解压命令:
tar -zxvf frp_0.44.0_linux_amd64.tar.gz
(3)进入frp文件夹
cd frp_0.44.0_linux_amd64
(4) 删除客户端配置文件
rm -rf frpc
rm -rf frpc.ini
rm -rf frpc_full.ini

2、修改、补充frps.ini配置文件

vi frps.ini

按下i键将下面信息根据自己需求进行修改

#与frp客户端链接的端口,可自行设置
bind_port = 7000 
#frp面板的端口
dashboard_port = 7500 
#有域名的话,可以填写,没有的话就不用了,这里些主域名就行
subdomain_host = xxxxx.com 
#token的作用不过多介绍,自行设置,要记住,一会客户端用得上
token = 123456 
#frp面板的登录账号
dashboard_user = xxxx
#frp面板的登录密码 
dashboard_pwd = xxxx 
--------------------------------
#如果需要用到http或者https那就需要配置以下这个,如果部署多个web服务,那么也是这两个端口,不需要另外设置端口,只要在客户端设置就行
#这个是http的端口
vhost_http_port = 8083 
# https的端口
vhost_https_port = 8084 
---------------------------------
# 设置日志显示级别{debug, info, warn, error)
log_level = info
# 设置日志最大天数
log_max_days = 999
#超时时间
heartbeat_timeout = 90
#最大连接数
max_pool_count = 15
3、启动frps
./frps -c frps.ini

4、登录面板,使用ip+7500端口。输入账号密码,就可以看到面板了

5、这样的启动在不关闭ssh窗口的时候,是可以访问到的,但是一旦关闭了窗口就会关闭进程,所以要用Screen来运行

6、服务端的开机自启动可以不做也可以做,做的话参考客户端的开机自启动方法,我的建议是不做,因为云服务器重启后也是可以ssh连接上去的。

客户端

客户端就是家里的物理服务器,下载建议使用在线下载的方式,步骤跟服务端的1、2、3步一样的,第4步不一样,具体看

4、删除服务端的配置文件

rm -rf frps
rm -rf frps.ini
rm -rf frps_full.ini

5、添加、修改frpc.ini配置文件

vi frpc.ini

具体配置如下:

[common]
#填写服务端的IP
server_addr = xx.xx.xx.xx
# 服务端的bind_port设置的端口
server_port = 7000
# 服务端设置的token
token = 123456

[ssh]
type = tcp
local_port = 22
local_ip = 127.0.0.1
remote_port = 8885
[rdp]
type = tcp
local_ip = 127.0.0.1           
local_port = 3389
remote_port = 7001  
[smb]
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 7002
[yi]
type = http
local_port = 9050
subdomain = yi
[bt]
type = http
local_port = 8880
subdomain = bt
[tuh]
type = http
local_port = 10088
subdomain = tuh
[tu]
type = http
local_port = 10089
subdomain = tu

[ssh]:这个就是项目服务的名称,不能重复 type:链接的协议,web服务就是http、https,ssh就是tcp,还有udp等 local_port:项目部署在客户端上使用的端口,不是外网访问的端口 local_ip:本地的ip,可以直接写127.0.0.1 subdomain:二级域名的前面部分,主域名我们在服务端已经设置好了 根据自己的需求添加或删除这些项目和端口

6、启动frp客户端

./frpc -c frpc.ini

到这里就完成了FRP的内网穿透的基本设置。 但是会遇到断电的问题或者重启的情况,那么这时候就需要设置FRP开机自启动

7、设置开机自启动

(1)使用pwd查看路径
(2)将frpc.ini文件复制到/etc/frpc文件夹里,如果没有这个文件夹,就使用mkdir新建一个
sudo cp frpc.ini /etc/frpc/frpc.ini
(3)将frpc复制到/usr/local/bin/bin/frpc下,没有的就新建一个
sudo cp frpc /usr/local/bin/frpc
(4)写入内容,输入的时候会自动新建文本
sudo vi /usr/lib/systemd/system/frpc.service

内容如下

[unit]
Description=frpc
After=multi-user.targe

[Service]
TimeoutStartSec=30
#写(2)(3)步这两个文件的位置
ExecStart=/usr/local/bin/frpc -c /etc/frpc/frpc.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target
(5)设置自动启动
sudo systemctl enable frpc
(6)启动frpc
sudo systemctl start frpc
(7)查看运行状态
sudo systemctl list-units |grep frpc
sudo systemctl status frpc

以上内容来自自己的配置,不一定合理,制作记录参考,同时也欢迎指正