目 录CONTENT

文章目录

小米路由安装frpc

过客
2025-06-22 / 0 评论 / 1 点赞 / 9 阅读 / 0 字

一、起因

家里部署了Nas,在出租屋里直接使用frp访问外网服务器转发的是可以用,但是,流量得多贵啊,还有中间商赚带宽。于是想了一下,在出租屋的路由上部署frp客户端,使用xtcp协议,打洞直连,速度快还不需要流量。

二、流程

前提条件:

  • 一台公网frps服务器
  • 家里Nas,已经配置好 SMB文件共享(端口445)WebDav(端口80,可选端口443),其他自行发挥。
  • 出租屋解锁SSH的小米路由,我家是小米路由器 AX3000T 解锁 SSH
  • 小米路由IP: 192.168.1.1
  • WebDav域名: nas.zengwu.com.cn

三、配置

服务器和nas端的frp安装比简单,可以参考frp内网穿透搭建远程桌面,这里点重讲一下小米路由上的安装和配置。

1. 服务器frps配置

服务器frps只要一个基本的端口配置就可以了,其他的根据个人情况而定

# 服务器端口
bindPort = 5000

# 权限认证
auth.method = "token"
auth.token = "123456"

# 其他配置

2. 家里Nas frpc配置

这里配置44580二个端口的xtcp和stcp,使用frp的Fallback机制,保证xtcp打洞失败的时候使用stcp链接。优势是打洞失败时可以走stcp连接,劣势是不知道什么时候失败走的stcp,这里会消耗服务器流量。如果怕消耗流量,可以只配置xtcp。

# 服务器域名端口
serverAddr = "公网服务器ip或域名"
serverPort = 5000

# 权限认证
auth.method = "token"
auth.token = "123456"

# smb stcp 协议配置,默认端口445
[[proxies]]
name = "STCP-SMB"
type = "stcp"
secretKey = "123456"
localIP = "127.0.0.1"
localPort = 445
transport.useEncryption = true
transport.useCompression = true

# smb xtcp 协议配置,默认端口445
[[proxies]]
name = "XTCP-SMB"
type = "xtcp"
secretKey = "123456"
localIP = "127.0.0.1"
localPort = 445
transport.useEncryption = true
transport.useCompression = true

# web stcp 协议配置,默认端口80
[[proxies]]
name = "STCP-Web"
type = "stcp"
secretKey = "123456"
localIP = "127.0.0.1"
localPort = 80
transport.useEncryption = true
transport.useCompression = true

# web xtcp 协议配置,默认端口8
[[proxies]]
name = "XTCP-Web"
type = "xtcp"
secretKey = "123456"
localIP = "127.0.0.1"
localPort = 80
transport.useEncryption = true
transport.useCompression = true

3. 小米路由frp安装配置

3.1 下载frp

用ssh登录到小米路由中,使用df -h查看磁盘情况,我这里只有/tmp目录空间宽裕点,就安装到tmp目录吧。

root@XiaoQiang:/tmp# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                18.3M     18.3M         0 100% /
tmpfs                   119.5M     13.9M    105.5M  12% /tmp
ubi1:cfg                 24.3M      1.8M     21.2M   8% /data
ubi1:cfg                 24.3M      1.8M     21.2M   8% /userdisk
/dev/root                18.3M     18.3M         0 100% /userdisk/data
ubi1:cfg                 24.3M      1.8M     21.2M   8% /etc/config
ubi1:cfg                 24.3M      1.8M     21.2M   8% /etc/datacenterconfig
ubi1:cfg                 24.3M      1.8M     21.2M   8% /etc/smartcontroller
ubi1:cfg                 24.3M      1.8M     21.2M   8% /etc/parentalctl
ubi1:cfg                 24.3M      1.8M     21.2M   8% /etc/smartvpn
ubi1:cfg                 24.3M      1.8M     21.2M   8% /etc/ppp
ubi1:cfg                 24.3M      1.8M     21.2M   8% /etc/crontabs
ubi1:cfg                 24.3M      1.8M     21.2M   8% /etc/mipctl
tmpfs                   512.0K         0    512.0K   0% /dev

小米路由是定制版的OpenWRT,用cat /proc/cpuinfo查看一下指令集

root@XiaoQiang:/tmp# cat /proc/cpuinfo 
processor	: 0
model name	: ARMv8 Processor rev 4 (v8l)
BogoMIPS	: 26.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

processor	: 1
model name	: ARMv8 Processor rev 4 (v8l)
BogoMIPS	: 26.00
Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer	: 0x41
CPU architecture: 8
CPU variant	: 0x0
CPU part	: 0xd03
CPU revision	: 4

这里是ARMv8的,支持arm64,去frp releases 下载linux_amd64.tar.gz版本就可以了,如果是ARMv7或更早版本可以下载linux_amd.tar.gz版本。

下载,解压到 /tmp/frp目录,只保留frpcfrpc.toml二个文件,其他可以删了。

3.2 配置frp

