原文地址——https://fonzcci.cn/#simple-network-interface
简单网络接口
WireGuard 的工作原理是添加一个(或多个)网络接口,如eth0
或wlan0
,称为wg0
(或wg1
、wg2
、等)。然后可以使用或wg3
正常配置此网络接口,使用或为其添加和删除路由,等等,所有普通的网络实用程序都可以使用。使用工具配置接口的特定 WireGuard 方面。此接口充当隧道接口。ifconfig(8)
ip-address(8)
route(8)
ip-route(8)
wg(8)
WireGuard 将隧道 IP 地址与公钥和远程端点关联起来。当接口向对等方发送数据包时,它会执行以下操作:
- 此数据包是发往 192.168.30.8 的。那是哪个对等点?让我看看……好的,它是发往对等点的
ABCDEFGH
。(或者,如果它不是发往任何已配置的对等点,则丢弃该数据包。) ABCDEFGH
使用对等方的公钥加密整个 IP 数据包。- 对等体的远程端点是什么
ABCDEFGH
?让我看看...好的,端点是主机 216.58.211.110 上的 UDP 端口 53133。 - 使用 UDP 将步骤 2 中的加密字节通过 Internet 发送到 216.58.211.110:53133。
当接口接收到数据包时,会发生以下情况:
- 我刚刚从主机 98.139.183.24 上的 UDP 端口 7361 收到一个数据包。让我们解密它!
- 它为对等体正确解密和验证
LMNOPQRS
。好的,让我们记住,对等体LMNOPQRS
最近的 Internet 端点是 98.139.183.24:7361,使用 UDP。 - 解密后,纯文本数据包来自 192.168.43.89。对方是否
LMNOPQRS
可以以 192.168.43.89 的身份向我们发送数据包? - 如果是,则在接口上接受该数据包。如果不是,则丢弃它。
在幕后,人们利用最先进的加密技术,进行着许多工作以提供适当的隐私性、真实性和完美的前向保密性。
密钥路由
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 列表相匹配。例如,当服务器从对等体收到数据包时gN65BkIK...
,在解密和验证后,如果其源 IP 为 10.10.10.230,则允许其进入接口;否则将被丢弃。
在服务器配置中,当网络接口想要将数据包发送到对等方(客户端)时,它会查看该数据包的目标 IP,并将其与每个对等方的允许 IP 列表进行比较,以确定将其发送到哪个对等方。例如,如果要求网络接口发送目标 IP 为 10.10.10.230 的数据包,它将使用对等方的公钥对其进行加密gN65BkIK...
,然后将其发送到该对等方最近的 Internet 端点。
在客户端配置中,其单个对等端(服务器)将能够使用任何源IP 向网络接口发送数据包(因为 0.0.0.0/0 是通配符)。例如,当从对等端收到数据包时HIgo9xNz...
,如果数据包使用任何源 IP 正确解密和验证,则允许其进入接口;否则将被丢弃。
在客户端配置中,当网络接口想要向其单个对等体(服务器)发送数据包时,它将为具有任何目标 IP 地址的单个对等体加密数据包(因为 0.0.0.0/0 是通配符)。例如,如果要求网络接口发送具有任何目标 IP 的数据包,它将使用单个对等体的公钥对其进行加密HIgo9xNz...
,然后将其发送到单个对等体最近的 Internet 端点。
换句话说,当发送数据包时,允许的 IP 列表表现为一种路由表,而当接收数据包时,允许的 IP 列表表现为一种访问控制列表。
这就是我们所说的加密密钥路由表:公钥和允许的 IP 的简单关联。
对于任何字段,都可以使用 IPv4 和 IPv6 的任意组合。如有必要,WireGuard 完全有能力将一个封装在另一个内。
由于在 WireGuard 接口上发送的所有数据包都经过加密和验证,并且对等方的身份与对等方允许的 IP 地址之间存在紧密的联系,因此系统管理员不需要复杂的防火墙扩展(例如 IPsec 的情况),而是只需匹配“它来自这个 IP 吗?在这个接口上?”,并确保它是一个安全且真实的数据包。这大大简化了网络管理和访问控制,并提供了更大的保证,确保您的 iptables 规则确实在执行您希望它们执行的操作。
标签:公钥,IP,接口,工作,WireGuard,原理,数据包,网络接口 From: https://www.cnblogs.com/goding/p/18550227