轻松搭建 FRP 内网穿透并设置开机自启动方法

轻松搭建 FRP 内网穿透并设置开机自启动方法

William
2021-06-23 / 0 评论 / 101 阅读 / 正在检测是否收录...

1.它是什么?干嘛用的?

先假设这样一个场景,在仅有的IPV4的环境下,你身处外面使用手机数据流量,想访问家里的路由器界面(如192.168.1.1),但奈何路由设备仅仅存与家庭局域网中,无法访问,怎么让路由器管理界面在世界各地都可以访问呢?Frp内网穿透工具就是为了解决这样一个问题的,可以在有网络的任何地方访问到你家庭的设备。家里头无法在外面访问的网络,我们以下称为内网
公网:与内网相反,为什么我们都可以在任何地方访问百度?因为百度的服务器放在了一个大家都可以访问到底网络,公共使用的网络--公网

2. Frp工具是如何做到的?

简单的说转发,它需要一台在公网设备的帮助转发;借助下面的图就懂了
Frp服务器部署在公网中,它是一个中间商,你想发数据给路由,先发给Frp服务器,Frp再转发给路由,路由发你的数据也是如此

frp工作原理

IP:网络地址,字面意思,网络的地址,有地址才找到一个地方
域名: 方便访问,为什么我们输入"baidu.com"就能访问百度呢?为什么大家不直接通过百度IP访问呢?不是所有人都能记住那一串数字的{IP地址:xxx.xxx.xxx.xxx}

3.部署所需

  1. 一台具有公网IP的设备(服务器)
  2. 一个属于你的域名

4.进行部署

1、根据你的服务器或设备类型选择对应 frp 压缩包
FRP Github Release
CDN加速下载

windows 64位:XXX_windows_amd64.zip
windows 32位:XXX_windows_386.zip
linux 64位:XXX_linux_amd64.tar.gz
linux 32位:XXX_linux_386.tar.gz

frp-github

2、然后使用ftp或sftp或者scp等方式,将frp压缩包上传到你的服务器中(也可以直接在服务器使用wget进行下载)

3、对frp压缩包进行解压,里面会有几个文件

其中包括有frpc(客户端),frpc.ini(客户端配置),frps(服务器),frps.ini(服务器配置)

假设上传到了服务器的root路径下,对frp文件夹进行权限设置

chmod 777 -R /root/frp

4、配置frp服务器参数
使用vim编辑: vim frps.ini

[common]
bind_addr = 0.0.0.0
bind_port = 服务器监听端口(10000)
bind_udp_port = UDP端口(10001)
kcp_bind_port = KCP端口(10002)
vhost_http_port = 80
vhost_https_port = 443
subdomain_host = 你的域名(如:yourname.xxx)
dashboard_addr = 0.0.0.0
dashboard_port = 后台管理端口(11000)
dashboard_user = 管理用户名(root)
dashboard_pwd = 管理密码(你自己填一个)
token = 链接密钥(你自己想一个,别照抄啊!如:ABCDEFG)
max_pool_count = 100
log_file = ./frps.log
log_level = info
log_max_days = 3
tcp_mux = true

如果你的服务器已经部署了网站那些,也就是80跟443端口已经被占用,那么 vhost_http_portvhost_https_port 这两个端口也需要改变。总之,frps.ini 中的任何端口不能跟 其他frp 或 其他程序 冲突,否则服务启动失败

5.启动frp

所有配置完成后,正常使用frp的话,肯定是要让frp在后台运行的,以下有几种后台启动方式

nohub命令:

# 在root根目录下执行
nohup /root/frp/frps -c /root/frp/frps.ini

screen命令:

# 在frp目录下执行
screen -S frp
./frps -c ./frps.ini

rc.local

修改/etc/rc.local文件,加入启动命令

/root/frp/frps -c /root/frp/frps.ini &

systemctl

创建并编辑 frps.service 文件,执行代码:

vim /lib/systemd/system/frps.service

然后在该文件输入以下代码,并保存退出:

