我想连接位于远程建筑物上的多个LAN。
“中心”站点有一台运行OpenVPN的Linux计算机。每个远程站点还运行OpenVPN。
- 中央站点的局域网编号为192.168.0.0/24
- 几个远程站点也编号为192.168.0.0/24
- 我不能/不想/不想/无论如何修改局域网编号
- 我无法控制大多数远程OpenVPN
然后,我需要:
1.定义虚拟LAN
2.为每个站点配置1:1 NAT
3.必须在中央路由器上配置1:1 NAT
。
因此,每个站点都具有一个10.10.x.0 / 24 LAN。
当计算机要在站点12上访问192.168.0.44时,只需将一个paquet发送到10.10.12.44
操作VPN对我来说不是问题。我目前连接60多个站点。但是我找不到实现此1:1 NAT的简单方法。
这是从中央站点发送到远程站点的数据包及其响应数据包的示例:
我使用iptables NETMAP进行了一些测试,但由于无法找到路由决策后无法修改源+目标的方法,因此无法使其正常工作。
我宁愿避免使用新的--client-nat
OpenVPN功能。
也许我必须强制路由ip route
?还是用两次循环进入网络堆栈veth
?
注意:我不想化妆舞会。仅1/1 NAT。
编辑:
使用常规的openVPN设置是不可能的。因为来自远程站点的数据包与来自另一个站点的数据包是无法区分的:两者具有相似的源地址和目标地址,并且都来自相同的Tun(或Tap)接口。因此,不可能对其进行源NAT。
解决方案1:在远程站点上进行NAT。就我而言,这是不可能的。我只需要在中央站点上执行此操作即可。
解决方案2:为每个远程站点设置一个VPN。因此,我每个人要吃一次。我认为可以。不是很有效的内存,但是还可以。
解决方案3:在VPN内为每个站点设置一个(未加密的)隧道。这将为每个接口提供一个接口。简单的隧道不是跨平台的(据我所知)。例如,对于Linux,GRE,ipip或sit都可以,但是某些远程站点仅运行一台Windows计算机,因此在其上安装了openVPN。因此不可能建立一个简单的隧道。另一个选择是使用更复杂的隧道(“?”),但是系统和sysadmin的开销可能比拥有多个VPN更大。
解决方案4:编译最新的openVPN,因为它包含1:1 NAT功能。我这周测试。