剪藏#剪藏

WireGuard+FRP回家教程 - 搞七捻三 - LINUX DO

2025 年 7 月 9 日1 分钟
分享Twitter / XTelegram微博

家宽无公网IP也可以出门在外畅联家中网络

第一步:

在VPS上部署服务端FRPS,docker-compose.yaml内容参考如下

JAVASCRIPT
services:
  frps:
    restart: always
    network_mode: host
    volumes:
      - './frps.toml:/etc/frp/frps.toml'
    container_name: frps
    image: snowdreamtech/frps
    environment:
      TZ: Asia/Shanghai

frps.toml文件填写如下

JAVASCRIPT
[common]
#frp 监听端口,与客户端绑定端口
bind_port= 5443
kcp_bind_port = 5443
#dashboard用户名
dashboard_user= vector
#dashboard密码
dashboard_pwd= password
#dashboard端口,启动成功后可通过浏览器访问如http://ip:9527
dashboard_port= 9527
#设置客户端token,对应客户端有页需要配置一定要记住,如果客户端不填写你连不上服务端
token = xxxxxxxxxx

在vps上开放端口

JAVASCRIPT
iptables -I INPUT -p udp --dport 51820 -j ACCEPT
iptables -I INPUT -p tcp --dport 51821 -j ACCEPT

第二步:

在家里NAS部署客户端FRPC,docker-compose.yaml内容参考如下

JAVASCRIPT
services:
  frpc:
    restart: always
    network_mode: host
    volumes:
      - './frpc.toml:/etc/frp/frpc.toml'
    container_name: frpc
    image: snowdreamtech/frpc
    environment:
      TZ: Asia/Shanghai

frpc.toml文件参考如下:

JAVASCRIPT
[common]
server_addr = vps的ip
server_port = 5443
token = xxxxxxxxxx

# 代理1: 穿透 WireGuard 的 UDP 数据端口
[wg-data]
type = udp
local_ip = 127.0.0.1
local_port = 51820
remote_port = 51820

# 代理2: 穿透 wg-easy 的 TCP Web UI 端口
[wg-ui]
type = tcp
local_ip = 127.0.0.1
local_port = 51821
remote_port = 51821

第三步:

在家中NAS部署WireGuard,以wg-easy为例

JAVASCRIPT
volumes:
  etc_wireguard: # 持久化存储 WireGuard 配置

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:latest # 使用 latest 或指定稳定版本, :14
    container_name: wg-easy
    environment:
      # --- 核心配置 ---
      # !!!重要:这里填写你的 frp 公网服务器的 IP 地址 !!!
      # 这是客户端配置文件中 Endpoint 的地址
      - WG_HOST=vps的ip

      # !!!重要:wg-easy Web UI 的管理员密码哈希 !!!
      # 强烈建议修改默认密码 'foobar123'
      # 可以使用 `docker run --rm ghcr.io/wg-easy/wg-easy:latest --pw your_strong_password` 生成哈希
      # 或者使用在线 bcrypt 生成器 (注意 rounds=5, 示例为 'foobar123' 的哈希)
      # - PASSWORD_HASH=$2y$05$6n2x0AdkZ5lJ8kHufbXrr.dU.UHMBh04HKYXoPb0w484wN75877Eu # (需要双 $$ 符号)

      # --- 网络配置 ---
      # WireGuard 服务监听的 UDP 端口 (容器内)
      - WG_PORT=51820
      # wg-easy Web UI 监听的 TCP 端口 (容器内)
      - PORT=51821

      # VPN 客户端分配的 IP 地址范围 (选择一个未使用的私有网段)
      - WG_DEFAULT_ADDRESS=10.8.0.x # 客户端将获取 10.8.0.2, 10.8.0.3 ...
      # 客户端使用的 DNS 服务器 (可使用公共 DNS 或内网 DNS)
      - WG_DEFAULT_DNS=114.114.114.114, 8.8.8.8

      # !!!重要:客户端允许访问的 IP 范围 !!!
      # 决定了哪些流量会通过 VPN 隧道
      # 10.8.0.0/24: 允许客户端之间互相访问 (如果需要)
      # 192.168.125.0/24: 允许客户端访问 test 服务器所在的局域网
      - WG_ALLOWED_IPS=10.8.0.0/24, 192.168.125.0/24

      # --- 可选配置 ---
      # 保持连接,防止 NAT 超时断开 (单位: 秒)
      - WG_PERSISTENT_KEEPALIVE=25
      # Web UI 语言 (支持 en, chs 등)
      - LANG=chs
      # 启用/禁用 Web UI 中的流量统计图表 (true/false)
      # - UI_TRAFFIC_STATS=true
      # 在 Web UI 中允许通过 HTTP 访问,如果前面没有反向代理做HTTPS,则需要设置为 true
      # 生产环境强烈建议配合反向代理使用 HTTPS
      # - INSECURE=true

    volumes:
      # 将 WireGuard 配置持久化到宿主机
      - etc_wireguard:/etc/wireguard
    ports:
      # 将宿主机的端口映射到容器端口
      # 格式: "宿主机端口:容器端口/协议"
      - "51820:51820/udp" # WireGuard 数据端口 (与 WG_PORT 一致)
      - "51821:51821/tcp" # wg-easy Web UI 端口 (与 PORT 一致)
    restart: unless-stopped
    cap_add:
      # 赋予容器必要的网络管理权限
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      # 启用 IP 转发,允许 VPN 客户端通过此服务器访问其他网络
      - net.ipv4.ip_forward=1
      # 确保 WireGuard 的网络标记正常工作
      - net.ipv4.conf.all.
