1. 前提条件:

有一个公网ip,这里用x.x.x.x代替

2. 配置

【服务器端】
S_NUMBER是一个端口号

#服务端口
bind_port = S_NUMBER
#监听地址
bind_addr = 0.0.0.0
#认证token
token = xxxx

【客户端】(也就是需要被内网穿透的服务器)
C_NUMBER是一个端口号

[common]
#自己的公网地址
server_addr = x.x.x.x
#用于服务器和客户端之间通信的端口
server_port = S_NUMBER
#认证令牌,需要和服务器端保持一致
token = xxxx

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
#意味着将服务器上的C_NUMBER端口映射到私人电脑上的22端口
#访问的时候在外部电脑上:ssh username@x.x.x.x -p 6000
#username是私人服务器上的用户名
#x.x.x.x是公网ip
remote_port = C_NUMBER

3. 启动

先在公网服务器上启动frps
再在私网服务器上启动frpc
之后就可以在其他电脑上按照ssh username@x.x.x.x -p 6000访问私人服务器。

4. 坑

  1. 上述设置中,7000端口用于frpc和frps工作通信。C_NUMBER端口是将公网的C_NUMBER端口用于映射到私网22端口。但是C_NUMBER端口和S_NUMBER端口在公网和私网中都要允许通过防火墙。
  2. 我用的公网服务器是阿里云云服务器。一开始总是连接不成功。在web控制端,新增安全组中对应的端口之后,就可以使用。
    新增入端口1:优先级100,协议选择自定义TCP,用处写S_NUMBER(就是端口号)。
    新增入端口2:前面都一样,用处写C_NUMBER(端口号)。
    新增完以上安全组,应该就可以了。如果不可以,再新增一个用处为ssh的入端口。
    找到安全组
  3. frpc配置使用详解_客户端

  4. 在安全组中添加新的入端口
  5. frpc配置使用详解_运维_02

  6. 私网的客户端进程一旦运行,就不能关闭。所以建议添加系统启动时执行。并且将此进程设置为后台执行。
  7. 一般情况下设置守护进程比较麻烦,可以直接使用如下命令在后台运行。在执行完如下命令之后,关闭当前会话也不会有影响。
#服务端
nohup ./frps -c frps.ini &
#客户端
nohup ./frpc -c frpc.ini &

5. 2022.1.14新增定时任务,解决意外进程断线

用了一段时间发现了客户端或者服务端可能会存在某种原因关机。此时一旦断开连接,就不能再内网穿透。
考虑在客户端和服务端使用两个定时任务解决。
具体操作是每隔一定时间检查特定名称的进程是否还在运行,如果不在运行,则启动进程。

整个定时重启包括电脑开机进程重启定时检查进程状态重启,可以解决所有情况下的进程断开。

6. 2022.1.17

使用一段时间发现使用nohup命令运行进程产生的日志文件nohup.out变得很大,占用了大量的存储空间。
可以设定一个定时任务,每隔一天清空nohup.out文件的内容。
注意不能直接删除nohup.out文件,因为执行rm nohup.out之后,虽然文件在文件夹中不见了,但是文件是被进程打开着的,因此文件并没有真正被删除,只有对应进程停止之后,文件才被删除。解决办法就是不要删除nohup.out文件,而是一段时间就使用

echo "" > nohup.out

将其清空,这样就不用担心nohup.out文件占用了大量的存储空间了。

7. 2022.1.18

防止黑客利用公网进行字典攻击,影响登陆体验。建议修改端口号为一个不常见的端口号。

8.2022.5.12

在二月份的时候frp突然不能用了。然后一直没有找到解决办法。
今天找到了解决办法:
在客户端配置文件中加入选项:

tls_enable = true

将客户端的remote_ip选项改成6000端口(好像我这只有这一个能用了,其他的端口即使将云服务器的安全组中对应端口入规则打开,还是不行)
完成以上配置之后,就又可以正常使用了。

九 2022.6.30

增加web内网穿透

配置文件

服务端:

frpc配置使用详解_客户端_03


客户端:(非必要参数已经隐去)

frpc配置使用详解_linux_04


对客户端的web解释:

local_port是内网服务器的web服务端口

remote_port是公网服务器的web服务端口

其实可以看到,web服务也可以用tcp来实现(跟ssh差不多)

访问时在浏览器中使用以下格式:
公网ip:remote_port

此处遇一坑:
阿里云服务器的服务器本身有防火墙
阿里云服务器网页管理部分有安全组
frp使用的端口必须在防火墙和安全组中都打开才能用