(教育目的)
大家好,
实际上,我正在尝试使用 wireguard 创建一个公司网络(员工客户端)。假设它的子网为 10.0.0.0/24。Wireguard 服务器是 Hetzner 云服务器,它肯定有一个公共 IP 地址(客户端可以访问它以建立内部网络),并且它还连接到 Hetzner 私有网络(第 2 层)-假设它的 IP 地址为 192.168.0.0/24(在 ens10 接口上)。
如何从连接到 wireguard vpn 且 wireguard ip 地址为 10.0.0.2/24 的员工客户端访问 192.168.0.0/24 内的所有服务器?
我向你展示我的做法:
客户端隧道文件:
[Interface]
PrivateKey = <CLIENTS-PRIVATE-KEY>
Address = 10.0.0.2/32
[Peer]
PublicKey = <SERVERS-PUBLIC-KEY>
AllowedIPs = 192.168.0.0/24, 10.0.0.0/24
Endpoint = <SERVERS-PUBLIC-IP>:51820
服务器隧道文件:
[Interface]
Address = 10.0.0.1/32
ListenPort = 51820
PrivateKey = <SERVERS-PRIVATE-KEY>
[Peer]
PublicKey = <CLIENTS-PUBLIC-KEY>
AllowedIPs = 192.168.0.0/24, 10.0.0.0/24
我还在 vpn 服务器中启用了 net.ip4.ip_forward 以将请求转发到 192.168.0.0/24 子网。
我的客户端能够解析他自己的 Wireguard IP(10.0.0.2),解析 VPN 服务器的 Wireguard IP(10.0.0.1),并且能够解析 VPN 服务器的私有 IP 地址(192.168.0.2) - 但无法解析私有网络内的其他主机,如 192.168.0.3/192.168.0.4 等。
也许您可以帮助我找出我做错的地方或遗漏了什么?
答案1
听起来你快完成了,但 192 网络中的服务器需要知道如何回复请求。默认情况下,它们会从 wireguard 客户端获取数据包,但通过其默认路由回复,这看起来不是你的 vpn 服务器。
为此,向所有 192 台服务器添加一条返回 10.0.0.0/24 网络的路由,例如在 192.168.0.3 上运行此路由:
sudo ip route add 10.0.0.0/24 via 192.168.0.2
现在这些服务器将知道如何路由回 10.0.0.0/24 网络,而不是仅仅将其扔到默认路由:)