快速开始

首先,你需要确保自己对概念概述有充分的了解,然后安装 WireGuard。之后,请继续阅读。

并排视频

在详细解释实际的命令之前,首先观察两个并排配置的对等体使用这些命令可能会非常有启发性:

或者单独来看,单个配置如下:

wg(8) 演练

命令行界面

可以通过添加新接口ip-link(8),该接口应自动处理模块加载:

# ip link add dev wg0 type wireguard

(非 Linux 用户将改写为wireguard-go wg0。)

ifconfig(8)可以使用或分配 IP 地址和对等体ip-address(8)

# ip address add dev wg0 192.168.2.1/24

或者,如果总共只有两个同龄人,那么这样的事情可能更可取:

# ip address add dev wg0 192.168.2.1 peer 192.168.2.2

可以使用附带的实用程序来配置接口的密钥和对等端点wg(8)

# wg setconf wg0 myconfig.conf

或者

# wg set wg0 listen-port 51820 private-key /path/to/private-key peer ABCDEF... allowed-ips 192.168.88.0/24 endpoint 209.202.254.14:8172

ifconfig(8)最后,可以使用或激活界面ip-link(8)

# ip link set up dev wg0

还有wg showwg showconf命令,用于查看当前配置。wg不带参数的调用默认为wg show在所有 WireGuard 接口上调用。

wg(8) 工具

请参阅手册页以wg(8)获取更多信息。

大部分的常规启动和拆卸操作wg(8)都可以通过所包含的工具ip(8)自动完成wg-quick(8)

wg-quick(8) 工具

密钥生成

WireGuard 需要 base64 编码的公钥和私钥。可以使用以下wg(8)实用程序生成这些密钥:

$ umask 077
$ wg genkey > privatekey

这将privatekey在标准输出上创建包含新私钥的内容。

然后你就可以从你的私钥派生出你的公钥:

$ wg pubkey < privatekey > publickey

privatekey将从标准输入读取并将相应的公钥写入publickey标准输出。

当然,你可以一次性完成所有操作:

$ wg genkey | tee privatekey | wg pubkey > publickey

NAT 和防火墙穿越持久性

默认情况下,WireGuard 在不使用时会尽量保持安静;它不是一种繁琐的协议。在大多数情况下,它只在对等方希望发送数据包时传输数据。当它没有被要求发送数据包时,它会停止发送数据包,直到再次被要求。在大多数配置中,这都运行良好。但是,当对等方位于 NAT 或防火墙后面时,它可能希望即使没有发送任何数据包也能接收传入的数据包。由于 NAT 和状态防火墙会跟踪“连接”,因此如果 NAT 或防火墙后面的对等方希望接收传入的数据包,他必须通过定期发送保持活动数据包来保持 NAT/防火墙映射有效。这称为持久保持活动。启用此选项后,每隔几秒就会向服务器端点发送一次保持活动数据包适用于各种防火墙的合理间隔是 25 秒。将其设置为 0 会关闭该功能,这是默认设置,因为大多数用户不需要此功能,并且它使 WireGuard 稍微更繁琐一些。可以通过PersistentKeepalive =在配置文件中向对等点添加字段或persistent-keepalive在命令行中进行设置来指定此功能。如果您不需要此功能,请不要启用它。但是如果您位于 NAT 或防火墙后面,并且希望在网络流量消失后很长时间内接收传入连接,则此选项将使“连接”在 NAT 眼中保持打开状态。

演示服务器

安装WireGuard后,如果您想尝试通过 WireGuard 发送一些数据包,您可以仅出于测试目的使用 中的脚本contrib/ncat-client-server/client.sh

$ sudo contrib/examples/ncat-client-server/client.sh

这将自动设置接口wg0,通过非常不安全的传输,仅适用于演示目的。然后您可以尝试加载隐藏的网站或发送 ping:

$ chromium http://192.168.4.1
$ ping 192.168.4.1

如果您想重定向互联网流量,您可以这样运行:

$ sudo contrib/examples/ncat-client-server/client.sh default-route
$ curl zx2c4.com/ip
163.172.161.0
demo.wireguard.com
curl/7.49.1

通过连接到该服务器,您承认您不会将其用于任何滥用或非法目的,并且您的流量可能会受到监控。

调试信息

如果您正在使用 Linux 内核模块,并且您的内核支持动态调试,则可以通过为模块启用动态调试来获得有用的运行时输出:

# modprobe wireguard && echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

如果您使用用户空间实现,请设置环境变量export LOG_LEVEL=verbose