openvpn隧道之间的动态路由

pQd*_*pQd 6 linux openvpn linux-networking dynamic-routing

我正在考虑通过OpenVPN隧道使用动态路由 [OSPF 或 RIP] 。现在我几乎没有以全网状连接的办公室,但是随着我们添加更多位置,这不是可扩展的解决方案。如果我计划使用的两个 vpn 终端点之一出现故障,我想避免大量内部流量受到影响的情况。

你有类似的配置在生产中工作吗?如果是这样-您使用了什么路由守护程序-quagga?还有什么?你有遇到什么问题吗?

谢谢!

小智 4

我之前已经按照这些思路实现过一些东西,但是我的设置相当复杂,也许太多了。我目前正在研究按照以下 URL 中描述的内容/影响来实现一个更简单的解决方案,但我将描述我同时构建的内容。网址是http://www.linuxjournal.com/article/9915

过去对我来说效果很好的一种选择是使用 Tap 设备而不是 tun 设备构建我的 OpenVPN 隧道。这将以太网封装在隧道而不是第 3 层上,并且允许您解决 OpenVPN 维护其自己的与内核分离的路由表的固有限制。缺点是通过这种方式建立隧道会产生大量开销...想象一下通过 TCP 加密 SSL 的以太网上的 TCP...您明白了。好处是它的工作效果和水平扩展都相当好。

假设您的 VPN 服务器和客户端是 Linux 端点(我只在 Linux 上进行了测试),您可以创建一个新的虚拟桥接口并将分接接口分配给桥以获得第 3 层。在我的拓扑中,我为每个 VPN 服务器提供了其拥有 10.x.0.0/16 子网,并部署了本地 DHCP 服务器来为连接的客户端分配地址。DHCP 服务器需要存在,因为 OpenVPN 不再识别 IP 地址;它是隧道以太网。连接后,客户端运行 dhclient 通过 VPN 接口获取 IP,这一切都由与 OpenVPN 配置相关的连接脚本进行管理。

一旦通过 DHCP 获得了双方的 IP 地址,您就可以使用动态路由协议在连接的客户端之间通告路由。我过去使用过Quagga,它工作得相当可靠。

使用 Tap 的服务器配置示例:

mode server
proto tcp-server
port 1194
dev tap0
Run Code Online (Sandbox Code Playgroud)

将 Tap 接口添加到新网桥的示例命令:

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
Run Code Online (Sandbox Code Playgroud)

拆卸命令示例:

sudo brctl delif vpnbr0 tap0
sudo brctl delbr vpnbr0
Run Code Online (Sandbox Code Playgroud)

拥有 vpnbr0 桥接接口后,您可以在其上运行 DHCP 服务器或手动分配 IP 地址。然后您可以像对待任何其他以太网接口一样对待它。您可能需要进行其他更改来调整 MTU 大小,并且您可能会尝试不同的协议和加密选项,直到在效率和安全性之间找到适当的平衡。我没有任何关于整体吞吐量的好的规格可以提供,而且这里有很多移动部件。

如果重来一次,我会坚持使用 OpenVPN 中的 tun 设备,并且会按照第一段中链接的文章中的说明在 OpenVPN 的内部地址表更新时更新 Linux 内核的路由表。这将从堆栈中消除 DHCP,减少隧道开销,并允许我的客户端在不参与动态路由的情况下进行连接和操作。