本文导入:通常情况下,我们得到运营商的公网ip是一件难上加难的事情,而我们部署在自家电脑上的云服务无法公网访问,故而诞生一种技术——内网穿透,本文将以Debian系统为例,讲解实战部署的过程
什么是Frp/内网穿透

如上图所示,内网穿透技术的核心便是借助一台公网服务器实现内网机器的公网访问,那你可能会问,既然都有一台公网服务器了,那为什么还需要再用自己的机器充当服务器呢?如果你就是一些非常简单的业务,比如仅有一个博客,那的确不需要,轻量的服务采用云服务厂商的托管性价比高于自行维护,但如果需要往上增加一些要求(CPU核心数,内存大小),云服务厂商的服务器价格往往会很贵,这种方案就失去了性价比,因而,搭建内网穿透使上云自主可控
为什么选用Frp
市面上支持内网穿透的有很多,为什么选用Frp呢,在我看来就是轻量与开源与跨平台支持,常见的Linux,Windows,MacOS它都支持,大大减轻了多端部署的麻烦
部署Frp服务
部署Frp服务分为两部分,一部分是服务端,另一部分是客户端,服务端我们刚刚讲了,需要一台公网服务器,这里给大家推荐阿里云的轻量应用服务器

国内轻量应用服务器(2核2G)价格基本45¥/月,海外服务器的话2核1G是最划算的38¥/月,当然,如果你想买国内的服务器,请注意你务必有一个已经备案的域名,没有的话必须购买3个月及以上才能获得阿里云赠送的备案服务,当然,海外服务器就没有这样的顾虑,曾经在高中阶段我购买的便是新加坡的服务器,物美价廉很推荐
服务器不仅要看性能,像我们作为一台内网穿透的“跳板”服务器,带宽与流量都是十分重要的,而轻量应用服务器的带宽达到了惊人的200Mbps,流量更是有1024GB,对我们来说绰绰有余,因为本文采用Debian作为示例(笔者也十分喜欢 Debian系),因而操作系统我们选择Debian,其他Linux系统也大同小异
注意,购买完成后需要去轻量云服务器控制台更新root账号密码,笔者这里使用XShell连接

下面开始正式部署
- Step1
去frp github存储库的Release里下载最新版本的zip压缩包,用sftp上传到服务器
- Step2
在服务器里面输入如下指令解压
tar -zxvf <path_to_frp.tar.gz>
默认会在当前目录解压,之后输入,这个名字太长,我们不喜欢,换一个短点的
mv ./<frp_folder_name> ./frp
此时,文件夹名称已被我们更改为 frp,我们进入文件夹,删除不需要的文件
cd ./frp
rm ./frpc
rm ./frpc.toml
好了,我们保留了需要的服务端frps和配置文件frps.toml,我们来编辑一下配置文件frps.toml
vim ./frps.toml
之后删干净里面的内容,我们从新来写
[common]
token = <your_token> #此处输入类似密码的东西,保持与客户端一致
vhost_http_port = 80 #http服务监听端口
vhost_https_port = 443 #https服务监听端口
bind_port = 7000 #frp服务端口
输入:wq保存,之后,我们需要运行frps服务
./frps -c ./frps.toml
此时,完成部署,之后在防火墙端口放行7000 80 443这三个端口
- Step2+
或许你发现了,当你断开与服务器的连接后,frps服务就莫名其妙停止了,这时候我们有两个方法解决
方法一:使用nohup后台运行
nohup ./frps -c ./frps.toml &
这样简单省事,但是云服务器一旦关机重启frps并不会自启动,我建议使用下面的方法二
方法二:systemd服务
vim /etc/systemd/system/frps.service
编辑新的服务文件,输入如下内容
[Unit]
Description=frps service
After=network.target
[Service]
ExecStart=/root/frp/frps -c /root/frp/frps.toml
WorkingDirectory=/root/frp
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
输入:wq保存服务,我们需要重启systemd以使服务生效
systemctl daemon-reload
之后,我们来启动frps服务
systemctl start frps
至此服务端的配置完成,客户端也大同小异,在此将所有代码一并粘上
- Step3:客户端
tar -zxvf ./<path_to_frp.tar.gz>
mv ./<frp_folder_name> ./frp
cd ./frp
rm ./frps
rm ./frps.toml
vim ./frpc.toml
之后注意此时客户端配置文件内容与服务端不同
[common]
server_addr = <your_server_ipv4_addr> #此处输入服务器ip
server_port = 7000
token = <your_token> #此处输入类似密码的东西,保持与服务端一致
[<serve name>] #在这输入服务名称
type = tcp #这是tcp服务,tcp与udp是完全一样的格式
local_ip = 127.0.0.1
local_port = 114 #本地服务端口
remote_port = 514 #公网服务器穿透后端口
[<serve name>]
type = http #这是http服务,http和https服务格式是完全一样的
local_ip = 127.0.0.1
local_port = 80
custom_domains = <your_domain_name> #这填你的域名,记得待会解析过来
之后配置自启动服务
vim /etc/systemd/system/frpc.service
[Unit]
Description=frpc service
After=network.target
[Service]
ExecStart=/home/<user_name>/frp/frpc -c /home/<user_name>/frp/frpc.toml
#注意用户名是啥 <user_name>是啥
WorkingDirectory=/home/<user_name>/frp
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
一样的方式保存服务
systemctl daemon-reload
systemctl enable frpc #这句的意思是自启动
好了,至此都完成了,此时我们已经可以内网穿透访问服务了