我正在考虑通过OpenVPN隧道使用dynamic路由[OSPF或RIP]。 现在我有几个连接全网的办公室,但这不是可扩展的解决scheme,因为我们添加更多的位置。 如果我计划使用的两个VPNterminal中有一个closures,我想避免出现大量内部stream量受到影响的情况。
你有类似的configuration工作在生产? 如果是这样 – 你使用什么路由守护进程 – quagga ? 别的东西? 你有没有遇到任何问题?
谢谢!
之前我已经实现了这些方面的东西,但是我的设置相当复杂,可能太多了。 我目前正在调查实施一个更简单的解决scheme,或者通过以下url描述的内容来影响这个解决scheme,但是我将会描述我同时build立的内容。 该url是http://www.linuxjournal.com/article/9915
在过去,一个很好的select是使用tap设备而不是tun设备来构build我的OpenVPN隧道。 这将以太网封装在隧道而不是第3层上,它允许您解决OpenVPN固有的与内核分离的路由表的固有限制。 不利的一面是,你会从这种隧道方式招致很多开销……想象一下通过TCPencryption的以太网上的TCPencryption的SSL …你明白了。 上行是水平相当好的工作和扩大。
假设你的VPN服务器和客户端是Linux端点(我只在Linux上testing过),你可以创build一个新的虚拟网桥接口,并将网桥接口分配给网桥来获取你的图层3.在我的拓扑结构中,我给每个VPN服务器拥有10.x.0.0 / 16子网,还部署了本地DHCP服务器为连接客户端分配地址。 DHCP服务器需要在那里,因为OpenVPN不再知道IP地址; 它是隧道以太网。 连接后,客户端运行dhclient以通过VPN接口获取IP,并且这些都由连接到OpenVPNconfiguration的连接脚本pipe理。
一旦通过DHCP获得双方的IP地址,您就可以使用dynamic路由协议在连接的客户端之间通告路由。 过去我曾经使用过Quagga,它的工作非常可靠。
使用tap的服务器configuration示例:
mode server proto tcp-server port 1194 dev tap0
用于将分接接口添加到新桥的示例命令:
sudo brctl addbr vpnbr0 # create new bridge called vpnbr0 sudo brctl setfd vpnbr0 0 # set forwarding delay to 0 secs sudo brctl addif vpnbr0 tap0 # add openvpn tap interface to vpnbr0
示例拆卸命令:
sudo brctl delif vpnbr0 tap0 sudo brctl delbr vpnbr0
一旦拥有了vpnbr0网桥接口,就可以在其上运行DHCP服务器或手动分配IP地址。 然后,您可以像处理其他以太网接口一样对待它。 您可能需要进行其他更改以调整MTU大小,您可以尝试不同的协议和encryption选项,直到在效率和安全性之间find适当的平衡。 我没有什么好的规格来提供整体吞吐量,而且这里有很多移动部件。
如果我再做一遍,我会坚持使用OpenVPN中的tun设备,我会按照第一段中链接的文章中的说明随时更新OpenVPN的内部地址表,以更新Linux内核的路由表。 这将消除堆栈中的DHCP,减less隧道开销,并允许我的客户端连接和运行,而无需参与dynamic路由。
我们目前有多个OpenVPN AS的实例运行,指向每一个静态路由。 我们为每个OpenVPN服务器分配一个/ 24子网。 目前我们已经有用户手动指向每个服务器,但是您可以使用各种技术将用户指向正确的用户。
这里唯一的问题是,如果OpenVPN服务发生故障,用户需要连接到另一台服务器才能获得stream量。 这是由于OpenVPN AS不支持OSPF,所以我们正在将一个静态路由重新分配给OpenVPN服务器。
有支持OpenVPN的开源路由器,比如Vyatta,但我们更喜欢OpenVPN AS的Web界面。