frp内网穿透教程

前期准备

搭建frp需要两台服务器,一台是要有公网ip的云服务器,另外一台内网随便起台虚拟机就可以了,如果想通过域名访问你内网的那些服务的话还需要一个备案了的域名。

搭建服务端

根据机器的操作系统,在Release页面中找到对应的frp程序,然后分别在服务器主机和客户端中下载它。

首先在服务器(以CentOS为例)下载frp

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

解压软件包

tar zxvf frp_0.34.0_linux_amd64.tar.gz

进入软件包

cd frp_0.34.0_linux_amd64

作为服务端,可以删掉客户端配置文件,使用rm指令删除文件

rm -f frpc
rm -f frpc.ini

然后我们开始配置服务器frps.ini文件。使用vi指令对目标文件进行编辑

vi frps.ini

下面是我的配置内容

[common]
bind_port = 7000
vhost_http_port = 80
#dashboard_port = 7500
#dashboard_user = admin
#dashboard_pwd = admin
allow_ports = 22,443,4000-10000,20000-40000
#subdomain_host = yjscloud.com
token = yjscloud@123
use_encryption = true
use_compression = true

==解释一下配置内容==

[common]部分是必须有的配置:

  • bind_port是自己设定的frp服务端端口,
  • vhost_http_port是自己设定的http访问端口(可自定义);dashboard这三行配置是通过浏览器查看 frp 的状态以及代理统计信息展示(dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 dashboard访问较慢的情况,请不要启用此功能),
  • allow_ports是允许远程连接的端口(这些也需要在你的云主机的安全组里面放开),
  • subdomain_host如果你想用域名做内网穿透的话可以打开这个选项(国内域名需要备案),
  • token是客户端必填的验证密钥,
  • use_encryptionuse_compression是数据的加密和压缩选项建议打开.

打开浏览器通过 http://[server_addr]:7500 访问 dashboard界面,用户名密码默认为 admin。

保存(wq)然后启动服务./frps -c ./frps.ini,这是前台启动,后台启动命令为

nohup ./frps -c ./frps.ini > /dev/null 2>&1 &

frp的dashboard的面板长这样

1656405842375.png

至此服务端就搭建好了。

搭建客户端

必须要保证客户端和服务端版本一致,不然可能会出问题,这里还是以CentOS为例,复用服务端的包同样进行解压后进入文件夹,删除无用的服务端程序。

rm -f frps
rm -f frps.ini

然后进行客户端配置

vim frpc.ini

下面是我客户端的配置文件

[common]
token = yjscloud@123
server_addr = 5.133.109.86
server_port = 7000
#admin_addr = 172.16.149.76
#admin_port = 7400
#admin_user = admin
#admin_pwd = TTyy@2015cxy
use_encryption = true
use_compression = true

### 下面是配置示例

### 配置https的访问
[frp_web_ssl]
type = https
subdomain = frp
plugin = https2http
plugin_local_addr = 172.16.149.76:7400
plugin_crt_path = /usr/local/frpc_web/frp_ssl/1_frp.yjscloud.com_bundle.crt
plugin_key_path = /usr/local/frpc_web/frp_ssl/2_frp.yjscloud.com.key
plugin_host_header_rewrite = 172.16.149.76

### 配置http的访问
[k8s_web]
type = http
local_ip = 172.16.149.74
local_port = 32567
subdomain = k8s

### tcp一对一端口映射
[ssh]
type = tcp
local_ip = 172.16.149.71
local_port = 22
remote_port = 36000

==解释一下配置==

  • [x] [common]中的server_addr填frp服务端的ip(也就是云主机的主机的外网IP),server_port填frp服务端的bind_prot

  • [x] admin_addr,admin_port,admin_user, admin_pwd这四个配置是开启客户端的web面板设置,不怎么好用,喜欢的话可以开启

  • [x] [ssh]local_ip为本地ip,local_port表示你内网服务器的端口,remote_port为转发后的映射端口

  • [x] [web]local_ip为本地ip,local_port为web端口(我以本地k8s dashboard为例)。custom_domains为服务器解析后的域名地址,通过域名访问需要将yourdomain.com的域名 A 记录解析到 IP x.x.x.x(你的公网ip),如果服务器已经有对应的域名,也可以将 CNAME 记录解析到服务器原先的域名。然后通过浏览器访问 http://yourdomain.com:32567即可访问到处于内网机器上的 web 服务

如果还需转发内网的其他服务的端口在这个配置文件里面依次添加配置即可

保存(wq)然后启动服务nohup ./frpc -c ./frpc.ini > /dev/null 2>&1 &

启动后客户端成功连接到服务端

1656406554998.png

现在可以尝试一下远程访问内网的服务器(x.x.x.x为你的公网服务器ip)

ssh -oPort=6000 root@x.x.x.x

尝试访问内网的k8s dashbaord页面:

1656406582008.png

设置开机自启

将frp移动到系统软件目录

 mv /root/frp_web/ /usr/local

配置frp

vim /etc/systemd/system/frps_web.service
[Unit]  
Description=frps_web Daemon  
After=syslog.target network.target  
Wants=network.target  

[Service]  
Type=simple  
ExecStart=/usr/local/frp_web/frps_web -c /usr/local/frp_web/frps_web.ini
Restart=always  
RestartSec=1min  
ExecStop=/usr/bin/killall frps_web  

[Install]  
WantedBy=multi-user.target

开机自动启动

systemctl enable frps.service
systemctl start frps.service  

frp自动化安装脚本

如果你懒得手动安装,这里我写了一个自动frp的脚本

bash <(curl -sL https://video.yjscloud.com/frp.sh)

openwrt上面使用的frp配置方法

按照图片配置好frp客户端后保存&应用
1656406988200.png

假设你要对你内网的一台windows做内网穿透,可以参考如下配置

1656407174242.png

如果你的服务端有开启subdomain_host这个配置(你有域名,在运营商做了DNS解析,申请了ssl证书,并且源码已经备案),你就可以配置域名访问你的内网资源了,假设你的二级是yjscloud.com,那么你在frp客户端做内网穿透配置后的访问地址就是一个三级域名比如: jdcar.yjscloud.com,下面是我的配置参考

1656407563684.png

|| 版权声明
作者:废权
链接:https://blog.yjscloud.com/archives/125
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。
THE END
分享
二维码
frp内网穿透教程
前期准备 搭建frp需要两台服务器,一台是要有公网ip的云服务器,另外一台内网随便起台虚拟机就可以了,如果想通过域名访问你内网的那些服务的话还需要一个备案……
<<上一篇
下一篇>>
文章目录
关闭
目 录