FRP内外穿透

一、VPS部署服务端 frps

1.登录并下载 FRP
用 SSH 连上vps。在命令行里依次执行下面两句命令(这是下载并解压目前最新的 FRP):

1
2
3
wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz
tar -zxvf frp_0.56.0_linux_amd64.tar.gz
cd frp_0.56.0_linux_amd64

2.修改服务端配置文件
我们现在要编辑 frps.toml 文件。执行:

1
nano frps.toml

把里面的内容全部删掉,改成下面这段代码(注意修改你的专属密码):

1
2
3
4
5
6
7
8
# 服务端与客户端通信的端口
bindPort = 7000

# 身份验证密码(自己编一个复杂的,比如 88888888)
auth.token = "这里换成你自己的密码"

# 穿透出来的网页访问端口(因为 80 端口可能被占用,咱们用 8080)
vhostHTTPPort = 8080

如果屏幕上跳出 frps started successfully,说明成功了!按 Ctrl+C 先停掉它。
咱们让它在后台永远运行,执行这个命令:

1
nohup ./frps -c ./frps.toml >/dev/null 2>&1 &

(云端搞定!记住vps公网 IP,下面要用)

3.vps防火墙
以GCP为例

谷歌云的防火墙默认是全部拦截的,你必须去网页后台放行咱们刚才设置的 7000 和 8080 端口。

3.1登录谷歌云网页后台 ➡️ 左侧菜单找 VPC 网络 ➡️ 防火墙。

3.2点击顶部的 创建防火墙规则。

3.3按下面这样填:

  • 名称: allow-frp

  • 流量方向: 入站

  • 对匹配项执行的操作: 允许

  • 目标: 网络中的所有实例

  • 来源 IPv4 范围: 0.0.0.0/0

  • 协议和端口: 勾选 指定的协议和端口,勾选 TCP,在框里输入 7000,8080。

  • 点击 创建。

二、Terxum部署客户端 frpc

1.下载同样的 FRP
执行命令(如果你的手机是 ARM 架构,链接得换成 arm64,我默认你用的是这个):

1
2
3
wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_arm64.tar.gz
tar -zxvf frp_0.56.0_linux_arm64.tar.gz
cd frp_0.56.0_linux_arm64

2.域名添加A记录

把需要穿透的服务在cloudflare域名中添加A记录,ipv4为vps的IP,并关闭小云朵。

3.修改客户端配置文件
编辑 frpc.toml 文件:

1
nano frpc.toml

清空里面的内容,换成下面这段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 填你谷歌云的公网 IP
serverAddr = "35.212.240.126"
serverPort = 7000

# 必须和刚才云端设置的密码一模一样!
auth.token = "xxsky1127"

# ==================================
# 1. 把本地的 AList / OpenList 穿透出去
# ==================================
[[proxies]]
name = "openlist_web"
type = "http"
localIP = "127.0.0.1"
localPort = 5244
customDomains = ["op.363689.xyz"]

# ==================================
# 2. 把本地的 Emby 穿透出去
# ==================================
[[proxies]]
name = "emby_web"
type = "http"
localIP = "127.0.0.1"
localPort = 8096 # 这是 Emby 的默认端口,如果你改过,请换成你的真实端口
customDomains = ["huu.cc.cd"] # 给 Emby 专属的新域名

保存退出(Ctrl+O, 回车, Ctrl+X)。
4.启动本地客户端

1
./frpc -c ./frpc.toml

如果屏幕显示 start proxy success,恭喜你,穿透成功了!

如果toml文件格式错误,用电脑传过去再

1
cp ~/storage/downloads/frpc.toml ~/frp_0.56.0_linux_arm64/

三、vpn设置
以flclash为例
1.添加 Fake-IP 过滤(防止 DNS 被劫持)
这一步是为了告诉 FlClash:“这两个域名你别瞎管,用我本地真实的 DNS 去解析出谷歌云的真实 IP!”

打开 FlClash,找到 配置 / 代理 / 高级设置(根据你的界面,找到 Fake-IP 过滤 / Fake-ip Filter)。

在里面添加下面这两行:

1
2
op.363689.xyz
huu.cc.cd

(注:如果你想图省事,连带着以后可能加的子域名一起直连,也可以写成 *.363689.xyz 和 *.huu.cc.cd,但我建议精准放行,就填上面那两行。)

2.添加附加规则(强制流量直连)
这一步是定海神针,直接命令底层的 Clash 内核:只要是去往这两个域名的流量,必须走 DIRECT!

在 FlClash 里找到 附加规则 / 自定义规则 / 规则集。

添加以下两行规则(注意逗号是英文半角):

1
2
DOMAIN,op.363689.xyz,DIRECT
DOMAIN,huu.cc.cd,DIRECT

终极防漏网之鱼绝招:
为了防止有时候域名解析太快,导致 IP 直接裸奔出去被代理接管,极其建议你把你谷歌云的真实公网 IP 也加进直连规则里!
在刚才那两行下面,再加一行:

1
IP-CIDR,你的谷歌云公网IP/32,DIRECT

(比如你的谷歌云 IP 是 34.12.34.56,你就填 IP-CIDR,34.12.34.56/32,DIRECT)
见证奇迹的“重启”
全加上之后,千万别忘了最重要的一步:
关闭 FlClash 的代理开关 ➡️ 把后台彻底划掉 ➡️ 重新打开 FlClash ➡️ 开启代理。

