运用WireGuard实现内网穿透

因为中国电信的相关优惠原因,就换了一下电信的套餐,然后我的公网IP,不见了呀,现在公网IP要钱了呀😭

然后就只能找一种方案穿透回家,以前比较常接触的是frpc的方式,需要一一对应端口,太麻烦的东西肯定就不用啦

最后选了 WireGuard 的方案

Fork wg-easy 仓库

通过各种学习了 WireGuard 内网穿透的关键点

了解到 WireGuard 的简单配置在 wg-easy 的加持下,更加简单,但内网穿透中有个关键的 AllowIPs 设置却没有在 GUI界面 中可配置。

所以我就直接 fork 了这个项目,在项目的基础上做些小改造。

comment 记录

👔 support edit allowIPs for setting intranet penetration [@13779ff]

项目链接:

kwokronny/wg-easy

wg-easy

已将 wg-easy 的镜像通过 Github Action 同步推送至 Docker hub 镜像仓库

docker pull kwokronny68/wg-easy

🚀 部署WireGuard

以下工作准备就绪后就可以开始部署啦

  • 公网服务器
  • 服务器安装了docker
  • 防火墙为 wg-easy 放开需要的端口

🐳 docker-compose 方式部署

# docker-compose.yml
version: "2.1"
services:
  wg_easy:
    image: kwokronny68/wg-easy:latest
    container_name: wg-easy
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - WG_DEFAULT_ADDRESS=[默认IP, 例如: 192.168.12.x]
      - WG_POST_UP=iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o %i -j MASQUERADE
      - WG_POST_DOWN=iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o %i -j MASQUERADE
      - WG_HOST=[服务器IP/域名]
      - WG_CONFIG_PORT=[端口]
      - WG_ALLOWED_IPS=[允许通信IPs, 默认是0.0.0.0,内网穿透的话还是要设置一下 例如: 192.168.12.0/24]
      - WG_PERSISTENT_KEEPALIVE=15
      - PASSWORD=[替换成密码]
    ports:
      - 51820:51820/udp
      - 51821:51821/tcp # GUI界面端口
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1
    restart: unless-stopped
    volumes:
      - ./config:/etc/wireguard

⚒️ 配置 wg-easy

  1. 通过访问 服务器:51821 输入配置中设置的密码 进入到 wg-easy 的 GUI管理界面

  2. New 一个 Client,假设取名为 Router

  3. 为 Router 设置 allowedIPs 为 家里的IP段 如:192.168.52.0/24

  4. 将配置文件下载并配置到路由器中

    路由配置图片

  5. 再 New 一个 Client,假设为公司的电脑设备,并下载配置文件,并配置到 wireguard 并连接

    公司电脑配置图片

  6. 连接成功后,就可以直接通过 IP 端访问家里的服务啦

    内网穿透成功图片