0%

WireGuard 基础配置

WireGuard 的核心是一个称为Cryptokey Routing的概念,它的工作原理是将公钥与隧道内允许的隧道 IP 地址列表相关联。每个网络接口都有一个私钥和一个对等点列表。每个对等点都有一个公钥。公钥短而简单,供对等方用来相互验证。它们可以通过任何带外方法传递以在配置文件中使用,类似于如何将其 SSH 公钥发送给朋友以访问 shell 服务器。

例如,服务器计算机可能具有以下配置:

[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
ListenPort = 51820

[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.192.122.3/32, 10.192.124.1/24

[Peer]
PublicKey = TrMvSoP4jYQlY6RIzBgbssQqY3vxI2Pi+y71lOWWXX0=
AllowedIPs = 10.192.122.4/32, 192.168.0.0/16

[Peer]
PublicKey = gN65BkIKy1eCE9pP1wdc8ROUtkHLF2PfAqYdyYBz6EA=
AllowedIPs = 10.10.10.230/32

客户端计算机可能具有以下更简单的配置:

[Interface]
PrivateKey = gI6EdUSYvn8ugXOt8QQD6Yc+JyiZxIhp3GInSWRfWGE=
ListenPort = 21841

[Peer]
PublicKey = HIgo9xNzJMWLKASShiTqIybxZ0U3wGLiUeJ1PKf8ykw=
Endpoint = 192.95.5.69:51820
AllowedIPs = 0.0.0.0/0

在服务器配置中,每个对等方(客户端)将能够向网络接口发送数据包,其源 IP 与其对应的允许 IP 列表相匹配。例如,当服务器从 peer 接收到一个数据包时gN65BkIK…,经过解密和认证,如果它的源 IP 是 10.10.10.230,那么它就被允许进入接口;否则它被丢弃。

在服务器配置中,当网络接口想要向对等方(客户端)发送数据包时,它会查看该数据包的目标 IP 并将其与每个对等方的允许 IP 列表进行比较,以查看将其发送到哪个对等方。例如,如果网络接口被要求发送目标 IP 为 10.10.10.230 的数据包,它将使用 peer 的公钥对其进行加密gN65BkIK…,然后将其发送到该对等方的最新 Internet 端点。

在客户端配置,其单个对等(服务器)将能够将数据包发送到所述网络接口与任何源IP(因为0.0.0.0/0是一个通配符)。例如,当从 peer 接收到一个数据包时HIgo9xNz…,如果它使用任何源 IP 正确解密和验证,那么它就被允许进入接口;否则它被丢弃。

在客户端配置中,当网络接口想要向其单个对等方(服务器)发送数据包时,它将为具有任何目标 IP 地址的单个对等方加密数据包(因为 0.0.0.0/0 是通配符)。例如,如果网络接口被要求发送具有任何目标 IP 的数据包,它将使用单个对等方的公钥对其进行加密HIgo9xNz…,然后将其发送到单个对等方最近的 Internet 端点。

换句话说,在发送数据包时,允许的 IP 列表表现为一种路由表,而在接收数据包时,允许的 IP 列表表现为一种访问控制列表。

这就是我们所说的加密密钥路由表:公钥和允许的 IP 的简单关联。

对于任何字段,可以使用 IPv4 和 IPv6 的任意组合。如有必要,WireGuard 完全能够将一个封装在另一个内部。

因为在 WireGuard 接口上发送的所有数据包都经过加密和身份验证,并且由于对等方的身份和对等方允许的 IP 地址之间存在如此紧密的耦合,所以系统管理员不需要复杂的防火墙扩展,例如在这种情况下IPsec,而是他们可以简单地匹配“它来自这个 IP?在这个接口上?”,并确保它是一个安全和真实的数据包。这极大地简化了网络管理和访问控制,并提供了更多的保证,即您的 iptables 规则实际上正在执行您希望它们执行的操作。

https://www.wireguard.com/#cryptokey-routing

  • 本文作者: 6x
  • 本文链接: https://6xyun.cn/article/120
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!