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