我使用 Open VPN 远程连接到不同城市不同网络(但可能属于同一子网)的 Intranet。Intranet 在办公室的远程服务器上的 IP 为 192.168.1.42。
我们在一间办公室,其中 IP 地址 192.168.1.42 是一个本地 IP 地址和一个远程 IP 地址 - 但我想强制开放 VPN 使用该 IP 地址的远程版本,但保持常规互联网仍然使用本地连接(即不通过 VPN 推送所有内容)。可能吗?
答案1
OpenVPN 包含一个应对这一常见问题的对策。它基本上是一个静态一对一 NAT。它是在--client-nat
选项:
--client-nat args
This pushable client option sets up a stateless one-to-one NAT
rule on packet addresses (not ports), and is useful in cases
where routes or ifconfig settings pushed to the client would
create an IP numbering conflict.
Examples:
client-nat snat 192.168.0.0/255.255.0.0
client-nat dnat 10.64.0.0/255.255.0.0
network/netmask (for example 192.168.0.0/255.255.0.0) defines
the local view of a resource from the client perspective, while
alias/netmask (for example 10.64.0.0/255.255.0.0) defines the
remote view from the server perspective.
Use snat (source NAT) for resources owned by the client and
dnat (destination NAT) for remote resources.
Set --verb 6 for debugging info showing the transformation of
src/dest addresses in packets.
将以下内容添加到受影响的客户端 OpenVPN 配置文件:
client-nat dnat 10.64.0.0/255.255.0.0
client-nat snat 10.64.0.0/255.255.0.0
并尝试连接到例如 10.64.1.42 而不是 192.168.1.42。
请注意,虽然这可能帮助,您肯定会需要一些调试(verb 6
在配置文件或管理通道中使用)。还要记住,任何类似这样的事情都容易出错,因为它会使您的网络变得不那么清晰,需要更多的注意力来了解发生了什么以及如何解决问题。这反过来会给 IPSec 或 SIP 或其他复杂协议带来另一个问题;这是不可避免的。
为了解决这个问题而不引入模糊的配置选项,请遵循上面 Esa Jokinen 的建议。我会用更广泛的方式来讲:由于 192.168.0.x 和 192.168.1.x 恰好是大量家用设备的默认网络,因此切勿将这些网络用于办公,并且可能 192.168.88.x 也应该包含在停止列表中,因为它是 Mikrotik 设备的默认设置,而且 Mikrotik 设备也非常流行。
重新编号办公网络以永不使用这些子网将产生最干净的整体网络设计。(这个想法甚至也扩展到其他网络体验,例如,永远不要使用默认的 VLAN ID 1,等等。)
最简单、最令人困惑的解决方案是以下解决方法。您不能只push "route 192.168.1.0 255.255.255.0"
,因为您将失去对所有本地资源的访问权限。但您仍然可以将路线推送到个人地址在子网中。例如,如果许多客户端受到影响,请在服务器的配置中添加以下行:
push "route 192.168.1.42"
(假设掩码为255.255.255.255
)。唯一不起作用的情况是,如果家庭网络中的目标客户端地址为192.168.1.42
;在这种情况下,什么都无济于事。然后重新启动服务器。如果只有少数客户端受到影响,您可以跳过服务器重新启动(这意味着中断),添加route 192.168.1.42
受影响的客户端配置并强制它们重新连接。