最近捡了一台洛阳NAT大盘鸡,配了一台e5-2680v4的服务器,有组网的需求,原来是使用tailscale的方案,何奈tailscale基于UDP,打洞成功后QoS非常严重,只有几百kb的传输速度,也没办法强制使用自建DERP节点,所以改用frp进行穿透并将frp在各端设备注册成服务实现尽量靠近tailscale的无感体验。

1.下载frp到各端机器

frp-GithubRelease

2.服务端配置

设定中转与frpc通讯的端口,以及auth.token来避免滥用和提高安全性

#frps.toml
bindPort = 7000
auth.token = "***"

3.需要暴露的内网机器配置

#frpc.toml
serverAddr = "***" #上面服务端的公网IP地址
serverPort = 7000 #上面服务端的bindPort
auth.token = "***" #与服务端配置一致

[[proxies]]
name = "p2p_ssh" #需要暴露的服务名字,需要在客户端中填写
type = "stcp"
# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务
secretKey = "***"
localIP = "127.0.0.1"
localPort = 22 ##需要暴露的服务端口

4.客户端配置

#frpc.toml
serverAddr = "***" #上面服务端的公网IP地址
serverPort = 7000 #上面服务端的bindPort
auth.token = "***" #与服务端配置一致

[[visitors]]
name = "secret_ssh_visitor" #随意填写
type = "stcp"
# 要访问的 stcp 代理的名字
serverName = "p2p_ssh"
secretKey = "***"
# 将穿透的服务绑定到本地端口
bindAddr = "127.0.0.1"
bindPort = 22

5.测试

完成上述配置后,按顺序在各个设备依次启动frps(c)验证是否能正常访问服务

./frps -c frps.toml
./frpc -c frpc.toml
./frpc.exe -c frpc.toml

正常访问后,接下来将frp注册到服务中

6.注册服务

由于我的frps以及内网机器运行Linux系统,而客户端运行Windows 所以下面介绍两种操作系统注册服务的方法。

6.1 Liunx

vim /etc/systemd/system/frps.service

在其中填入

[Unit]
Description = frp Server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart = /root/frp_0.61.0_linux_amd64/frps -c /root/frp_0.61.0_linux_amd64/frps.toml
[Install]
WantedBy = multi-user.target
systemctl daemon-reload
systemctl enable frps --now

客户端只要把其中的frps->frpc即可
###6.2 Windows
Windows稍微麻烦点,需要用到WinSW这个软件。下载后将它和frp放入一个文件夹里,创建一个frp(c|s).xml
frpc.xml

<service>
    <!-- 该服务的唯一标识 -->
    <id>frpc</id>
    <!-- 该服务的名称 -->
    <name>frpc</name>
    <!-- 该服务的描述 -->
    <description>frpc客户端</description>
    <!-- 要运行的程序路径 -->
    <executable>D:\frp_srv\frpc.exe</executable>
    <!-- 携带的参数 -->
    <arguments>-c frpc.toml</arguments>
    <!-- 第一次启动失败 60秒重启 -->
    <onfailure action="restart" delay="5 sec"/>
    <!-- 第二次启动失败 120秒后重启 -->
    <onfailure action="restart" delay="10 sec"/>
    <!-- 日志模式 -->
    <logmode>append</logmode>
    <!-- 指定日志文件目录(相对于executable配置的路径) -->
    <logpath>logs</logpath>
</service>

然后,在frp的目录下打开终端 输入.\WinSW-x64.exe install frpc.xml进行安装
service.msc找到这个服务并启动 大功告成。