JAVASCRIPT
src_valid_mark=1
      # - net.ipv6.conf.all.forwarding=1 # 如果需要 IPv6 支持,取消注释

第四步:

那么在外面回家时可以使用WireGuard客户端进行连接,下面以loon为例:

首先在wireguard的web界面创建配置文件,比如ios-loon

null

loon→仪表→节点→右上角+→本地节点→扫一扫,扫面web界面的二维码即可添加,别名比如:HomeWG

null

在loon配置文件中[Proxy Group]位置增加下面内容

JAVASCRIPT
回家 = ssid,defaul=HomeWG,cellular=HomeWG,”家里的wifi名称”=DIRECT

wg-easy得docker-compose.yaml文件中增加环境变量PASSWORD_HASH,在NAS终端运行

JAVASCRIPT
docker run [ghcr.io/wg-easy/wg-easy:14](http://ghcr.io/wg-easy/wg-easy:14) node -e 'const bcrypt = require("bcryptjs"); const hash = bcrypt.hashSync("YOUR_PASSWORD", 10); console.log(hash.replace(/\$/g, "$$$$"));'

YOUR_PASSWORD 替换为自己想要设置的密码,拷贝输出结果并将其添加到 PASSWORD_HASH 环境变量中。

感谢大佬, 我刚放弃了 wireguard的方案,之前调通了, 后面换VPS 好像又被阻断了, 具体运营商会不会阻断, 不确定, 后面又尝试 加一层 udp2raw 转来转去 没搞成功.

最近换了 openvpn 方案.

室外 android → VPS frp 转发 udp → 室内 immortalWRT路由器 (openVPN server)

没有 nas

国内没应用起来的原因是 wireguard 特征明显 被宽带商Q

不过确实配置简单好用…

WireGuard 套 VLESS XTLS Reality 就行了

如果没有组网需求,可以直接用 VLESS XTLS Reality

我们已经有一段时间没有看到 lance 了 — 他/她上次发帖是 10 个月前。

感谢分享

唔其实 frp不管是客户端还是服务端的dashboard其实都有点食之无味弃之可惜 唯一能干的事情似乎只是看连接状态的简单统计 frpc还多一个(其实也没什么用的)编辑配置文件的工具 仅此而已了) 所以我平时都懒得配置面板)

可以尝试一下headscale或者netbird,感觉方案要简单许多,网络带宽不会受限VPS带宽

直接frpc ssh 不香吗 如果需要家里的网路 v2 起码不会被封端口

对,lz是因为家宽无公网IP,所以采用的frp. 有公网IP的话直接开端口就好,省内相同ISP的话问题不大。 但是移动端的tun模式性能不高

我现在有一个问题,咱这边群租房也是没有公网的是,但是有一些应用程序的传输协议是需要公网的比方说 bittorrent 需要公网进行p2p连接来提高下载速度 这样的话我需要怎么做呢

这会儿到底属于什么样的网络知识需要怎么学习?有没有什么相关的教材和课程可以推荐的。

路由和交换

wd 是点对点,如果是部署在 vps 上,那么只能手机跟 vps 连,为了手机回家,所以 wd 部署在家里

那我要去学习这个知识的话,是不是需要找一台openwrt虚拟机,然后把这个虚拟机变成网关,再给这个虚拟网关建立一个虚拟机里的网络反复进行调试

ccna的内容,对应的华为也有,入门的话从tcpip开始简单了解下就好,实验的话OpenWrt还不行,但是可以用网络模拟器

vps没有公网ip吗还是啥意思。我是阿里云部署的wg-easy,其他地方都装wg客户端,只是不能点对点只能中继

具体如何中继,分享下,目前 wg 配合 frp 能够同时挂着代理软件实现无感回家

家里翻墙,手机也翻墙,相当于 vps ip 走的代理 一般的甲骨文 vps 体验还算可以,就是怕运营商阻断

感谢佬的分享,请教下有没有对比过zerotier和wireguard哪个更好些呢?

wg是点对点,zerotier是安装app都可以互连,看使用场景

和直接用frp的效果有啥区别吗,德国nc机器太远了是不是没法搞

全平台,开源。可以用这个代替 WireGuard+FRP,也可以用easytier + WireGuard

null

null

访问速度和稳定性方面有区别吗?目前用zt感觉还可以,正犹豫要不要也试下wg

我们已经有一段时间没有看到 Soso 了 — 他/她上次发帖是 6 个月前。

wireguard 用一段时间就会被封端口,很烦。

此话题将在最后一个回复的1 个月后关闭。

原文地址: https://linux.do/t/topic/766944

相关文章