Skip to content

Wire Guard的搭建

约 812 字大约 3 分钟

VPN

2024-03-02

WireGuard是一种现代、开源的VPN(虚拟专用网络)协议,旨在提供更高效、更安全且更简单的网络隧道解决方案。它由Jason Donenfeld于2015年开发,2020年被正式集成到Linux内核,现已成为下一代VPN协议的代表。

⚙极简主义设计

  • ​​WireGuard的代码库仅约4000行(远少于OpenVPN的10万行),通过精简设计降低潜在漏洞风险,同时简化审计和维护流程。其配置通常只需几行命令,类似SSH密钥交换机制。
  • 安全性优先​​默认采用​​现代密码学套件​​:
    • 密钥交换:Curve25519椭圆曲线算法
    • 数据加密:ChaCha20(对称加密)
    • 认证与完整性:Poly1305(消息认证码)固定算法组合避免传统VPN协议因算法协商导致的安全风险,且支持未来抗量子加密(如Kyber)。
    • ​​作为Linux内核模块运行,减少用户态与内核态切换开销,显著提升吞吐量。

🔧工作原理

  1. ​​加密密钥路由(Cryptokey Routing)​​每个设备通过公钥(如wg pubkey生成)标识,并与允许通信的IP地址绑定。数据包传输流程:
    • ​​发送端​​:根据目标IP匹配对等节点公钥 → 加密数据包 → 通过UDP发送至对端最新端点。
    • 接收端​​:解密验证数据包 → 校验源IP合法性 → 接受或丢弃。
  2. 动态密钥管理​​基于Noise协议框架实现​​完美前向保密(PFS)​​:
    • 会话密钥每分钟动态轮换
    • 即使长期密钥泄露,历史通信仍安全
  3. NAT穿透与漫游支持
    • 内置UDP打洞能力,解决NAT后设备互通问题
    • 自动处理网络切换(如Wi-Fi转蜂窝网络),无需重连,适合移动环境。

Wire Guard的搭建(Linux)

快速搭建wireguard的服务端与客户端。

Server

安装

# Ubuntu
sudo apt install wireguard

# redhat
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
sudo yum install kmod-wireguard wireguard-tools

配置

  1. 创建服务端公私钥

    wg genkey | tee privatekey | wg pubkey > publickey
  2. 创建/etc/wireguard/wg0.conf文件

    [Interface]
    Address = 10.8.0.1/24          # 服务端虚拟IP(客户端将使用此网段)
    PrivateKey = <SERVER_PRIVATE_KEY>  # 替换为步骤1生成的私钥
    ListenPort = 51820              # 监听端口(确保防火墙开放此UDP端口)
    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
    SaveConfig = true               # 动态客户端更改时自动保存配置
    
    [Peer]
    PublicKey = <CLIENT_PUBLIC_KEY>  
    AllowedIPs = 10.8.0.2/32        # 固定分配此IP给客户端
  3. 运行wg

    wg-quick up wg0
    
    # 查看运行情况
    wg show

Client

配置

  1. 创建客户端公私钥

    wg genkey | tee privatekey | wg pubkey > publickey
  2. 创建客户端/etc/wireguard/wg0.conf配制文件

    [Interface]
    PrivateKey = <客户端私>  # 替换生成的私钥
    Address = 10.8.0.2/24     # 使用与服务器同网段的IP
    DNS = 8.8.8.8             # 防止DNS泄漏
    
    [Peer]
    PublicKey = <服务器公>  # 向服务器管理员索取
    Endpoint = 47.242.82.6:51820  # WG服务器IP和端口
    AllowedIPs = 0.0.0.0/0   # 初始全局路由(后续会覆盖)
    PersistentKeepalive = 25  # 维持NAT连接
  3. 运行

    wg-quick up wg0
    
    # 查看运行情况
    wg show