有什么优势
- 通过家里的局域网 IP 访问设备
- 解决公司内部网络,内部 DNS 问题
- 直连网络,流量不需要经过服务器中转
- 和 Clash 配合,不需要再装其它 VPN 软件
- 相比于 zerotier tailscale ,没有 QoS 的问题
- 安全,不需要对外暴露端口
- 适合多对一的情况
前提:搞清楚 NAT 类型,确定能够打洞穿透才行
1. 准备
- Clash.Verge
- FRP
-
一台云服务器
- frps 负责 P2P 打洞,失败也可以作为降级,Frp 提供穿透失败走中转的策略
-
家里
- frpc
- socks-server
-
公司
- frpc
- clash
2. Frp 配置
2.1 云服务器 Frps 配置
frps.toml
bindPort = 7000
docker-compose.yml
version: '3.5'
services:
frps:
image: snowdreamtech/frps:0.56.0
networks:
- cluster
environment:
- TZ=Asia/Shanghai
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
configs:
- source: frps_config
target: /etc/frp/frps.toml
ports:
- target: 7000
published: 7000
configs:
frps_config:
file: ./frps.toml
2.2 家里
-
部署 socks 服务
- 我是用的 openwrt passwall 自带的
frpc.toml
# frps 部署地址
serverAddr = "xxxx"
serverPort = 7000
[[proxies]]
name = "socks-proxies"
frp xtcp 才支持 p2p 打洞穿透
type = "xtcp"
秘钥,公司的 frpc 会用到
secretKey = "xxxx"
填你的 socks 所在设备的 ip port
localIP = "192.168.5.2"
localPort = 10080
2.3 公司
frpc.toml
# frps 部署地址
serverAddr = "xxxx"
serverPort = 7000
[[visitors]]
随便取
name = "socks_visitor"
和家里保持一致
type = "xtcp"
serverName = "socks-proxies"
secretKey = "xxxx"
绑定到本地的端口
bindAddr = "0.0.0.0"
bindPort = 10080
定时轮询,保持连接
keepTunnelOpen = true
运行
docker run --restart=always -p 10080:10080 -d -v ./frpc.toml:/etc/frp/frpc.toml --name frpc snowdreamtech/frpc
3. Clash 配置
在 Clash-Verge 中开启 Tun 模式:这样可以创建一个网卡,接管电脑所有网络,否则只能浏览器,或者支持代理的软件访问
Clash 基础配置可以看: https://github.com/juzisang/Rules/blob/main/clash.yaml
添加如下配置
clash-config.yaml
# 添加节点
proxies:
- {
name: HomeProxy,
server: 127.0.0.1,
port: 10080,
type: socks5,
username: xxx,
password: xxx,
}
...
proxy-groups:
- name: 🏠 家庭网络
type: select
proxies:
- HomeProxy
...
rules:
自定义规则
- IP-CIDR,192.168.5.0/24,🏠 家庭网络
3.1 解决公司内部 DNS 问题
公司有很多内部服务,不对外开放,一般都是内部有一个私有 DNS 服务器,来负责这些内部服务的域名解析,但是 clash 接管整机网络之后,DNS 也会接管,会导致这些服务找不到 ip
添加如下配置
clash-config.yaml
dns:
enable: true
listen: :1053
enhanced-mode: fake-ip
fake-ip-filter:
- "*"
- "+.lan"
- "+.local"
default-nameserver:
- 223.5.5.5
- 119.29.29.29
- 114.114.114.114
proxy-server-nameserver:
- https://doh.pub/dns-query
nameserver:
# 这里填公司的私有 DNS 地址
- 192.168.x.x
- 192.168.x.x
nameserver-policy:
# 被墙的域名才走这个解析
"geosite:gfw":
- "tls://8.8.4.4#dns"
- "tls://1.0.0.1#dns"