这里将连载一些内网穿透工具 frp 的一些教程、示例。
分享教程与示例的同学,将获赠实体书《Linux 就该这么学》一本,共 10 本,先到先得,详见这里。
为了安全起见,请在 frps.ini 与 frpc.ini 配置文件的 common 部分添加授权:
[common]
server_addr = IP
server_port = 7000
auto_token = appinn
请保证两端的 auto_token 值相同,这相当于两端对暗号,不一致将无法链接,有助于保护你的 frp 服务。
运行 frp 后会有一个命令提示符的窗口,如果长期在桌面的话,会很烦人。
这里有一个 nssm 工具,可以帮助你把 .exe 程序变成 Windows 系统服务,这样就看不到那个窗口,并且也会在开机后自动运行了,非常的方便。
下载地址,nssm 官网挂了,这里是 GitHub 的下载地址。
然后用管理员方式打开命令提示符:
nssm.exe install frp
然后就会弹出窗口,如上图输入后,点击 Install Service 按钮,就会在服务中创建一个 frp 的系统服务了:
然后,就开机无忧啦。
准备去吃饭前看到,好像挺简单不怎么耗时间。在学生价开的阿里云轻量应用服务器上按部就班搞一套,最后访问网址的时候提示说未备案 直接访问域名的话是 frp 的 “ The page you visit not found.”
还是先去吃饭,之后再在我 vultr 上试试吧。
使用linux服务器时,可以使用supervisor守护进程,在/etc/supervisor/conf.d里面随便建一个xxx.conf的文件,在里面加入
command=/www/wwwroot/frp_0.27.1/frps -c /www/wwwroot/frp_0.27.1/frps.ini
directory=/www/wwwroot/frp_0.27.1/
autostart=true
就不用担心关了终端frp就挂了,如果不小心挂了他也会自动启动
如果要使用HTTPS,要在frps.init里面配置vhost_https_port ,当然这个端口号可以随便写
vhost_https_port = 443
然后在客户端配置frpc.ini
[https]
type = https
local_port = 8080
最后,本地8080端口提供的还必须是https服务,打个比方,如果用webpack,那在webpack.dev.conf.js中devServer必须配
https:true
关于守护进程。
在 Windows 上面用 winsw 比较好,这在我之前的 Aria2 - 超・懒人包(2018.11.19 更新) 里用过。nssm 年老失修,且在终止服务进程的时候会有些问题。
而在 Linux 上面,用系统自带的 systemd 比较好,supervisor 你还需要额外去安装启动。frp 我目前没有使用的需求,不然我可以提供个 unit file 文件范例,但网上是能搜到的。
活跃气氛大法好,正好可以试试在我的onevps上试试.
在公司访问家里电脑.
我经常也用 FRP,最常见的问题就是阿里云服务器上为了安全起见,开启了防火墙,此时内网防火墙对外网访问进行了流量识别与屏蔽,比如禁止了 SSH 协议等,你怎么也连接不上 SSH 端口,此时可设置参数 use_encryption = true,是将FRP 客户端 与 FRP 服务端之间的通信内容加密传输,这样就符合了 SSH 协议的数据加密传输要求,就可以有效防止流量被拦截这种问题,也可以设置 use_compression = true 参数,这个是启用报文压缩的功能,稍微会消耗一点CPU,几乎感觉不到的,这两个就是我经常遇到的问题,分享给大家,希望能帮助大家排查一下问题。
试了一下winsw,使用比nssm麻烦点,第一个是要给下下来的winsw程序改名字,比如我改成winsw_frp.exe,第二个是建立xml配置文件,必须跟刚刚改的名字同名,即winsw_frp.xml,内容
<configuration>
<id>frp</id>
<name>Frp Service</name>
<description>Frp服务,开机自动启动</description>
<executable>D:\Program Files\frp_0.26.0\frpc.exe</executable>
<startmode>Automatic</startmode>
<arguments>-c "D:\Program Files\frp_0.26.0\frpc.ini"</arguments>
</configuration>
再搬运个 ArchLinx 的 AUR 库里面的守护进程配置文件吧,
/etc/systemd/system/frps.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target
如果你客户端是装在 windows 上的,这个配置文件可以忽略掉
/etc/systemd/system/frpc.service
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
[Install]
WantedBy=multi-user.target
上面两个配置文件中的 frp 路径也许需要更改,这取决于你把 frp 放在什么路径下。其它配置项可能在不同发行版需要斟酌下。
设置服务端为开机启动 :
sudo systemctl enable frps
启动服务端:
sudo systemctl start frps
查看服务端运行状态:
sudo systemctl status frps
同样,如果客户端安装在 linux 上,同样的三个操作,只需要把上面三个命令中的 frps 替换为 frpc 。
发完贴后急速破案
发现是因为一开始服务器端的配置将可用的端口限制为 2000-50000
今天我添加一项 tcp 转发后,在服务器端的 dashboard 里一直看不到,尝试直接访问也是无效的。
之后我随意添加了一个名为 “test” 的 tcp 转发,在 dashboard 里能看到。但当我在客户端的配置里把 “test” 删掉之后,dashboard 里还显示着一个空的 “test”——离线的没有端口号的。
我之前添加的那个应该是:
[node-js]
type = tcp
local_ip = 127.0.0.1
local_port = 1880
remote_port = 1880
use_Encryption = yes
use_Compression = yes
我这边FRP想要添加个状态查询去,要怎么操作呢?
不知道你说的是什么…
在 frps 端,有一个 web 页面呀。
你怎么访问的呀
winsw,EasyService,都是需要.net运行时的,所以我还是只能用nssm,唉
现在 .net 不是系统自带么
求教程。