我有一个公共 IPv6 地址,但没有 IPv4。因此,我想通过具有公共 IPv4 和 IPv6 地址的 VPS 路由流量。我的问题是如何使用 Wireguard 创建这种类型的隧道。从 VPS 到我网络中的设备的隧道不是挑战,而是如何将服务器上的数据包重定向到该隧道。
我做了一些研究,我的方法是这样的。
我的网络设备
[Interface]
Address = <DEVICE IPv6>
PrivateKey = <private key>
ListenPort = <DEVICE PORT>
# Peer to VPS
[Peer]
PublicKey = [PUBLIC KEY VPS]
AllowedIPs = [VPS IPv6]
Endpoint = [VPS IPv6]:[VPS PORT]
虚拟专用服务器
[Interface]
Address = <VPS IPv6>
Address = <VPS IPv4>
PrivateKey = <private key>
ListenPort = <VPS PORT>
# Peer to device
[Peer]
PublicKey = [PUBLIC KEY DEVICE]
Endpoint = [DEVICE IPv6]:[DEVICE PORT]
AllowedIPs = 0.0.0.0/0, ::/0
# Example peer of client
[Peer]
PublicKey = <client public key>
AllowedIPs = 0.0.0.0/0, ::/0
示例客户端
[Interface]
PrivateKey = <private key>
ListenPort = <CLIENT PORT>
[Peer]
PublicKey = [PUBLIC KEY VPS]
Endpoint = [VPS IPv4]:[VPS PORT], [VPS IPv6]:[VPS PORT]
AllowedIPs = 0.0.0.0/0
这可能吗?还是我需要创建两个 WG 接口并在它们之间路由流量?
答案1
听起来你只是希望能够从网络设备连接到示例客户端,反之亦然?如果是这样,那么这是经典的Hub and Spoke WireGuard 场景,以 VPS 为枢纽,以网络设备和示例客户端为辐条。
对于 WireGuard 网络内部的隧道连接,您可以使用 IPv4 或 IPv6 地址 - 它不必与承载隧道连接的数据包的 IP 版本匹配。以下示例使用fd00::/56
WireGuard 网络的 IPv6 地址块;198.51.100.123
作为集线器的公共 IPv4 地址;以及2001:db8:1234:abcd::1
作为集线器的公共 IPv6 地址:
网络设备(IPv6 分支):
# local settings for Network Device
[Interface]
PrivateKey = <Network Device private key>
Address = fd00:0:0:2::1/64
# remote settings for VPS
[Peer]
PublicKey = <VPS public key>
AllowedIPs = fd00::/56
Endpoint = [2001:db8:1234:abcd::1]:51820
PersistentKeepalive = 25
VPS(枢纽):
# local settings for VPS
[Interface]
PrivateKey = <VPS private key>
Address = fd00:0:0:1::1/64
ListenPort = 51820
PreUp = sysctl -w net.ipv6.conf.all.forwarding=1
# remote settings for Network Device
[Peer]
PublicKey = <Network Device public key>
AllowedIPs = fd00:0:0:2::/64
# remote settings for Example Client
[Peer]
PublicKey = <Example Client public key>
AllowedIPs = fd00:0:0:3::/64
示例客户端(IPv4 分支):
# local settings for Example Client
[Interface]
PrivateKey = <Example Client private key>
Address = fd00:0:0:3::1/64
# remote settings for VPS
[Peer]
PublicKey = <VPS public key>
AllowedIPs = fd00::/56
Endpoint = 198.51.100.123:51820
PersistentKeepalive = 25
然后,您可以从网络设备使用示例客户端的 WireGuard IP 地址 访问在示例客户端上运行的 Web 服务器fd00:0:0:3::1
;或者从示例客户端使用网络设备的 WireGuard IP 地址通过 SSH 进入网络设备fd00:0:0:2::1
。