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_encryption
和use_compression
是数据的加密和压缩选项建议打开.
打开浏览器通过 http://[server_addr]:7500
访问 dashboard界面,用户名密码默认为 admin。
保存(wq)然后启动服务./frps -c ./frps.ini
,这是前台启动,后台启动命令为
nohup ./frps -c ./frps.ini > /dev/null 2>&1 &
frp的dashboard的面板长这样
至此服务端就搭建好了。
搭建客户端
必须要保证客户端和服务端版本一致,不然可能会出问题,这里还是以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 &
启动后客户端成功连接到服务端
现在可以尝试一下远程访问内网的服务器(x.x.x.x为你的公网服务器ip)
ssh -oPort=6000 root@x.x.x.x
尝试访问内网的k8s dashbaord页面:
设置开机自启
将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客户端后保存&应用
假设你要对你内网的一台windows做内网穿透,可以参考如下配置
如果你的服务端有开启subdomain_host
这个配置(你有域名,在运营商做了DNS解析,申请了ssl证书,并且源码已经备案),你就可以配置域名访问你的内网资源了,假设你的二级是yjscloud.com
,那么你在frp客户端做内网穿透配置后的访问地址就是一个三级域名比如: jdcar.yjscloud.com
,下面是我的配置参考
作者:废权
链接:https://blog.yjscloud.com/archives/125
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《废权的博客》所有,欢迎转载,转载请保留原文链接。


共有 0 条评论