内网穿透工具 frp 的相关教程、示例、遇到的坑

准备去吃饭前看到,好像挺简单不怎么耗时间。在学生价开的阿里云轻量应用服务器上按部就班搞一套,最后访问网址的时候提示说未备案 :mask: 直接访问域名的话是 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
1 Like

关于守护进程。

在 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,几乎感觉不到的,这两个就是我经常遇到的问题,分享给大家,希望能帮助大家排查一下问题。

1 Like

试了一下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 。

1 Like

发完贴后急速破案 :joy:

发现是因为一开始服务器端的配置将可用的端口限制为 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和nginx内网服务器转发和建站

我这边FRP想要添加个状态查询去,要怎么操作呢?

不知道你说的是什么…

在 frps 端,有一个 web 页面呀。

就是添加这个web页面,已经找到方法添加了,谢谢

请问我按照教程设置完成后 用微软的远程桌面访问 这边本地的服务器永远是拒绝呢,防火墙我都是关闭的

你怎么访问的呀

winsw,EasyService,都是需要.net运行时的,所以我还是只能用nssm,唉

现在 .net 不是系统自带么

求教程。

嗯,winsw 没有 GUI 配置程序,需要手动编写配置文件,这对普通人的确是麻烦的事情。

不过服务托管本来就不是一般人干的事情,编写配置文件不应该算作麻烦了,而且难度也跟 linux 下配置 frp 差不多吧。

winsw 开源免费,技术和功能都不错,也在持续更新,的确是一款很优质的软件,其实上次我发 aria2 超・懒人包的时候就说了青蛙可以单独介绍下这个软件。

winsw 应该是比较适合 windows server 这种生产环境,托管自己写的程序以及 nginx 之类的程序,像 nssm 托管 nginx 会有问题,终止服务的时候,只能 kill 掉 master 进程,无法 kill 其 fork 出的 worker 进程。至于 nssm 托管 frp会不会有问题,可能没有,我没用过就不知道了。

@Qingwa ,上面这位给了配置文件,教程什么的再看吧,鄙人英文差。

可以直接用 IP 访问,原文说的麻烦也在于此…

搞好了 frp,这样我就能在外网访问自己的 NextCloud 了。终于实现了我之前发帖子说的在外网看自己局域网中的视频 :joy:

但是 NextCloud app 看视频的体验不是很好,对我内网的小主机资源消耗也相对比较高。想试试用 frp 搞定外网访问 samba。在 frpc.ini 里添加了如下内容:

[smb]
type = tcp
local_ip = 127.0.0.1
local_port = 445
remote_port = 44546

这样就可以在外网连接到内网的 samba 了。外网中访问 samba,Host 要填服务器的公网 ip, portfrpc.ini 里的 remote_port

用 samba 浏览内网文件比 NextCloud 快一点,内网机器的资源消耗要小。用 Samba 的话,从外网看内网视频的播放器的选择丰富得多,资源消耗同样少不少。