背景:
我已在本地(专用)网络上配置了 Wireguard VPN 服务器。 [假设专用网络:192.168.1.0/24] Wireguard 客户端具有相同的 IP 网络 192.168.1.X
我的网络中存在一些具有静态本地 IP 地址的非 Wireguard 兼容设备(IP 摄像机、DVR)。
查询:
当我作为 Wireguard 客户端连接到 Wireguard 服务器(从本地网络外部)时,我想使用其本地静态 IP 地址访问那些非 Wireguard 兼容设备。我已经确保不会有任何IP冲突。
答案1
当您想要通过 WireGuard 将各个外部主机连接到 LAN 时,您需要做的三件关键事情是:
- 将 LAN 的 IP 块(或至少要访问的每个 LAN 端主机的 IP 地址)包含在
AllowedIPs
每个设备上的 WireGuard 配置设置中外部的主持人 - 在LAN侧WireGuard主机上设置数据包转发(例如
sysctl -w net.ipv4.ip_forward=1
) - 在 LAN 端 WireGuard 主机上设置数据包伪装(也称为 SNAT)(通常通过
iptables
规则完成)
这里有一个完整的例子:
https://www.procustodibus.com/blog/2020/11/wireguard-point-to-site-config/
在该示例中,LAN 的子网为192.168.200.0/24
,因此这就是AllowedIPs
外部主机(示例中的端点 A)的 WireGuard 配置中的设置:
AllowedIPs = 192.168.200.0/24
在该示例中,数据包转发和伪装是通过将以下内容添加到 LAN 侧 WireGuard 主机(示例中的主机 β)上的 WireGuard 配置来完成的:
# IP forwarding
PreUp = sysctl -w net.ipv4.ip_forward=1
# IP masquerading
PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x30
PreUp = iptables -t nat -A POSTROUTING ! -o wg0 -m mark --mark 0x30 -j MASQUERADE
当 LAN 端 WireGuard 主机上的 WireGuard 接口wg0
启动时,外部主机可以通过其 LAN 地址连接到 LAN 上的任何主机 - 在示例中,外部主机(端点 A)可以连接到 LAN 主机(端点B) 通过端点 B 的本地地址192.168.200.22
。
答案2
拥有一个 LAN 192.168.50.1/24,其中有一个设备充当 VPN 服务器(VPN 10.5.0.1/24),我可以制作一个外部客户端(10.5.0.4)来访问原 LAN 上的设备(即,192.168.50.185)。
我通过以下方式实现这一点:
启用 IP4 转发
/etc/sysctl.conf
附加到
/etc/wireguard/wg0.conf
(字段[interface]
)行:PreUp = sysctl -w net.ipv4.ip_forward=1; iptables -I INPUT 1 -i wg0 -j ACCEPT;iptables -I FORWARD 1 -i eth0 -o wg0 -j ACCEPT; iptables -I FORWARD 1 -i wg0 -o eth0 -j ACCEPT
应用更改槽
sudo systemctl restart wg-quick@wg0
配置客户端将流量转发到所需的主机。即,在我的文件下的客户端上
[Peer]
:AllowedIPs = 10.5.0.1/24;192.168.50.185/32
希望这可以帮助。