有什么优势
- 通过家里的局域网 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" 
