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下载命令:
<span class="token function">wget</span> https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz<span class="token function">wget</span> https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gzwget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz
(2)解压命令:
<span class="token function">tar</span> -zxvf frp_0.44.0_linux_amd64.tar.gz<span class="token function">tar</span> -zxvf frp_0.44.0_linux_amd64.tar.gztar -zxvf frp_0.44.0_linux_amd64.tar.gz
(3)进入frp文件夹
<span class="token builtin class-name">cd</span> frp_0.44.0_linux_amd64<span class="token builtin class-name">cd</span> frp_0.44.0_linux_amd64cd frp_0.44.0_linux_amd64
(4) 删除客户端配置文件
<span class="token function">rm</span> -rf frpc <span class="token function">rm</span> -rf frpc.ini <span class="token function">rm</span> -rf frpc_full.ini<span class="token function">rm</span> -rf frpc <span class="token function">rm</span> -rf frpc.ini <span class="token function">rm</span> -rf frpc_full.inirm -rf frpc rm -rf frpc.ini rm -rf frpc_full.ini
2、修改、补充frps.ini配置文件
<span class="token function">vi</span> frps.ini<span class="token function">vi</span> frps.inivi frps.ini
按下i键将下面信息根据自己需求进行修改
bind_port <span class="token operator">=</span> <span class="token number">7000</span> dashboard_port <span class="token operator">=</span> <span class="token number">7500</span> subdomain_host <span class="token operator">=</span> xxxxx.com token <span class="token operator">=</span> <span class="token number">123456</span> dashboard_user <span class="token operator">=</span> xxxx dashboard_pwd <span class="token operator">=</span> xxxx -------------------------------- vhost_http_port <span class="token operator">=</span> <span class="token number">8083</span> vhost_https_port <span class="token operator">=</span> <span class="token number">8084</span> --------------------------------- log_level <span class="token operator">=</span> info log_max_days <span class="token operator">=</span> <span class="token number">999</span> heartbeat_timeout <span class="token operator">=</span> <span class="token number">90</span> max_pool_count <span class="token operator">=</span> <span class="token number">15</span>bind_port <span class="token operator">=</span> <span class="token number">7000</span> dashboard_port <span class="token operator">=</span> <span class="token number">7500</span> subdomain_host <span class="token operator">=</span> xxxxx.com token <span class="token operator">=</span> <span class="token number">123456</span> dashboard_user <span class="token operator">=</span> xxxx dashboard_pwd <span class="token operator">=</span> xxxx -------------------------------- vhost_http_port <span class="token operator">=</span> <span class="token number">8083</span> vhost_https_port <span class="token operator">=</span> <span class="token number">8084</span> --------------------------------- log_level <span class="token operator">=</span> info log_max_days <span class="token operator">=</span> <span class="token number">999</span> heartbeat_timeout <span class="token operator">=</span> <span class="token number">90</span> max_pool_count <span class="token operator">=</span> <span class="token number">15</span>bind_port = 7000 dashboard_port = 7500 subdomain_host = xxxxx.com token = 123456 dashboard_user = xxxx dashboard_pwd = xxxx -------------------------------- vhost_http_port = 8083 vhost_https_port = 8084 --------------------------------- log_level = info log_max_days = 999 heartbeat_timeout = 90 max_pool_count = 15
3、启动frps
./frps -c frps.ini./frps -c frps.ini./frps -c frps.ini
4、登录面板,使用ip+7500端口。输入账号密码,就可以看到面板了
5、这样的启动在不关闭ssh窗口的时候,是可以访问到的,但是一旦关闭了窗口就会关闭进程,所以要用Screen来运行
6、服务端的开机自启动可以不做也可以做,做的话参考客户端的开机自启动方法,我的建议是不做,因为云服务器重启后也是可以ssh连接上去的。
客户端
客户端就是家里的物理服务器,下载建议使用在线下载的方式,步骤跟服务端的1、2、3步一样的,第4步不一样,具体看
4、删除服务端的配置文件
<span class="token function">rm</span> -rf frps <span class="token function">rm</span> -rf frps.ini <span class="token function">rm</span> -rf frps_full.ini<span class="token function">rm</span> -rf frps <span class="token function">rm</span> -rf frps.ini <span class="token function">rm</span> -rf frps_full.inirm -rf frps rm -rf frps.ini rm -rf frps_full.ini
5、添加、修改frpc.ini配置文件
<span class="token function">vi</span> frpc.ini<span class="token function">vi</span> frpc.inivi frpc.ini
具体配置如下:
<span class="token punctuation">[</span>common<span class="token punctuation">]</span> server_addr <span class="token operator">=</span> xx.xx.xx.xx server_port <span class="token operator">=</span> <span class="token number">7000</span> token <span class="token operator">=</span> <span class="token number">123456</span> <span class="token punctuation">[</span>ssh<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> tcp local_port <span class="token operator">=</span> <span class="token number">22</span> local_ip <span class="token operator">=</span> <span class="token number">127.0</span>.0.1 remote_port <span class="token operator">=</span> <span class="token number">8885</span> <span class="token punctuation">[</span>rdp<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> tcp local_ip <span class="token operator">=</span> <span class="token number">127.0</span>.0.1 local_port <span class="token operator">=</span> <span class="token number">3389</span> remote_port <span class="token operator">=</span> <span class="token number">7001</span> <span class="token punctuation">[</span>smb<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> tcp local_ip <span class="token operator">=</span> <span class="token number">127.0</span>.0.1 local_port <span class="token operator">=</span> <span class="token number">445</span> remote_port <span class="token operator">=</span> <span class="token number">7002</span> <span class="token punctuation">[</span>yi<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> http local_port <span class="token operator">=</span> <span class="token number">9050</span> subdomain <span class="token operator">=</span> yi <span class="token punctuation">[</span>bt<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> http local_port <span class="token operator">=</span> <span class="token number">8880</span> subdomain <span class="token operator">=</span> bt <span class="token punctuation">[</span>tuh<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> http local_port <span class="token operator">=</span> <span class="token number">10088</span> subdomain <span class="token operator">=</span> tuh <span class="token punctuation">[</span>tu<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> http local_port <span class="token operator">=</span> <span class="token number">10089</span> subdomain <span class="token operator">=</span> tu<span class="token punctuation">[</span>common<span class="token punctuation">]</span> server_addr <span class="token operator">=</span> xx.xx.xx.xx server_port <span class="token operator">=</span> <span class="token number">7000</span> token <span class="token operator">=</span> <span class="token number">123456</span> <span class="token punctuation">[</span>ssh<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> tcp local_port <span class="token operator">=</span> <span class="token number">22</span> local_ip <span class="token operator">=</span> <span class="token number">127.0</span>.0.1 remote_port <span class="token operator">=</span> <span class="token number">8885</span> <span class="token punctuation">[</span>rdp<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> tcp local_ip <span class="token operator">=</span> <span class="token number">127.0</span>.0.1 local_port <span class="token operator">=</span> <span class="token number">3389</span> remote_port <span class="token operator">=</span> <span class="token number">7001</span> <span class="token punctuation">[</span>smb<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> tcp local_ip <span class="token operator">=</span> <span class="token number">127.0</span>.0.1 local_port <span class="token operator">=</span> <span class="token number">445</span> remote_port <span class="token operator">=</span> <span class="token number">7002</span> <span class="token punctuation">[</span>yi<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> http local_port <span class="token operator">=</span> <span class="token number">9050</span> subdomain <span class="token operator">=</span> yi <span class="token punctuation">[</span>bt<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> http local_port <span class="token operator">=</span> <span class="token number">8880</span> subdomain <span class="token operator">=</span> bt <span class="token punctuation">[</span>tuh<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> http local_port <span class="token operator">=</span> <span class="token number">10088</span> subdomain <span class="token operator">=</span> tuh <span class="token punctuation">[</span>tu<span class="token punctuation">]</span> <span class="token builtin class-name">type</span> <span class="token operator">=</span> http local_port <span class="token operator">=</span> <span class="token number">10089</span> subdomain <span class="token operator">=</span> tu[common] server_addr = xx.xx.xx.xx server_port = 7000 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./frpc -c frpc.ini./frpc -c frpc.ini
到这里就完成了FRP的内网穿透的基本设置。
但是会遇到断电的问题或者重启的情况,那么这时候就需要设置FRP开机自启动
7、设置开机自启动
(1)使用pwd
查看路径
(2)将frpc.ini文件复制到/etc/frpc
文件夹里,如果没有这个文件夹,就使用mkdir
新建一个
<span class="token function">sudo</span> <span class="token function">cp</span> frpc.ini /etc/frpc/frpc.ini<span class="token function">sudo</span> <span class="token function">cp</span> frpc.ini /etc/frpc/frpc.inisudo cp frpc.ini /etc/frpc/frpc.ini
(3)将frpc复制到/usr/local/bin/bin/frpc
下,没有的就新建一个
<span class="token function">sudo</span> <span class="token function">cp</span> frpc /usr/local/bin/frpc<span class="token function">sudo</span> <span class="token function">cp</span> frpc /usr/local/bin/frpcsudo cp frpc /usr/local/bin/frpc
(4)写入内容,输入的时候会自动新建文本
<span class="token function">sudo</span> <span class="token function">vi</span> /usr/lib/systemd/system/frpc.service<span class="token function">sudo</span> <span class="token function">vi</span> /usr/lib/systemd/system/frpc.servicesudo vi /usr/lib/systemd/system/frpc.service
内容如下
<span class="token punctuation">[</span>unit<span class="token punctuation">]</span> <span class="token assign-left variable">Description</span><span class="token operator">=</span>frpc <span class="token assign-left variable">After</span><span class="token operator">=</span>multi-user.targe <span class="token punctuation">[</span>Service<span class="token punctuation">]</span> <span class="token assign-left variable">TimeoutStartSec</span><span class="token operator">=</span><span class="token number">30</span> <span class="token assign-left variable">ExecStart</span><span class="token operator">=</span>/usr/local/bin/frpc -c /etc/frpc/frpc.ini <span class="token assign-left variable">ExecStop</span><span class="token operator">=</span>/bin/kill <span class="token variable">$MAINPID</span> <span class="token punctuation">[</span>Install<span class="token punctuation">]</span> <span class="token assign-left variable">WantedBy</span><span class="token operator">=</span>multi-user.target<span class="token punctuation">[</span>unit<span class="token punctuation">]</span> <span class="token assign-left variable">Description</span><span class="token operator">=</span>frpc <span class="token assign-left variable">After</span><span class="token operator">=</span>multi-user.targe <span class="token punctuation">[</span>Service<span class="token punctuation">]</span> <span class="token assign-left variable">TimeoutStartSec</span><span class="token operator">=</span><span class="token number">30</span> <span class="token assign-left variable">ExecStart</span><span class="token operator">=</span>/usr/local/bin/frpc -c /etc/frpc/frpc.ini <span class="token assign-left variable">ExecStop</span><span class="token operator">=</span>/bin/kill <span class="token variable">$MAINPID</span> <span class="token punctuation">[</span>Install<span class="token punctuation">]</span> <span class="token assign-left variable">WantedBy</span><span class="token operator">=</span>multi-user.target[unit] Description=frpc After=multi-user.targe [Service] TimeoutStartSec=30 ExecStart=/usr/local/bin/frpc -c /etc/frpc/frpc.ini ExecStop=/bin/kill $MAINPID [Install] WantedBy=multi-user.target
(5)设置自动启动
<span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> frpc<span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> frpcsudo systemctl enable frpc
(6)启动frpc
<span class="token function">sudo</span> systemctl start frpc<span class="token function">sudo</span> systemctl start frpcsudo systemctl start frpc
(7)查看运行状态
<span class="token function">sudo</span> systemctl list-units <span class="token operator">|</span><span class="token function">grep</span> frpc<span class="token function">sudo</span> systemctl list-units <span class="token operator">|</span><span class="token function">grep</span> frpcsudo systemctl list-units |grep frpc
<span class="token function">sudo</span> systemctl status frpc<span class="token function">sudo</span> systemctl status frpcsudo systemctl status frpc
FRP内网穿透就到此为止啦,请看后续:内网穿透之Nginx配置
原文链接:https://blog.csdn.net/qq_41946289/article/details/126243252