openvpn使用dev tap和dev tun有什么区别? 我知道不同的模式不能互相操作。 什么是技术差异,除了第2层和第3层操作。 有不同的性能特点,或不同的开销水平。 哪种模式更好 什么function是独一无二的在每种模式。
如果可以在第3层创buildvpn(在子网之间再跳一个),那么可以使用tun。
如果您需要在两个不同的位置连接两个以太网段,请使用tap。 在这样的设置中,您可以让计算机位于vpn两端的同一个ip子网(例如10.0.0.0/24),并且可以直接相互“对话”,而无需对路由表进行任何更改。 vpn将像以太网交换机一样工作。 这可能听起来很酷,在某些情况下是有用的,但我build议不要去,除非你真的需要它。 如果你select这样的第2层桥接设置 – 会有一些“垃圾”(即广播数据包)穿过你的VPN。
使用水龙头,你会有更多的开销 – 除了IP头还38B或更多的以太网头将通过隧道发送(根据您的stream量types – 它可能会引入更多的碎片)。
当为一个拥有小企业的朋友build立一个VPN时,我select了“tap”,因为他的办公室使用了Windows机器,商业打印机和Samba文件服务器。 其中一些使用纯TCP / IP,有些似乎只使用NetBIOS(因此需要以太网广播数据包)进行通信,有些我甚至不确定。
如果我select了“tun”,那么我可能会遇到很多破碎的服务 – 当你在办公室里时,很多事情都是有效的,但是当你离开现场,你的笔记本电脑不能“看见”以太网子网上的设备了。
但是通过select“tap”,我告诉VPN使远程机器与局域网完全一样,使用广播以太网数据包和原始以太网协议与打印机和文件服务器进行通信,并为网上邻居显示器供电。 它工作的很好,我从来没有得到不在异地工作的报告!
我总是设置tun。 Tap是由OpenVPN中的以太网桥接使用的,它引入了一种前所未有的复杂度,这是不值得打扰的。 通常,当需要安装VPN时, 现在需要安装VPN,复杂的部署也不会很快。
OpenVPN常见问题和以太网桥接HOWTO是这个主题的优秀资源。
如果您打算使用OpenVPN连接移动设备(iOS或Android),那么您应该使用TUN,因为当前TAP 不受OpenVPN支持 :
TAP的缺点:…..不能与Android或iOS设备一起使用
我开始使用tun,但切换到tap,因为我不喜欢每台 PC使用一个/ 30子网(我需要支持Windows)。 我发现这是浪费和混乱。
然后我发现服务器上的“拓扑子网”选项。 与2.1 RC(不是2.0)一起工作,但是它为每台(windows)机器提供了一个(连续的)IP地址的便利,使得我具有tun(无桥接,性能,路由等)的所有优点。
我在几年前也有同样的问题,试图在我的博客中直接解释(我个人认为缺乏其他资源): OpenVPN入门
希望它可以帮助别人
我的“经验法则”
TUN – 如果您只需要访问直接连接到另一端的OpenVPN服务器的资源,并且没有Windows问题。 通过使资源“出现”在OpenVPN服务器本地,这里有一点创意可以提供帮助。 (示例可能是CUPS连接到networking打印机,或者在另一台机器上的Samba共享,安装在OpenVPN服务器上。)
TAP – 如果您需要访问通过另一端networking连接的多个资源(机器,存储设备,打印机,设备)。 某些Windows应用程序也可能需要TAP。
优点:
TUN通常将VPN访问限制在单台计算机(IP地址),因此(通常可以)通过与远端networking的有限连接提高安全性。 TUN连接将在VPN隧道上创build较less的负载,而在远端networking中负载较低,因为只有来自/来自单个IP地址的stream量才会通过VPN到达另一侧。 IP路由到子网中的其他站点不包括在内,所以stream量不会通过VPN隧道发送,除了OpenVPN服务器之外很less或没有通信可能。
TAP – 通常允许数据包在端点之间自由stream动。 这提供了与远端networking上的其他站点的通信的灵活性,包括较老的Microsoft软件所使用的一些方法。 TAP具有固有的安全风险,涉及授予“防火墙后”的外部访问权限。 它将允许更多的stream量数据包通过VPN隧道。 这也打开了端点之间地址冲突的可能性。
由于堆栈层,延迟存在差异,但是在大多数最终用户场景中,端点的连接速度可能比传输的特定堆栈层更为重要。 如果延迟存在问题,考虑其他替代scheme可能是一个好主意。 目前的GHz级多处理器通常超越了通过互联网传输的瓶颈。
没有上下文,“更好”和“更糟糕”是不能确定的。
(这是顾问最喜欢的答案,“那要看…”)
法拉利比自卸车“更好”吗? 如果你试图走得快,那可能是; 但是如果你试图拖拉重物,可能不会。
在确定TUN或TAP是否更适合您的需求之前,必须定义诸如“需要访问”和“安全需求”之类的约束,并定义诸如networking吞吐量和设备限制之类的限制。
那么,为什么呢,你有多less? 我会利用TAP,明确的原因是数据包的分层进行的延迟less,传输损失减less了这种方法。 但是,只有在第3层的情况下,这会影响对VPN运行的任何明显的影响,特别是隧道方面以及哪些IP被允许通过和可分配的地址。 UDP的使用可能会引入另外一种情况,那就是你需要决定哪个是最适合你的路线。 每个networking都不同,需要一组独特的参数。 希望这可以帮助。
设置TAP几乎不需要设置人员的额外工作。
当然,如果你知道如何设置TUN,但不明白你在做什么,只要遵循一个tun教程,你将会努力设置TAP,但不是因为它更困难,而是因为你不知道自己在做什么这样做。 这很容易导致TAP环境中的networking冲突,然后看起来更加复杂。
事实是,如果你不需要教程,因为你知道自己在做什么,设置tap需要花费与设置tun相同的时间。
点击有很多关于子网划分的解决scheme,我发现自己最简单的方法就是使用B类子网。 site1(Network1)使用172.22.1.0/16 site2(network2)使用172.22.2.0/16 site3使用172.22.3.0/16等
您使用oVPN服务器设置site1,并为客户端提供IP范围172.22.254.2 – 172.22.254.255/16,这样您就可以拥有200多个ovpn客户端(子网),每个子网本身可以拥有200多个客户端。 总共可以处理40,000个客户端(怀疑oVPN可以处理这个问题,但是正如你所看到的那样,设置适当的子网划分会给你足够多的时间,就像你最需要的一样)
你使用一个水龙头,所有的客户在一个巨大的企业networking在一起。
如果每个站点都有自己的DHCP,并且应该有,那么你需要确保使用ebtables或者iptables或者dnsmasq来阻止dhcp发布。 然而,ebtables会减慢性能。 使用dnsmasq dhcp-host = 20:a9:9b:22:33:44,忽略例如将在所有dhcp服务器上设置一个巨大的任务。 然而,在现代硬件上,ebtables的影响并不大。 只有1或2%
tap的开销大约是32,对于tun来说也不算什么问题(可能是在未encryption的networking上),但是在encryption的networking上,通常是AES会导致放缓。
在我的wrt3200acm例如未encryption我得到360Mbps。 使用encryption它下降到54-100Mbps取决于我select什么样的encryption),但openvpn不做encryption1500和第二encryption32开销。 相反,它在1500 + 32的开销上执行一次encryption。
所以这里的影响是最小的。
在较旧的硬件上,您可能会注意到更多的影响,但是在现代硬件上,它确实降到了最低限度。
2个虚拟机之间的encryption与AES支持让我我的ovpn TAP到120-150Mbps。
一些报道专用路由器与AES硬件encryption支持高达400Mbps! 比i5-3570k快3倍(在我的testing系统上,在1核心利用率的100%下无法达到150Mbps)我的另一端:E3-1231 v3,CPU利用率大约在7%左右25%的核心openvpn使用被利用。 所以E3最有可能增加连接3到4倍。
所以你应该有一个介于360Mbps和600Mbps之间的连接E3-1231 v3 cpu做tap AES265密码,auth SHA256和ta.key,证书tls-cipher之间的连接。我还使用了最高的TLS-DHE-RSA-WITH-AES- 256-SHA256
要指出这一点,点击:wrt3200acm获得高达70-80mbps的encryption。 i5-3570kencryption到120-150。 E3-1231 v3的encryption速度至less为360Mbps(这是根据我的发现加上情况1和2的内插值,因为我没有2个E3-1231 v3进行testing)。
这些是我的研究结果,基于windows在2个不同的子网中通过openvpn TAP连接的2个客户端之间的窗口复制