之前一直用nps做转发处理,这次联通停用,用移动,测试nps的p2p模式穿透不行了。根据chatgpt推荐使用frp。又研究了下frp。后来发现frp的p2p模式是可以的。这样就可以减少韩国服务器流量,而且发现用p2p穿透,延迟和丢包问题也解决了。不知道是图书馆的网络改善了,还是p2p模式解决防火墙的问题,后续继续观察。
frp参考文档:https://gofrp.org/zh-cn/docs/
frp安装:
https://gofrp.org/zh-cn/docs/setup/systemd/
使用 systemd
在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。
以下是具体的操作步骤:
- 安装 systemd如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如
yum(适用于 CentOS/RHEL)或apt(适用于 Debian/Ubuntu)来安装它:# 使用 yum 安装 systemd(CentOS/RHEL)yum install systemd# 使用 apt 安装 systemd(Debian/Ubuntu)apt install systemd - 创建 frps.service 文件使用文本编辑器 (如 vim) 在
/etc/systemd/system目录下创建一个frps.service文件,用于配置 frps 服务。$ sudo vim /etc/systemd/system/frps.service写入内容
[Unit]# 服务名称,可自定义Description=frp serverAfter=network.target syslog.targetWants=network.target[Service]Type=simple# 启动frps的命令,需修改为您的frps的安装路径ExecStart=/path/to/frps -c /path/to/frps.toml[Install]WantedBy=multi-user.target - 使用 systemd 命令管理 frps 服务
# 启动frpsudo systemctl start frps# 停止frpsudo systemctl stop frps# 重启frpsudo systemctl restart frps# 查看frp状态sudo systemctl status frps - 设置 frps 开机自启动
sudo systemctlenablefrps
通过遵循上述步骤,您可以轻松地使用 systemd 来管理 frps 服务,实现启动、停止、自动运行和开机自启动。确保替换路径和配置文件名称以匹配您的实际安装。
frp p2p模式配置:
https://gofrp.org/zh-cn/docs/examples/xtcp/
点对点内网穿透
frp 提供了一种新的代理类型 xtcp,用于在需要传输大量数据且不希望流量经过服务器的情况下实现内网穿透。
与 stcp 类似,使用 xtcp 需要在两端都部署 frpc 以建立直接连接。
需要注意的是,xtcp 并不适用于所有类型的 NAT 设备,如果穿透失败,可以尝试使用 stcp 代理。
步骤
- 配置需要暴露到外网的机器上的 frpc.toml 文件在 frpc.toml 文件中添加以下内容,确保设置了正确的服务器地址和端口以及共享密钥 (
secretKey),以及本地服务的 IP 地址和端口:serverAddr="x.x.x.x"serverPort=7000# 如果默认的 STUN 服务器不可用,可以配置一个新的 STUN 服务器# natHoleStunServer = "xxx"[[proxies]]name="p2p_ssh"type="xtcp"# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务secretKey="abcdefg"localIP="127.0.0.1"localPort=22 - 在想要访问内网服务的机器上部署 frpc在 frpc.toml 文件中添加以下内容,确保设置了正确的服务器地址和端口,共享密钥 (
secretKey) 以及要访问的 P2P 代理的名称:serverAddr="x.x.x.x"serverPort=7000# 如果默认的 STUN 服务器不可用,可以配置一个新的 STUN 服务器# natHoleStunServer = "xxx"[[visitors]]name="p2p_ssh_visitor"type="xtcp"# 要访问的 P2P 代理的名称serverName="p2p_ssh"secretKey="abcdefg"# 绑定本地端口以访问 SSH 服务bindAddr="127.0.0.1"bindPort=6000# 如果需要自动保持隧道打开,将其设置为 true# keepTunnelOpen = false - 通过 SSH 访问内网机器使用 SSH 命令访问内网机器,假设用户名为
test:ssh -oPort=6000 test@127.0.0.1
frp 的监控面板配置:(后来发现xtcp是无法查看流量的,其实没啥用,由于我配置了,后来就放那了。没改动)
https://gofrp.org/zh-cn/docs/features/common/ui/
Web 界面
目前 frpc 和 frps 分别内置了相应的 Web 界面方便用户使用。
服务端 Dashboard
服务端 Dashboard 使用户可以通过浏览器查看 frp 的状态以及代理统计信息。
注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。
需要在 frps.toml 中指定 dashboard 服务使用的端口,即可开启此功能:
# 默认为 127.0.0.1,如果需要公网访问,需要修改为 0.0.0.0。
webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "admin"
打开浏览器通过 http://[server addr]:7500 访问 Dashboard 界面,输入用户名密码 admin。
你也可以通过配置 TLS 证书来启用 HTTPS 接口:
webServer.tls.certFile = "server.crt"
webServer.tls.keyFile = "server.key"
客户端管理界面
frpc 内置的 Admin UI 可以帮助用户通过浏览器来查询和管理客户端的 proxy 状态和配置。
需要在 frpc.toml 中指定 admin 服务使用的端口,即可开启此功能:
# frpc.toml
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
打开浏览器通过 http://127.0.0.1:7400 访问 Admin UI。
如果想要在外网环境访问 Admin UI,可以将 7400 端口通过 frp 映射出去即可,但需要重视安全风险。
# frpc.toml
[[proxies]]
name = "admin_ui"
type = "tcp"
localPort = 7400
remotePort = 7400
最后结论:
最后附上一个操作后的截图:延迟和丢包都很低,后续观察对比直连的区别,同时观察下服务器流量的变动。 延迟对比走韩国服务器的几百ms减少到几十ms。
