我想连接位于远程建筑物上的几个局域网.
“*”站点有一台运行OpenVPN的Linux计算机.每个远程站点也运行OpenVPN.
>中心站点的LAN编号为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局域网.
当计算机想要到达站点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.所以不可能设置一个简单的隧道.
其他选择是使用更复杂的隧道(对吗?)但系统和系统管理员的开销可能比拥有多个VPN更大
解决方案4:编译最新的openVPN,因为它包含1:1的NAT功能.
我本周测试一下.
解决方法:
一个非常基本的解决方案:
1.对服务器客户端使用OpenVPN 2.3或更高版本(目前最新版本为2.3-alpha)
2.使用下面的OpenVPN配置选项
3.不要使用任何其他东西(没有ipfilter,没有技巧)
在服务器端,您需要手动分配VPN地址(因此没有服务器选项,您必须使用ifconfig或ifconfig-push):
# /etc/openvpn/server.conf
ifconfig 10.99.99.1 10.99.99.2
route 10.99.99.0 255.255.255.0
push "route 10.99.99.0 255.255.255.0"
push "client-nat dnat 10.99.99.11 255.255.255.255 10.10.111.11"
push "client-nat dnat 10.99.99.12 255.255.255.255 10.10.112.12"
push "client-nat dnat 10.99.99.13 255.255.255.255 10.10.113.13"
这条路线,推动路线和客户NAT线都需要,如果你想(从一个遥远的网站throught的VPN平10.99.99.1)路由器之间直接通信.否则你可以丢弃它们.
.
.
现在您必须选择虚拟网络地址.我保持与您在示例中使用的相同:10.10.0.0/16
您允许路由:
# /etc/openvpn/server.conf
route 10.10.0.0 255.255.0.0
push "route 10.10.0.0 255.255.0.0"
.
.
您现在要指示客户端使用1:1 NAT:
# /etc/openvpn/ccd/client_11
ifconfig-push 10.99.99.11 10.99.99.1
push "client-nat snat 10.99.99.11 255.255.255.255 10.10.111.11"
push "client-nat snat 192.168.0.0 255.255.255.0 10.10.11.0"
push "client-nat dnat 10.10.10.0 255.255.255.0 192.168.0.0"
iroute 10.10.11.0 255.255.255.0
iroute 10.10.111.0 255.255.255.0
第一行设置远程路由器地址.注意需要特殊地址的Windows驱动程序.
第二行和最后一行允许远程路由器从其10.99.99.x接口进行通信.
第三和第四行执行源和目标1:1 NAT
第五行告诉OpenVPN如何处理相应的数据包.
此方法允许连接具有相同(或不具有)LAN地址的站点,而不使用任何阴影主机.