x-ui + frp搭建你的专属校园代理
现在遇到这样一个需求,人在校外,要访问校内的网络服务(课程作业平台,只能在校内访问),但是学校官方的代理服务器又拿去维修了。此时想起学校的社团办公室内放置了一台小主机,性能虽然不足运行GUI环境和浏览器,但运行一些轻量服务倒是绰绰有余。于是便想到了x-ui + frp的方案,用来搭建自己的专属校园代理服务。
安装过程
x-ui
第一步,先安装x-ui,用来图形化配置代理。
两种方式,第一种,bash命令安装:
bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
但我选择第二种😃,docker安装,一方面是国内的网络环境不太容易能访问到github相关的内容,另一方面就是众所周知的容器化的好处了。
噢!还有一种方式,手动安装,可以去https://github.com/vaxilu/x-ui/releases 下载最新的二进制文件,然后参考该项目主页的方法进行安装。
docker安装,选定一个目录,执行:
mkdir x-ui && cd x-ui
docker run -itd --network=host \
-v $PWD/db/:/etc/x-ui/ \
-v $PWD/cert/:/root/cert/ \
--name x-ui --restart=unless-stopped \
enwaiax/x-ui:latest
好了,x-ui这就安装好了。记得在安装的最后一步看输出日志的面板端口。
下一步是想办法把x-ui面板暴露出去,这一步我用frp。
接下来是前往x-ui,账号密码admin: admin,前往入站列表创建入站。
![]()
可以参考如图的配置,tls可以自己决定开不开。当然,在当前场景下,其实用vless协议并不是效率最高的方案,也可以考虑使用其他协议。
创建成功后,再想办法给入站的这个端口用frp等方式暴露出去。
最后,测试是否生效,这里我用小火箭进行测试,注意设置里Test Method选Connect才是真延迟,否则是测试的代理软件和frp服务器的延迟。
延迟在一百到两百毫秒左右,属于能用的水平,当然也还有大量可以优化的空间。
如果你使用的其他客户端,也可以考虑搜索并使用“订阅转换”工具。
可能存在的问题
上述配置过程可能会出现一些奇怪的bug,如果你试过能用,那很好,可以划走了。如果发现没有解决,可以参考下面的内容:
-
问题1: 为什么我配置好了发现报错了?报错内容是
textXray 25.9.11 (Xray, Penetrates Everything.) Custom (go1.25.0 linux/arm64) A unified platform for anti-censorship. 2025/10/18 23:37:19.044584 [Info] infra/conf/serial: Reading config: &{Name:bin/config.json Format:json} Failed to start: main: failed to load config files: [bin/config.json] > infra/conf: failed to build inbound config with tag inbound-50087 > infra/conf: failed to build inbound handler for protocol vless > infra/conf: VLESS clients: "flow" doesn't support "xtls-rprx-direct" in this version解决方案: 该问题是由于x-ui面板和xray配置冲突导致的。可以参考下面的方法进行解决(如果你也是用的docker和debian的组合)
bashdocker stop x-ui # 先停止x-ui容器,如果是其他方式部署,就用其对应的停止方式 sudo apt install sqlite3 -y # x-ui用的sqlite3数据库,我们要手动去操作数据库 cd ~/x-ui/db # 前往x-ui对应的数据库目录 sqlite3 x-ui.db # 打开数据库文件 SELECT * FROM inbounds; # ...(这里是一大段内容,记住配置的入站的id) UPDATE inbounds SET settings = json_remove(settings, '$.streamSettings.flow') WHERE id = 1;# id得看情况改成对应的 UPDATE inbounds SET settings = json_remove(settings, '$.clients[0].flow') WHERE id = 1;# id依旧得改成对应的 .quit docker start x-ui # 重启容器接下来前往系统状态,确保xray状态为running,就可以进行剩余的转发订阅操作了。
-
问题2: frp的本地端口和远程端口是什么关系?
答: 本地端口是frp客户端需要转发的端口,远程端口是服务器监听的端口。例如x-ui代理在23456端口,那么如果想映射该端口,就得填本地端口为23456;远程端口如果是31234,那么就直接通过 frp服务器公网+31234端口进行访问。