通过Wireguard可以将广域网上的主机连接起来,形成一个局域网。只需要有一台具有固定公网IP的服务器,就可以将其作为我们搭建的局域网的中心节点,让其他的主机(不论是否有公网IP,不论是否在NAT内),都通过这个中心节点和彼此相连。由此就构建了一个中心辐射型的局域网,实现了内网穿透等功能。
- Docker容器通信
WireGuard还可用于Docker容器之间的通信。在Docker环境中,容器之间的网络通信是一个重要的问题。WireGuard通过提供一种安全的通信方式,能够在不同容器之间建立一个加密的网络连接,从而保障数据的安全传输。这对于需要在不同容器间安全共享数据的应用尤为重要。
1.3 WireGuard原理
WireGuard 是一种在第 3 层(网络层)运行的安全网络隧道,与传统的 VPN 解决方案(如 IPsec 和 OpenVPN)相比,它的设计更安全、性能更高且更易于使用。它是作为 Linux 内核虚拟网络接口实现的,基于安全隧道的基本原理:将peer的公钥与隧道源 IP 地址关联。
相关术语:
- Peer/Node/Device
连接到VPN 并为自己注册一个VPN子网地址(如 192.0.2.3)的主机。还可以通过使用逗号分隔的 CIDR 指定子网范围,为其自身地址以外的 IP 地址选择路由。
- 中继服务器(Bounce Server)
一个公网可达的peer,可以将流量中继到
NAT
后面的其他peer。Bounce Server
并不是特殊的节点,它和其他peer一样,唯一的区别是它有公网 IP,并且开启了内核级别的 IP 转发,可以将 威屁恩 的流量转发到其他客户端。
- 子网(Subnet)
一组私有 IP,例如
192.0.2.1-255
或192.168.1.1/24
,一般在 NAT 后面,例如办公室局域网或家庭网络。
- CIDR 表示法
CIDR,即无类域间路由(Classless Inter-Domain Routing),是一种用于对IP地址进行灵活表示和分配的标准。
- NAT
子网的私有 IP 地址由路由器提供,通过公网无法直接访问私有子网设备,需要通过 NAT 做网络地址转换。路由器会跟踪发出的连接,并将响应转发到正确的内部 IP。
- 公开端点(Public Endpoint)
节点的公网 IP 地址:端口,例如
123.124.125.126:1234
,或者直接使用域名some.domain.tld:1234
。如果peer节点不在同一子网中,那么节点的公开端点必须使用公网 IP 地址。
- 私钥(Private key)
单个节点的 WireGuard 私钥,生成方法是:
wg genkey > example.key
。
- 公钥(Public key)
单个节点的 WireGuard 公钥,生成方式为:
wg pubkey < example.key > example.key.pub
。
- DNS
域名服务器,用于将域名解析为 VPN 客户端的 IP,不让 DNS请求泄漏到 VPN 之外。
主要功能和原理如下
WireGuard 通过添加一个(或多个)网络接口来工