这里配置配置44580二个端口的xtcp和stcp。因为80端口被nginx占用了,我们可以本地监听5080端口,然后再修改 nginx配置,将webdav域名转到5080端口上。

# 服务器域名端口
serverAddr = "公网服务器ip或域名"
serverPort = 5000

# 权限认证
auth.method = "token"
auth.token = "123456"

# SMB ################################################
# stcp 协议配置
[[visitors]]
name = "STCP-SMB-visitor"
type = "stcp"
# 被连接客户端配置的stcp name
serverName = "STCP-SMB"
secretKey = "123456"

# stcp-visitor 的 bindPort 设置为 -1 表示不需要监听物理端口,只接受 fallback 的连接即可。
bindPort = -1

# 加密压缩传输内容
transport.useEncryption = true
transport.useCompression = true

# xtcp 协议配置
[[visitors]]
name = "XTCP-SMB-visitor"
type = "xtcp"
# 被连接客户端配置的 xtcp name
serverName = "XTCP-SMB"
secretKey = "123456"
bindAddr = "0.0.0.0"
bindPort = 445

# 加密压缩传输内容
transport.useEncryption = true
transport.useCompression = true

# 如果仅配置xtcp,后面配置可以删keepTunnelOpen 和 fallback配置可以删了
# 配置了 keepTunnelOpen = true 时,frpc 会定期检测隧道是否打开
# 如果没有,则会尝试打洞建立隧道,这样可以始终保持隧道打开,在需要连接对端服务时,可以避免延迟。
keepTunnelOpen = true

# 如果 xtcp 打洞失败,则使用 stcp 进行链接,fallbackTo = 上面的 stcp name
fallbackTo = "STCP-SMB-visitor"
# 打洞超过时间,200ms还未成功的话,会回退到使用 stcp_desktop_visitor 建立连接。
fallbackTimeoutMs = 1000

# Web ################################################
# stcp 协议配置
[[visitors]]
name = "STCP-Web-visitor"
type = "stcp"
serverName = "STCP-Web"
secretKey = "123456"
bindPort = -1
transport.useEncryption = true
transport.useCompression = true

# xtcp 协议配置
[[visitors]]
name = "XTCP-Web-visitor"
type = "xtcp"
serverName = "XTCP-Web"
secretKey = "123456"
bindAddr = "0.0.0.0"
bindPort = 5080  ## 避免和nginx端口冲突
transport.useEncryption = true
transport.useCompression = true
keepTunnelOpen = true
fallbackTo = "STCP-Web-visitor"
fallbackTimeoutMs = 1000

3.3 启动frp

可以先用/tmp/frp/frpc -c /tmp/frp/frpc.toml 来启动测试。然后,可以在电脑运行栏中输入\\192.168.1.1 访问smb文件共享

测试没问题后,可以启动到后台。

#本想用nohup的,结果没有这个命令,而且opkg安装也找不到,就先不折腾了,直接使用括号创建子shell

( /tmp/frp/frpc -c /tmp/frp/frpc.toml & ) > /dev/null 2>&1

用vim编辑器打开/etc/rc.local 文件,将上面命令添加进去,使之开机启动。

root@XiaoQiang:/tmp/frp# cat /etc/rc.local 
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

( /tmp/frp/frpc -c /tmp/frp/frpc.toml & ) > /dev/null 2>&1

exit 0

3.4 配置 nginx转发 webdav

/etc/nginx/conf.d目录新建 nas.conf文件

server {
		listen       80;
		server_name  nas.zengwu.com.cn;
		charset UTF-8;

		location / {
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header Range $http_range;
			proxy_set_header If-Range $http_if_range;
			proxy_redirect off;
        	proxy_pass http://localhost:5080/;
    	}	
    }

    ## 如果需要https连接,切有证书,将证书文件放到 /etc/nginx/目录下
    server {
		listen 443 ssl;
		server_name  nas.zengwu.com.cn;
		ssl_certificate      nas.crt;
		ssl_certificate_key  nas.key;

		ssl_session_cache    shared:SSL:1m;
		ssl_session_timeout  5m;

		ssl_protocols TLSv1.1 TLSv1.2;
		ssl_ciphers  HIGH:!aNULL:!MD5:!SHA;
		ssl_prefer_server_ciphers  on;

		#
		keepalive_timeout  0;

		#set the send_timeout as 60 minutes
		send_timeout 60m;
		#
		location / {
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;
			proxy_set_header Host $http_host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header Range $http_range;
			proxy_set_header If-Range $http_if_range;
			proxy_redirect off;
        	proxy_pass http://localhost:5080/;
		}
	}
# 测试配置文件是否有问题
/usr/sbin/nginx -c

# 重新加载配置文件
/usr/sbin/nginx -s reload

最后,打开app,添加自义定hosts,将nas域名解析到路由上
没有绑定app可以 vim /etc/custom_hosts 添加后再重启路由

192.168.1.1 nas.zengwu.com.cn

到此,所有配置完成,连接路由的设备,可以通过 \\192.168.1.1 访问smb共享、通过 http//域名 访问webdav

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区