连接到 Wireguard VPN 时使本地资源可用

连接到 Wireguard VPN 时使本地资源可用

背景:
我已在本地(专用)网络上配置了 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 时,您需要做的三件关键事情是:

  1. 将 LAN 的 IP 块(或至少要访问的每个 LAN 端主机的 IP 地址)包含在AllowedIPs每个设备上的 WireGuard 配置设置中外部的主持人
  2. 在LAN侧WireGuard主机上设置数据包转发(例如sysctl -w net.ipv4.ip_forward=1
  3. 在 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)。

我通过以下方式实现这一点:

  1. 启用 IP4 转发/etc/sysctl.conf

  2. 附加到/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
    
  3. 配置客户端将流量转发到所需的主机。即,在我的文件下的客户端上[Peer]

    AllowedIPs = 10.5.0.1/24;192.168.50.185/32
    

希望这可以帮助。

相关内容