配置

1.WireGuard 的主端配置

首先我们创建一个 WireGuard 配置文件

  1. vim /etc/wireguard/wg0.conf
  1. [Interface]
  2. ListenPort = 8001
  3. PrivateKey = 填写本机的 privatekey 内容
  4. [Peer]
  5. PublicKey = 填写对端的 publickey 内容
  6. AllowedIPs = 172.16.1.12/32,172.16.12.0/24
  7. Endpoint = another.domain.name:8002
  8. PersistentKeepalive = 25

然后我们需要创建一个网卡配置文件(此配置等价于移动客户端的 Interface 配置)

  1. vim /etc/sysconfig/network-scripts/ifcfg-wg0
  1. DEVICE=wg0
  2. TYPE=wireguard
  3. IPADDR=172.16.1.11
  4. NETMASK=255.255.255.0
  5. ONBOOT=yes
  6. NAME=wg0
  7. ZONE=public

接着我们需要创建一个网卡路由文件(由于对方存在 172.16.12.0/24 这个 IP 地址段的前提下)

  1. vim /etc/sysconfig/network-scripts/route-wg0
  1. 172.16.12.0/24 via 172.16.1.12 dev wg0

最后我们需要允许本机的 NAT 转换,并允许系统进行 IPV4 转发

  1. firewall-cmd --add-masquerade --zone=public --permanent
  2. firewall-cmd --reload
  3. sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
  4. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  5. sysctl -p

2.WireGuard 的对端配置

在对端设备,我们依然需要创建一个 WireGuard 配置文件

  1. vim /etc/wireguard/wg0.conf
  1. [Interface]
  2. ListenPort = 8002
  3. PrivateKey = 填写本机的 privatekey 内容
  4. DNS = 1.1.1.1 #强制本机使用 DNS 服务器
  5. MTU = 1300 #强制本机使用指定 MTU 值
  6. [Peer]
  7. PublicKey = 填写对端的 publickey 内容
  8. AllowedIPs = 172.16.1.11/32,172.16.11.0/24
  9. Endpoint = another.domain.name:8001
  10. PersistentKeepalive = 25

然后我们需要创建一个网卡配置文件

  1. vim /etc/sysconfig/network-scripts/ifcfg-wg0
  1. DEVICE=wg0
  2. TYPE=wireguard
  3. IPADDR=172.16.1.12
  4. NETMASK=255.255.255.0
  5. ONBOOT=yes
  6. NAME=wg0
  7. ZONE=public

接着我们需要创建一个网卡路由文件(假设对方存在 172.16.11.0/24 这个 IP 地址段的前提下)

  1. vim /etc/sysconfig/network-scripts/route-wg0
  1. 172.16.11.0/24 via 172.16.1.11 dev wg0

最后我们需要允许本机的 NAT 转换,并允许系统进行 IPV4 转发

  1. firewall-cmd --add-masquerade --zone=public --permanent
  2. firewall-cmd --reload
  3. sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
  4. echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

3.WireGuard 的自动启动

第一种方案你需要编辑并添加开机启动项(手动模式推荐)

  1. vim /etc/rc.local
  1. ip link add dev wg0 type wireguard
  2. wg setconf wg0 /etc/wireguard/wg0.conf
  3. systemctl restart network

注意 CentOS7 默认此文件没有执行权限,你需要赋予执行权限

  1. chmod +x /etc/rc.local

做完操作后你可以使用开机启动项的三条命令直接启用 WireGuard 进程
第二种方案则是需要在 Interface 里写入以下信息(注意替换 eth0 为你的互联网出口网卡,并且如果使用 wg-quick 则不需要本例 PostUp 和 PostDown 两个 iptables 命令)

  1. Address = 172.16.11.0/24
  2. PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  3. PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

注意这样启动后网卡本身是没有防火墙区域的,你需要手动绑定一个区域

  1. firewall-cmd --zone=work --add-interface=wg0 --permanent
  2. firewall-cmd --reload

然后设置 systemd 自动启动即可

  1. systemctl enable NetworkManager-wait-online.service
  2. sed -i 's/--timeout=30/--timeout=10/g' /usr/lib/systemd/system/NetworkManager-wait-online.service && systemctl daemon-reload
  3. systemctl enable wg-quick@wg0
  4. systemctl start wg-quick@wg0