这样是为了强制清空它肚子里的旧 DNS 缓存。

现在,你拿手机连接 5G 网络,分别打开这两个域名。然后去 FlClash 的 “连接” 页面里查一下水表,如果看到它们俩后面都跟着灰色的 DIRECT,那恭喜你,这套双引擎直连方案已经被你彻底玩明白了!

四、静默启动所有服务

你直接在 Termux 里复制并执行下面这整段代码,它会直接覆盖更新你原来的 start.sh 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
cat > ~/start.sh << 'EOF'
#!/bin/bash
echo "🚀 正在唤醒所有追更矩阵服务 (含双路穿透)..."

cd ~/openlist && nohup ./openlist server >/dev/null 2>&1 &
echo "✅ OpenList 已启动"

nohup cloudflared tunnel --protocol http2 --config ~/.cloudflared/config.yml run emby_tunnel > ~/tunnel.log 2>&1 &
echo "✅ Cloudflare 隧道已启动 (备用通道)"

# ================= 新增的 FRP 服务 =================
nohup ~/frp_0.56.0_linux_arm64/frpc -c ~/frp_0.56.0_linux_arm64/frpc.toml >/dev/null 2>&1 &
echo "✅ FRP 直连穿透已启动 (主力通道)"
# ===================================================

aria2c --conf-path=$HOME/.config/aria2/aria2.conf -D
echo "✅ Aria2 已启动"

crond
echo "✅ 定时任务 (crond) 已启动"

nohup python ~/tg_bridge.py > /dev/null 2>&1 &
echo "✅ TG 监控通知已启动"

cd ~ && nohup python auto_189.py > run.log 2>&1 &
echo "✅ TG 追剧转存已启动"

echo "🎉 矩阵全面复活!双通道已就绪,可以退出了。"
EOF
1
bash ~/start.sh

五、FRPS容器安装

以GCP为例说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
cat > docker-compose.yml <<EOF
services:
caddy:
image: caddy:latest
container_name: caddy
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
restart: unless-stopped

# 哪吒面板服务
nezha:
image: ghcr.io/nezhahq/nezha:latest
container_name: nezha
ports:
- "8008:8008"
volumes:
- ./nezha_data:/dashboard/data
restart: unless-stopped

# openlist服务
openlist:
image: openlistteam/openlist:latest
container_name: openlist
ports:
- "5244:5244"
environment:
- TZ=Asia/Shanghai
- OPENLIST_ADMIN_PASSWORD=xxsky1127 # 请务必修改
volumes:
- ./oplist_data:/opt/openlist/data
restart: unless-stopped

# Typecho 博客服务
typecho:
image: joyqi/typecho:nightly-php8.2-apache
container_name: typecho
ports:
- "8383:80"
environment:
TZ: Asia/Shanghai
volumes:
# 重点:挂载到 /var/www/html,这样配置文件才会存在你的硬盘上
- ./typecho_data:/var/www/html
depends_on:
- db
restart: always

# 数据库服务
db:
image: mariadb:10.6
container_name: typecho-db
environment:
MYSQL_ROOT_PASSWORD: xxsky1127
MYSQL_DATABASE: typecho
MYSQL_USER: typecho
MYSQL_PASSWORD: xxsky1127
TZ: Asia/Shanghai
volumes:
# 重点:指向你那个存有 ibdata1 的 db 文件夹
- ./db:/var/lib/mysql
restart: always

# ==========================================
# 🌟 新增:FRP 服务端 (用于内网穿透 Emby) 🌟
# ==========================================
frps:
image: snowdreamtech/frps:0.56.0
container_name: frps
ports:
- "7000:7000" # 只暴露底层通讯端口给手机
volumes:
- ./frps.toml:/etc/frp/frps.toml # 挂载我们写好的 FRP 配置文件
restart: unless-stopped

networks:
default:
name: app_network
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
cat > Caddyfile <<EOF
{
# 使用 Google Trust Services (GTS)
acme_ca https://dv.acme-v02.api.pki.goog/directory
acme_eab {
key_id b33a63ed1f543dc239aeb8ee19968fa4
mac_key da4XKFaLRa9-oURHGEB8yf2i7rawv0ozDJK99nEkYbkDJdkBAR-fGWmdSLz4EpUtAHUq4ADNFC53EgKhKxLkBg
}
email xuhxjxhk@gmail.com
}

# 哪吒面板的反向代理配置
mb.hxjx.hidns.co {
reverse_proxy nezha:8008
}

# 哪吒面板的反向代理配置2
nzha.cc.cd {
reverse_proxy nezha:8008
}

# Openlist 的反向代理配置
oplist.cc.cd {
reverse_proxy openlist:5244
}

# Openlist 的反向代理配置2
oplist.hxjx.hidns.co {
reverse_proxy openlist:5244
}

# Typecho博客的反向代理配置
tych.cc.cd {
reverse_proxy typecho:80
}

# Typecho博客的反向代理配置2
tych.hxjx.hidns.co {
reverse_proxy typecho:80
}


# Emby、openlist 域名套上HTTPS
# 可以直接把两个域名写在一起,用逗号隔开
huu.cc.cd, op.363689.xyz {
# 全部丢给 FRP 的 8080 接收端
reverse_proxy frps:8080
}
EOF
1
2
3
4
5
6
cat <<EOF > /root/frps.toml
bindPort = 7000
vhostHTTPPort = 8080
auth.method = "token"
auth.token = "xxsky1127"
EOF
1
docker compose up -d