WireGuard 配置

最近在进行家庭网络改造时,有需要随时可以访问家庭局域网的需求,因而学习如何配置 WireGuard 。。。


前置

家庭网络中 debian 作为服务器,个人 mac 作为客户端进行连接。 注:WireGuard 是对等VPN,不使用C/S模型。

debian 安装 WireGuard

1
2
sudo apt update
sudo apt install wireguard

mac 安装 WireGuard

1
brew install wireguard-tools

配置

wgwg-quick命令行可以快速配置和管理WG网络。 WG网络中的每个设备[peer]都需要具有公钥[publickey]和私钥[privatekey];预共享密钥[sharekey]对于整个网络是可选项,预共享密钥只需要生成一次,然后每个设备的预共享密钥是相同的。

配置 debian

  1. 创建配置密钥

    1
    2
    3
    wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
    wg genpsk > /etc/wireguard/sharekey # opt
    sudo vim /etc/wireguard/wg0.conf

    复制以下内容到 /etc/wireguard/wg0.conf文件中,注意替换 ens192

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Interface]
    Address = 10.0.0.1/24
    ListenPort = 51820
    PrivateKey = {{SERVER_PRIVATE_KEY}}
    SaveConfig = true
    PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
    PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE
    [Peer]
    PresharedKey = {{sharekey}}

    Interface 就是定义了当前设备在网络中的 AddressListenPort, SERVER_PRIVATE_KEY 是前面生成的 privatekey。
    替换ens192的字符串可以通过 ip -o -4 route show to default | awk '{print $5}'查找到当前联网的接口。

  2. 启动服务

    1
    sudo wg-quick up wg0

    该命令显示信息

    1
    2
    3
    4
    5
    [#] ip link add wg0 type wireguard
    [#] wg setconf wg0 /dev/fd/63
    [#] ip -4 address add 10.0.0.1/24 dev wg0
    [#] ip link set mtu 1420 up dev wg0
    [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE
  3. 检查服务

    1
    sudo wg show wg0

    该命令显示信息

    1
    2
    3
    4
    interface: wg0
    public key: ****************
    private key: (hidden)
    listening port: 51820
  4. 设置开机自启动

    1
    sudo systemctl enable wg-quick@wg0
  5. 配置IP转发

    1
    sudo vim /etc/sysctl.conf

    添加或者取消注释

    1
    net.ipv4.ip_forward=1

    然后启动属性

    1
    sudo sysctl -p

配置 mbp

  1. 生成公私钥

    1
    2
    wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
    sudo vim /etc/wireguard/wg0.conf

    添加以下内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Interface]
    PrivateKey = CLIENT_PRIVATE_KEY #mbp生成的私钥
    Address = 10.0.0.2/24

    [Peer]
    PublicKey = SERVER_PUBLIC_KEY # debian端生成的公钥
    Endpoint = SERVER_IP_ADDRESS:51820 # debian 对应的公网ip
    PresharedKey = sharekey # debian 端生成的预共享密钥
    AllowedIPs = 0.0.0.0/0
  2. 启动服务

    1
    sudo wg-quick up wg0

将mbp加入到debian中

1
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

关闭WG

1
sudo wg-quick down wg0

安全

在 mbp 和 debian 中将文件权限设置正确

1
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

常见问题

  • debian 和 mbp 的WG都正常启动,相互之间可以ping到对方,但是无法正常上网.
    解决方法:debian 和 mbp 都可以ping到对方,说明WG网络建立完成,无法上网原因很可能是 debian 端 ip转发 不成功。
    1. 首先通过sysctl net.ipv4.ip_forward检查 ip转发是否开启,如果等于 1 说明已经开启,否则 sysctl net.ipv4.ip_forward=1 来临时开启。
    2. 通过sudo iptables -t filter -L FORWARD检查policy是否为ACCEPT,如果policy是DROP,则根据前文配置ip转发后重启机器,再检查policy状态。