快速开始
首先,你需要确保自己对概念概述有充分的了解,然后安装 WireGuard。之后,请继续阅读。
并排视频
在详细解释实际的命令之前,首先观察两个并排配置的对等体使用这些命令可能会非常有启发性:
或者单独来看,单个配置如下:
命令行界面
可以通过添加新接口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 show
和wg showconf
命令,用于查看当前配置。wg
不带参数的调用默认为wg show
在所有 WireGuard 接口上调用。
大部分的常规启动和拆卸操作wg(8)
都可以通过所包含的工具ip(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
。