WireGuard 配置说明

  1. [Interface]
  2. ListenPort = 8002 #本机监听 WireGuard 端口
  3. PrivateKey = 填写本机的 privatekey 内容 #本机加密私钥
  4. DNS = 1.1.1.1 #强制本机使用 DNS 服务器
  5. MTU = 1300 #强制本机使用指定 MTU 值
  6. #Table = 100 #强制本机将注入系统的路由的 table 指定为 100 ( 系统默认为 255 和 254 )
  7. #PostUp = ip rule add from 10.10.1.0/24 table 100 ; ip rule add from 10.10.2.0/24 table 100
  8. #PreDown = ip rule delete from 10.10.1.0/24 table 100 ; ip rule delete from 10.10.2.0/24 table 100
  9. [Peer]
  10. PublicKey = 填写对端的 publickey 内容 #本机加密的对端公钥(加密后数据仅对端可以解密)
  11. AllowedIPs = 172.16.1.11/32 #本机允许的对端设备的 IP 地址段,其实就是在本机中这个虚拟网卡对端都有哪些设备 IP 地址(多 peer 不可重复)
  12. Endpoint = another.domain.name:8001 #对端 WireGuard 的外部 IP(可以有一侧的 IP 地址是虚假的公网 IP)
  13. PersistentKeepalive = 25 #当会话存在一端 IP 地址为 NAT 地址或虚假公网 IP 地址时,由该方阶段性每 25 秒发送 keepalive 报文保持会话的可用性,防止被设备终止。

在上方基础上,额外要注意的是
1、如果你存在多个 [Peer] ,则在下面直接增加一个新的 [Peer] 栏目
2、如果多个 Peer 存在不同的 IP,请不要让 AllowedIPs 存在重叠的 IP 地址段(比如配置多个相同/24 只有一个生效)
3、Endpoint 既支持以域名的方式访问,也支持以 IP 的方式访问。
4、会话链接的建立只要保证两端数据在一台设备上成功协商,即使有一端 IP 地址后期变更过也不会影响 VPN 的稳定性。
5、使用命令 wg 可以看到当前服务的运行情况。
6、如果你是本来打算连服务器的移动端,则在配置中你需要将移动端的 “AllowedIPs =” 补写一条内容 0.0.0.0/0,::0 以允许所有流量
7、前面标注 # 的三条内容,作为 iproute2 的使用方式,通过指定路由条目的 table 与 ip rule 联动控制策略流量转发。
8、PreUp,PostUp,PreDown,PostDown 这四个命令参数,是作为 wg-quick 快速设置/删除接口之前/之后由 bash(1)执行的四条命令,常用于配置自定义 DNS 或防火墙规则。 特殊字符串 %i 作为变量替代所控制的 INTERFACE 配置名。 每个命令参数都支持多条命令,参数内的多条命令将按前后顺序依次执行。

WireGuard 的快速启动配置文件

  1. vim /etc/wireguard/myserver.conf
  1. [Interface]
  2. Address = 172.16.11.0/24
  3. #PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  4. #PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
  5. ListenPort = 8000
  6. PrivateKey = 填写一份 privatekey 内容
  7. [Peer]
  8. PublicKey = 填写一份 publicKey 内容
  9. AllowedIPs = 172.16.11.1/32

此配置完毕后 配置文件名为 myserver ,可以直接输入 wg-quick up myserver 启动进程
(如果启动失败可以先 down 一次再 up 一次)
(如果你是 iptables 则使用两条 iptables 命令,去掉前面的#并记得修改 eth0 为当前系统公网网卡即可)
然后将新设备绑定到指定区域中,并配置好地址转换

  1. firewall-cmd --zone=external --add-interface=myserver --permanent
  2. firewall-cmd --zone=external --add-masquerade --permanent
  3. firewall-cmd --reload

最后一样配置开机启动即可(注意命令加入的位置,在此将标准配置版的 WireGuard 进程予以注释,如果同时使用请删掉 # 字符。)

  1. systemctl enable NetworkManager-wait-online.service
  2. sed -i 's/--timeout=30/--timeout=10/g' /usr/lib/systemd/system/NetworkManager-wait-online.service && systemctl daemon-reload
  3. systemctl enable wg-quick@myserver
  4. systemctl start wg-quick@myserver