很多东西,在如今,都由各大寡头公司垄断。
但是,依旧有很多人选择 “自己种田,自己自足” 。因以摆脱寡头和付费套餐的监控与枷锁。
我有一台公网的服务器,一台内网的主机。如何使用Frp快速地穿透到外网去呢?
正文
你需要一台拥有公网地址的主机,无论是Windows,Linux还是Mac,甚至是安卓都好,只要官方有支持就行。(Frps服务端和Frpc客户端都在一个压缩包里)
下载地址 Github
官方项目地址:https://github.com/fatedier/frp
官方文档地址:https://gofrp.org/zh-cn/
frp的功能很多很丰富,但本文只专注于内网穿透,ssh公网连接到内网,和网页穿透这一点。
Frps 服务端
下载与配置
由于我是 Linux – x86(amd64) 的服务器,所以我就在服务器去下载对应的 frp_0.64.0_linux_amd64.tar.gz。(要分清楚你的架构是什么,目前x86平台,基本都是amd64的服务器-64位)。
# 注意版本号
wget https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_amd64.tar.gz # 下载
tar -zxvf frp_0.64.0_linux_amd64.tar.gz # 解压
mv frp_0.64.0_linux_amd64 frp # 目录不好记名字,改个名字
cd frp # 进入目录
rm -rf LICENSE frpc frpc.toml # 删除客户端相关文件
完成后,ls
看看,估计就剩下 frps
,frps.toml
两个文件了。
我们编辑 frps.toml
文件:vim frps.toml
#bindPort = 7000
bindPort = 7020 # frp沟通端口,建议修改。有防火墙的话,记得放行。
# 服务面板可查看frp服务状态信息
webServer.addr = "0.0.0.0" # 后台管理地址,默认是127.0.0.1,如果是公网访问则改成0.0.0.0,否则可能绑定不上公网IP
webServer.port = 7050 # 后台管理端口(浏览器上,IP+此端口 访问Web管理页)
webServer.user = "admin" # (可选)Web后台登录用户名
webServer.password = "JbkIp7mzrjJK" # (可选)Web后台登录密码
#transport.tls.force = true # 服务端将只接受 TLS链接
auth.method = 'token' # 客户端访问验证方式
auth.token = "cxrCISjm" # 客户端访问验证密码(自己取),frpc要与frps一致,不然不让连接
# 自定义的监听的端口,所有对服务器该端口访问将被转发到本地内网,做了反向代理可不处理防火墙放行
#vhostHTTPPort = 8000
#vhostHTTPSPort = 45443
启动 frps
建议第一次启动,先前台启动,可以看到连接日志。通过下面命令可以启动:
./frps -c ./frps.toml
# ./frps -c ./frps.toml & # 后台启动,ssh关闭后依旧可用。但不建议,不好管理。
守护进程在文尾
Frpc 客户端 (服务器放行相关端口了吗?)
我的内网客户端是一台 Arm-x64 架构的 Linux系统 开发版,运行了一个网页。我希望穿透网页和ssh。(要分清楚你的架构是什么,同时,arm也分32/64位)。
下载与配置
下载太慢的话,可以用代理的电脑下载完,之后把文件scp上去没有代理的主机。
wget https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_arm64.tar.gz # 下载
tar -zxvf frp_0.64.0_linux_arm64.tar.gz # 解压
mv frp_0.64.0_linux_arm64 frp # 目录不好记名字,改个名字
cd frp # 进入目录
rm -rf LICENSE frps frps.toml # 删除服务端相关文件
完成后,ls
看看,估计就剩下 frpc
,frpc.toml
两个文件了。
我们编辑 frpc.toml
文件:vim frpc.toml
serverAddr = "xxx.xxx.xxx.xxx" # 这里填服务器Frps的IP
serverPort = 7020 # 这里填服务器的Frp沟通端口
auth.method = 'token' # 服务端设置的验证方法
auth.token = 'cxrCISjm' # 服务端设置的密码
[[proxies]] # 标准写法,下面是一个块
name = "ssh" # 在服务器看到的连接信息
type = "tcp" # 数据类型
localIP = "127.0.0.1" # 本主机IP,也就是127.0.0.1(穿透自己)
localPort = 22 # SSH 端口
remotePort = 6000 # 让服务器给 6000 这个端口“我”用
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
# Nginx 默认的网页端口,如果你有多个网页,可以用不同端口。
# 或者干脆docker(docker暴露的端口每个都不一样)
remotePort = 6001
启动 frpc
建议第一次启动,先前台启动,可以看到连接日志。通过下面命令可以启动:
./frpc -c ./frpc.toml
# ./frpc -c ./frpc.toml & # 后台启动,ssh关闭后依旧可用。但不建议,不好管理。
我没有启动内网Web页面的穿透,只穿透了ssh
Frps 服务端日志
Frps 服务端 Web
Frpc 客户端日志
守护进程
但是上面的方法并不稳定,所以我们需要分别给服务端和客户端书写一个守护进程。
Frps 服务器
vim /etc/systemd/system/frps.service
[Unit]
Description = frp server # 服务名称,可自定义
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动命令,改为你实际存放frps的路径,但是一般默认这个目录
ExecStart = /root/frp/frps -c /root/frp/frps.toml
[Install]
WantedBy = multi-user.target
保存后,我们重载配置文件: systemctl reload
之后设置开机启动: systemctl enable --now frps
看看状态: systemctl status frps
可以看到,服务正常启动
之后客户端也成功再次连接上了
Frpc 客户端 (服务器放行相关端口了吗?)
我们需要为客户端也写一个守护进程,和上面差不多,做一些小改变即可。
vim /etc/systemd/system/frpc.service
[Unit]
Description = frp client
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 这里需要修改 frps为c
ExecStart = /root/frp/frpc -c /root/frp/frpc.toml
[Install]
WantedBy = multi-user.target
保存后,我们重载配置文件: systemctl reload
之后设置开机启动: systemctl enable –now frpc
看看状态: systemctl status frpc
成功:
测试 (服务器放行相关端口了吗?)
ssh
之后我们连接这个ssh试试,也就是上面设置的 6000 端口
服务器IP + 6000 ,就可以连接上内网这台服务器的ssh了
成功:
Web
刚刚我们假设了一个网页,配置如下
...
[[proxies]]
name = "web"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
# Nginx 默认的网页端口,如果你有多个网页,可以用不同端口。
# 或者干脆docker(docker暴露的端口每个都不一样)
remotePort = 6001
使用了服务器的6001端口,如果你想访问这个网页,就只有在浏览器访问 服务器IP+6001 了。所以我们其实可以做一个反向代理,在服务器上面。
apt install nginx # 你的服务器有nginx吗?
vim /etc/nginx/conf.d/web.conf
配置如下:
server {
listen 80;
# 你的域名,或者你服务器的 IP 地址
server_name xxx.com;
# 反向代理块
location / {
# 将请求转发到你后端应用的地址和端口,也就是本地IP+6001
proxy_pass http://localhost:6001;
# 保持客户端的真实IP地址,这样后端日志会更准确
proxy_set_header X-Real-IP remote_addr;
proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
}
}
之后检查配置文件没问题就重载nginx即可
nginx -t
nginx -s reload
之后就可以通过域名访问此“内网网页”了。至于证书申请,就不赘述了,看我之前的文章。
参考
官方文档 – https://gofrp.org/zh-cn/
isedu-Blog – https://isedu.top/index.php/archives/278/
iyatt-Blog – https://blog.iyatt.com/?p=17340
发表回复