IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    WireGuard组网指南

    chancel发表于 2025-01-09 00:00:00
    love 0
    <![CDATA[

    WireGuard 是一种现代的虚拟私人网络(VPN)协议和软件,提供了高效、安全和易于配置的 VPN 解决方案,由 Jason A. Donenfeld 开发,并于 2018 年正式合并到 Linux 内核中

    WireGuard 使用现代加密算法来保障通讯的安全和隐私,其代码库简短便于审计和维护,加密方式采用公钥私钥的方式进行端对端加密

    支持的平台也非常广泛包括 Linux、MacOS、Windows 以及移动设备平台 IOS 和 Android

    在国内适合用于代理到家中的 VPN 服务,但其流量特征较为明显且不支持混淆,所以不适合于跨境访问

    1. 结论

    WireGuard 适合需要在外访问家庭网络中的服务场景,例如我是家庭网络中有台 N100 的服务器(其 IP 是192.168.100.1)提供多个微型服务

    在外出后,Android 设备只需打开 WireGuard 服务后,就可以访问 192.168.100.1 ,而无需像 Frp 类的内网穿透服务去访问中转服务器的端口

    WireGuard 相较于 Frp 的优势:

    1. 省去了逐个逐个端口映射的烦恼
    2. 免去了维护两套 IP 的工作(本地 IP 和服务器 IP 之间来回转换)
    3. 流量加密,客户端兼容广泛

    如果自行部署麻烦,可以考虑直接使用第三方容器镜像如 wg-easy ,自带 web 页面管理,非常方便

    • 地址:https://github.com/wg-easy/wg-easy

    以下实践基于手动部署,减少对公网服务器的资源占用

    2. 组网

    这里我有 3 个设备,分别是:

    • N100服务器 192.168.100.1
    • 公网服务器 8.8.8.8
    • 移动设备 iPhone12

    以下实践将实现在 5G 网络下直通访问家庭中 192.168.100.1 所有服务

    2.1. 公网服务器

    安装 WireGuard 服务

    Bash
    sudo apt update
    sudo apt install wireguard
    

    切换到 /etc/wireguard/ 目录下,生成服务端密钥对

    Bash
    wg genkey | tee server_privatekey | wg pubkey > server_publickey
    

    生成 N100 内网服务器的密钥对,将在稍后的 N100 服务器配置时使用

    Bash
    wg genkey | tee n100_privatekey | wg pubkey > n100_publickey
    

    生成 iPhone 密钥对,将在稍后的 iPhone 客户端配置时使用

    Bash
    wg genkey | tee iPhone12_privatekey | wg pubkey > iPhone12_publickey
    

    此时 /etc/wireguard 下应该具备这些文件:

    Bash
    /etc/wireguard
    ├── iPhone12_privatekey
    ├── iPhone12_publickey
    ├── n100_privatekey
    ├── n100_publickey
    ├── server_privatekey
    └── server_publickey
    

    编辑 /etc/wireguard/wg0.conf 如下:

    INI
    [Interface]
    PrivateKey = <server_publickey>
    Address = 10.0.0.1/24
    ListenPort = 51820
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    
    
    [Peer]
    # N100
    PublicKey = <n100_publickey>
    AllowedIPs = 192.168.100.1/32, 10.0.0.2/32
    
    [Peer]
    # iPhone12
    PublicKey = <iPhone12_publickey>
    AllowedIPs = 10.0.0.3/32
    

    请自行更换上述的所有 publickey 值为刚才生成文件内容值

    完成后,启动服务:

    Bash
    sudo wg-quick up wg0
    sudo systemctl enable wg-quick@wg0
    

    记得防火墙要开放 51820 端口的 udp 权限

    2.2. N100 服务器

    N100 服务器安装的是 Debian12 的服务器,Debian12 已经添加 WireGuard 到仓库中了,安装如下:

    Bash
    sudo apt install wireguard
    

    编辑 /etc/wireguard/wg0.conf 文件如下:

    INI
    [Interface]
    PrivateKey = <n100_privatekey>
    Address = 10.0.0.2/24
    
    [Peer]
    PublicKey = <server_publickey>
    Endpoint = 8.8.8.8:51820
    AllowedIPs = 10.0.0.2/24
    PersistentKeepalive = 25
    

    请自行更换上述的 publickey 和 privatekey 的值

    完成后,启动服务:

    Bash
    sudo wg-quick up wg0
    sudo systemctl enable wg-quick@wg0
    

    此时可以 ping 10.0.0.1 来确认通信是否顺利,也可以从公网服务器上尝试 ping 192.168.100.1 来确认服务是否已连接

    2.3. iPhone12

    由于移动设备编辑配置文件相对不易,可以采用二维码的形式导入,在公网服务器上编辑一份适用于 iPhone12 的配置文件

    先安装配置文件转二维码的工具:

    Bash
    apt install qrencode
    

    编辑 /etc/wireguard/iPhone12.conf,内容如下:

    INI
    [Interface]
    PrivateKey = <iPhone12_privatekey>
    Address = 10.0.0.3/24
    
    [Peer]
    PublicKey = <server_publickey>
    Endpoint = 8.8.8.8:51820
    # 这里表示将允许 iPhone12 访问 192.168.100.1
    AllowedIPs = 192.168.100.0/24
    PersistentKeepalive = 25
    

    将这份配置文件转换为二维码显示:

    Bash
    qrencode /etc/wireguard/iPhone12.conf
    

    在 App Store 中安装 WireGuard,并新建配置,选择二维码形式导入

    扫码导入即可,在导入成功后,切换到 5G 网络下并开启服务,然后试试访问 N100 服务器(192.168.100.1)的服务

    3. 其他

    通过上述的配置,即可实现异地组网,实现在任意网络都可以像访问局域网一样访问到家庭中的网络

    但由于 WireGuard 只是加密流量且加密后的流量特征非常明显,用于跨境组网是很容易被阻断的,所以 WireGuard 只适用于国内中转服务器进行组网



沪ICP备19023445号-2号
友情链接