安装 Frp
项目主页中文说明:
https://github.com/fatedier/frp/blob/master/README_zh.md
安装FRP Server
作者已经提供了编译好的二进制包,下载解压 – 然后修改配置文件即可。
https://github.com/fatedier/frp/releases
#下载server端
wget https://github.com/fatedier/frp/releases/download/v0.25.0/frp_0.25.0_linux_amd64.tar.gz
#解压
tar -zxvf frp_0.25.0_linux_amd64.tar.gz
#进入目录
cd frp_0.25.0_linux_amd64
继续编辑frps.ini
这个文件,写入以下内容:
[common]
bind_port = 7000
[mstsc]
listen_port = 3389
auth_token = 123456
- bind_port: 主服务需要监听的端口,这里使用7000
- listen_port : 需要转发的端口,这里使用3389
- auth_token: 相当于验证密码,这里使用123456,也可以不填写
配置文件完成后输入命令./frps -c ./frps.ini
启动服务端,当然也别忘记在防火墙放行端口哦。如果需要服务在后台运行,可以将命令替换为:nohup ./frps -c ./frps.ini &
设置开机启动
添加systemd配置文件:
vim /usr/lib/systemd/system/frps.service
文件内容如下:
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
KillSignal=SIGQUIT # 启动服务的命令(此处写你的frps的实际安装目录)
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit
[Install]
WantedBy=multi-user.target
ExecStart的内容请根据自己frp安装目录修改。
设置开机启动
systemctl enable frps
启动 frp
systemctl start frps
查看frp是否启动
ps aux | grep frps
关闭开机自启动
systemctl disable frps
其它操作
systemctl restart frps # 重启
systemctl stop frps # 停止
systemctl status frps # 查看日志
安装Windows 客户端
上面已提到FRP分服务端和客户端,上面的步骤已经完成服务端安装,接下来我们在Windows上安装客户端。
解压之后我们需要下面2个文件
frpc.exe
frpc.ini
修改配置文件frpc.ini
内容如下:
[common]
server_addr = 1.1.1.1
server_port = 7000
[mstsc]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3389
auth_token = 123456
- server_addr: 为服务器公网IP
- server_port: FRP主服务监听的端口
- local_ip: 本地电脑IP
- local_port: 本地电脑监听的端口(Windows远程桌面服务默认监听3389)
- remote_port: Server端需要转发的端口
- auth_token: 验证密码,上个步骤我们设置的123456
在cmd
窗口下进入FRP客户端目录,然后执行命令frpc.exe -c frpc.ini
,如果不报错,那么客户端也正常运行了。假如您服务器IP是1.1.1.1
,当您连接1.1.1.1:3389
时,就可以映射到内网的127.0.0.1:3389
,从而实现内网穿透。
设置 Win 10 自动启动 frp
winsw介绍
有时候我们需要在Windows下开机运行某些程序,这对于有图形界面的程序来说一般不是什么事,在选项中选中开机启动,然后它们就可以自动运行了。但是如果我们想运行一些命令行程序的话就没这么方便了。
原来我的做法是写一个bat脚本,然后将它的快捷方式复制到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
,这样就可以开机自启了。不过这种方式有一个非常大的缺点,就是开机之后会显示一个命令行窗口!而且这个窗口还不能关,一关程序就停了。
其实Windows自带了一个后台程序管理的功能,就是我们经常用到的服务。但是Windows的服务只有程序的开发者在写程序的时候引用到这个功能,我们才能利用服务来控制程序的启动和关闭。对于一般的命令行程序来说,没办法利用服务。所以今天我们就来使用一下标题的这个winsw。它可以将Windows上的任何一个程序注册为服务,如果不需要,也可以方便的卸载服务。
https://github.com/kohsuke/winsw/releases
下载winsw最新版,为了方便将其重命名为winsw.exe
, 将该文件和frpc.exe
放在同一文件夹里,然后新建winsw.xml
并写入以下内容:
<service>
<id>frp</id>
<name>frp这里是服务的名称</name>
<description>这里是服务的介绍,随便写</description>
<executable>frpc</executable>
<arguments>-c frpc.ini</arguments>
<onfailure action="restart" delay="60 sec"/>
<onfailure action="restart" delay="120 sec"/>
<logmode>reset</logmode>
</service>
然后我打开一个管理员权限的命令提示符或 Powershell 窗口,输入下面的命令,如果返回值为0或2019-05-29 21:24:33,060 INFO - Installing the service with id 'frp'
,说明已将程序注册为服务。
winsw install
然后打开Windows的服务,我们可以看到这下已经出现了注册的服务,我们可以像一般服务那样开启、关闭它。
win+r后通过services.msc进入到服务列表页面找到frp服务。
为了确保frpc在连接失败后自动尝试重新连接,在恢复tap页进行如下设置:
参考文献
https://www.jianshu.com/p/fc9e4ea61e13
https://www.imcockpit.com/archives/FRP.html
https://ffis.me/experience/1266.html