我有一台带有一个以太网连接的 Raspberry Pi。该以太网将设备连接到互联网和本地网络。我试图通过 OpenVPN 允许来自本地网络外部的连接访问本地网络上的计算机,因为本地网络本身不能拥有公共静态 IP。
我已经成功设置了 OpenVPN 服务器,并且可以通过 VPN 连接从另一台计算机连接 Pi,但是我不确定如何通过将连接从 OpenVPN 路由到其本地来允许网络访问 Pi 所在的本地网络的其余部分网络。
许多在线教程假设有两个不同的接口,每个接口分别连接到互联网和本地网络,但在这种情况下,我们有一个接口同时执行这两个操作。有没有一种方法可以使用 NAT 将 OpenVPN 连接路由到本地网络,以便可以双向建立连接,往返于本地网络以及通过静态本地 IP 进行 OpenVPN 连接?
答案1
(我假设您使用的是 L3 VPN。)
执行此操作的干净(无 NAT)方法是将 LAN 的 IP 提供给 OpenVPN 客户端。假设您的 LAN 是 192.168.0.0/24,您可以为您的 OpenVPN 客户端静态分配该范围内的一个 IP。
假设您将 192.168.0.42 提供给 OpenVPN 客户端。 LAN 上尝试访问 192.168.0.42 的节点将在 LAN 上发出 ARP 请求,以查找与 IP 地址关联的 MAC 地址。但是,您的 OpenVPN 不在 LAN 上,无法应答 ARP 请求:因此远程 LAN 上的节点无法到达您的 OpenVPN 客户端。
服务器上的IP配置:
ip address add 192.168.0.33 peer 192.168.0.42 dev tun0
客户端IP配置:
ip address add 192.168.0.42 peer 192.168.0.33 dev tun0
首先,我们需要要求 OpenVPN 服务器代表客户端应答 ARP 请求。这称为 ARP 代理:
ip neigh proxy 192.168.0.42 dev eth0
现在,LAN 上尝试访问 192.168.0.42 的节点将从 OpenVPN 服务器获取 ARP 回复并向其发送数据包。
下一步是在 OpenVPN 服务器上启用 IP 转发:
sysctl -w net.ipv4.ip_forward=1
当接收到 192.168.0.42 的数据包时,OpenVPN 服务器现在会将其路由到客户端。