赞
踩
正文共:1888 字 10 图,预估阅读时间:2 分钟
我们前面在介绍Wireguard时(使用8条命令即可完成的VPN配置!CentOS快速配置WireGuard全互联组网),Linux系统下是通过命令配置的,格式如下:
wg set wg0 peer ZTwqy6eA2exFjIp4Gqll57FFu99ND97wRCkPv0ZNGVU= allowed-ips 10.1.1.2/32 endpoint 12.1.1.2:53109
然后在Windows下配置Wireguard时(简单测试一下Windows和Linux之间WireGuard的对接情况),我们发现它竟然需要使用配置文件,因为没有配置指导手册,所以摸索了半天才搞了一个大概的格式出来,像下图这样:
其实如果从正常使用的角度来看,绝对是配置文件更方便一些。那完整的配置文件长啥样呢?
活人还能让尿憋死了?没有配置指导,那就自己手攒一个!
从Windows的配置文件中,我们大概可以发现,配置文件分为[Interface]和[Peer]两个部分。通过配置过程来看,[Interface]指的是Wireguard的虚拟接口,也就是标识本地身份的,一般只有一个;但是可以和多个邻居建立关系,所以[Peer]部分可以配置多个。
[Interface]配置
[Interface]即本地的接口配置,一般是手工创建的虚拟接口,推荐的接口名称为“wg0”或“wgvpn0”。[Interface]部分可能包含以下内容:
PrivateKey:必配项,一般是通过wg-genkey生成的base64私钥。
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort:可选项,用于指定建立Wireguard隧道时本地所侦听的端口,配置范围为0-65535,建议配置10000以上的端口。默认是没有指定的,此时程序会随机选择一个端口,所以程序启动时大家会看到有一个默认端口,建立连接时需要匹配到对应的端口,不算方便,建议指定。
ListenPort = 10086
Address:可选项,用于指定分配给Wireguard 接口的IP地址,支持配置CIDR掩码,就像Windows中配置的那样。
Address = 10.1.1.8/24
DNS:可选项,用于指定分配给Wireguard 接口的DNS服务器的IP地址,可以通过逗号“,”进行分隔来配置多个DNS服务器。
DNS = 114.114.114.114,8.8.8.8
MTU:可选项,用于指定接口的最大传输单元MTU。默认情况下,MTU会根据端点地址或系统默认路由自动确定。如果有特殊需求,可以手工指定MTU的值,一般用于减少报文在传输过程中被分片。
MTU = 1350
Table:可选项,当系统中有多个路由表时,用于控制要添加路由的路由表。默认未配置,即默认配置为“auto”,表示将路由添加到默认表中,并启用[Peer]默认路由的特殊处理;如果配置为“off”,表示完全禁用添加路由的功能。
Table = 1234
PreUp、PostUp、PreDown、PostDown:可选项,用于配置在使能/去使能接口之前/之后需要执行的脚本。常用于配置自定义DNS选项或防火墙规则,如果指定了多条命令,这些命令将按照配置顺序依次执行。
- PostUp = ip rule add ipproto tcp dport 22
- PreDown = ip rule delete ipproto tcp dport 22
SaveConfig:可选项,用于设置在关闭Wireguard接口时,是否将当前状态保存到配置文件中。默认未配置,如果需要启用此功能,需要设置为“true”。
SaveConfig = true
[Peer]配置
[Peer]部分就是指定Wireguard邻居的相关信息,可能包含以下内容:
PublicKey:必配项,一般是通过wg pubkey从私钥计算的base64公钥,用于验证邻居身份信息。
PublicKey = GtL7fZc/bLnqZldpVofMCD6hDjrK28SsdLxevJ+qtKU=
PresharedKey:可选项,一般是通过wg-genpsk生成的base64预共享密钥。此选项添加了一个额外的对称密钥加密层,以混合到现有的公钥加密中,以实现后量子抗性。
PresharedKey = /UwcSPg38hW/D9Y3tcS1FOV0K1wuURMbS0sesJEP5ak=
AllowedIPs:必配项,用于配置允许邻居的传入流量,以及本地要发送给对端的发送流量。格式为以逗号分隔的包含CIDR掩码的IP地址列表,也可以配置为默认路由,匹配所有IPv4地址指定为0.0.0.0/0,匹配所有IPv6地址指定为::/0。
AllowedIPs = 10.192.172.0/24,192.168.0.0/16
Endpoint:可选项,用于指定对端邻居的IP地址或主机名,后跟冒号“:”,然后是端口号。
Endpoint = 100.1.2.34:1234
PersistentKeepalive:可选项,用于配置和对端邻居的保活报文的发送间隔,配置范围为1-65535。当端点位于有状态防火墙或NAT设备后方时,为了保持会话的持续连接,可以通过配置保活报文向对端发送经过身份验证的空数据包来实现。默认处于关闭状态,即值为“0”或“off”,如果要使用,请配置为1-65535之间的值。
PersistentKeepalive = 30
配置举例
掌握了前面的配置精髓之后,我们来尝试配置一下两台设备之间的互联。
首先,作为前提条件,我们需要为Linux主机增加一个虚拟网卡,并配置一个IP地址。
- ip link add dev wg0 type wireguard
- ip address add dev wg0 10.1.1.2/24
- ip link set up dev wg0
WireGuard需要base64编码的公钥和私钥,可以使用wg程序自动生成:
- umask 777
- wg genkey > privatekey
- wg pubkey < privatekey > publickey
拿到公钥和私钥,我们需要记录这两个信息,私钥是配置在本端的[Interface]配置中的,公钥是配置在对端的[Peer]配置中的。
接下来我们想让两台主机分别通过10.1.1.0/24网段进行互通,端口号使用10086。那我们可以将配置文件简单配置成如下所示:
- [Interface]
- PrivateKey = uMTJJ6LZKwHGfdUUtQdGt5d/qCey5xRZi2MFG27HQ0E=
- ListenPort = 10086
- [Peer]
- PublicKey = reMkRBC1wrBqPOrqDRYVNGx4RBLwM2iYCKYzvC7lbCg=
- Endpoint = 192.168.1.141:10086
- AllowedIPs = 10.1.1.0/24
对应的,对端的Wireguard配置如下:
- [Interface]
- PrivateKey = 2DOnuYIGbLMplHdd3TjwUjbZGQfPC6kxbp+XE+Z1FlM=
- ListenPort = 10086
- [Peer]
- PublicKey = Qldp06YMySdq77rT+JboZAAicv0JZtuMxCl2Eb79yj8=
- Endpoint = 192.168.1.142:10086
- AllowedIPs = 10.1.1.0/24
两端都配置完成之后,就可以配置调用生效了。
wg setconf wg0 wg0.conf
可以看到,配置前后的显示存在明显差异;再配置好另一台终端,就可以测试访问了。
此时,我们查看一下设备的路由表信息。
可以看到,只有10.1.1.0/24这一条路由,但是,这条路由是在创建好网卡之后就存在的。那我们测试一下能不能通过手工添加路由的方式来访问对端主机的其他地址。
可以看到,回应的有报错信息,那我们把路由写到配置文件里面。
可以看到,现在就可以访问了,所以不能通过手工添加路由的方式来互访,需要写入到配置文件中。
长按二维码
关注我们吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。