[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/存放frp的目录/frps -c /存放frp的目录/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

操控命令
启动服务 systemctl start frps

开机自启动 systemctl enable frps

重启服务 systemctl restart frps

停止服务 systemctl stop frps

查看日志与状态 systemctl status frps

客户端自启动与服务端相同,只需要创建 frpc.service 并把 ExecStart 路径改为存放frpc的路径,操控命令将 frps 改为 frpc

不同的系统自启动会不太一样,ubuntu,debian,centOS,windows等等,可自行百度

Openwrt

进入 /etc/init.d 文件夹中,创建一个名为 frp 的文件,写入以下代码:

#!/bin/sh /etc/rc.common

START=90
STOP=90
SERVICE=frpc
USE_PROCD=1
PROC="/存放frp的目录/frps -c /存放frp的目录/frps.ini"

start_service(){
    procd_open_instance
    procd_set_param command $PROC
    procd_set_param respawn
    procd_close_instance
}

service_triggers(){
    procd_add_reload_trigger "rpcd"
}

6.解析一个域名到服务器

比如解析了个 frp.example.com 到你的服务器

7.在浏览器中访问frp管理后台

在自己电脑打开浏览器,输入frp后台管理地址,比如本例子中:

域名是:frp.example.com

面板端口:11000

那浏览器地址栏就写 frp.example.com:11000 域名后面的端口就是frps.ini中的dashboard_port。用户名就是dashboard_user,密码是dashboard_pwd

如果frps.ini中没有配置 subdomain_host 那么就使用 服务器IP:FRP面板端口 形式访问,客户端配置时也使用服务器IP

frp后台

如果访问frp管理后台无法打开,那就是你的服务没启动或者端口没有开放。重新检查frps.ini文件,并确定该文件中的bind_portdashboard_port在你的防火墙(服务器安全组)中放行了

8.客户端连接服务器

这个客户端是你要被控制的设备,下载frp程序,下载回来后,frps相关的可以删掉了,只有frpc才是客户端使用的

编辑 frpc.ini

[common]
server_addr = frp.example.com(刚刚设置的域名解析)
server_port = 服务器监听端口(10000) / bind_port
token = frp服务器中你设置的token
user = 客户端名称(可以随便填一个英文字符串,给这个客户端命名)

[web]   //代理内网的网站
type = http //类型http
local_ip = 127.0.0.1    //内网设备IP
local_port = 80         //端口
subdomain = http         //子域名:如此时填入的是http,则浏览器输入(http.yourname.xxx)就会访问到此设备

[ssh]
type = tcp              //内网TCP代理
local_ip = 127.0.0.1    //内网设备IP
local_port = 22         //要代理的端口
remote_port = 11022      //代理所生成的端口,远程ssh链接需要指定为这个端口

9.被控设备为Windows电脑

如果要被控制的设备是Windows,比如公司的电脑,下载frp相对应的压缩包,解压后将文件夹名字改为frp,删掉frps相关文件,只留frpc文件,用记事本打开frpc.ini进行配置

[common]
server_addr = 你的服务器域名或者IP
server_port = 服务器监听端口(10000) / bind_port
token = frp服务器中你设置的token
user = 给本次客户端取一个名(全英文名)
tls_enable=true

[windows]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 33890(映射端口,可随便设置,但不能和其他frp客户端冲突,并且服务器防火墙要放行这个端口)

frp文件夹内,按住shift键盘并右键鼠标,点击右键菜单栏中的powershell,输入命令:

./frpc.exe -c frpc.ini

如果你看到start proxy success的字样,则表示成功了,如果没有,则表示frpc.ini配置有问题

ctrl+C停止程序运行,现在程序可以正常运行,但我们需要将其设置开机自启动

需要一个叫winsw的工具,Github下载 CDN加速下载

winsw

下载后放到frp的文件夹中,并改名为winsw.exe,并且新建一个文件winsw.xml

winsw.xml

用记事本打卡winsw.xml,填入下面内容,需要修改的是要运行的frp程序绝对路径,根据你的实际路径填写

<service>
    <!-- 该服务的唯一标识 -->
    <id>frp</id>
    <!-- 该服务的名称 -->
    <name>frp_0.37.0_windows_amd64</name>
    <!-- 该服务的描述 -->
    <description>frpc客户端 - 实现内网穿透</description>
    <!-- 要运行的程序绝对路径,根据你的实际路径填写 -->
    <executable>C:\frp\frpc.exe</executable>
    <!-- 携带的参数 -->
    <arguments>-c frpc.ini</arguments>
    <!-- 第一次启动失败 60秒重启 -->
    <onfailure action="restart" delay="60 sec"/>
    <!-- 第二次启动失败 120秒后重启 -->
    <onfailure action="restart" delay="120 sec"/>
    <!-- 日志模式 -->
    <logmode>append</logmode>
    <!-- 指定日志文件目录(相对于executable配置的路径) -->
    <logpath>logs</logpath>
</service>

在frp文件夹中,按住shift并点击鼠标右键,可以在右键菜单栏中看到powershell,输入.\winsw.exe install,如下图

如果提示下面,则成功!

winsw启动成功

成功!重启电脑(被控制设备)后用手机端试试能不能远程桌面吧

下载Remote Desktop安装,PC name(电脑名)那里输入FRP服务器域名/IP:端口(上面的remote_port = 33890)
比如:frp.example.com:33890

0

评论 (0)

取消