收藏 分享(赏)

Open VPN 工作原理.pdf

上传人:精品资料 文档编号:10856386 上传时间:2020-01-15 格式:PDF 页数:5 大小:125.14KB
下载 相关 举报
Open VPN 工作原理.pdf_第1页
第1页 / 共5页
Open VPN 工作原理.pdf_第2页
第2页 / 共5页
Open VPN 工作原理.pdf_第3页
第3页 / 共5页
Open VPN 工作原理.pdf_第4页
第4页 / 共5页
Open VPN 工作原理.pdf_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、Yanghoonari- 技术交流 Page 1 6/24/2006 OpenVPN 工作原理 OpenVPN 是一个强大、高度可配置、基于 ssl 的 VPN ( Virtual Private Network) Open Source 软件。它具有多种的验证方式以及许多强大的功能。 OpenVPN 工作在 OSI 模型的第 2 或第 3 层,使用 SSL/TLS 协议进行网络传输。支持多种客户认证方法,如证书、 smart cards,加上用户名密码的证书认证等。除此以外,还有强大的 ACL 功能限制客户的信息交换。 OpenVPN 可以运行在多种操作系统中,包括: Linux, Wind

2、ows 2000/XP and higher, OpenBSD, FreeBSD, NetBSD, Mac OS X, and Solaris. 使用 OpenVpn,可以实现 : 使用特定 udp 或 tcp 端口实现两台主机的之间的 vpn 连接。 实现 C/S 结构,实现多台 client 通过 server 服务器互连互通。 通过 TLS/SSL 加密保证数据传输的安全。 通过数据的压缩,提高数据传输的速度。 一虚拟网卡 虚拟网卡 Tun/tap 驱动是一个开源项目,支持很多的类 UNIX 平台, OpenVPN 和 Vtun都是基于它实现隧道包封装。做为虚拟网卡驱动, Tun/tap

3、 驱动程序的数据接收和发送并不直接和真实网卡打交道,而是通过用户态来转交。在 linux 下,要实现核心态和用户态数据的交互,有多种方式:可以通用 socket 创建特殊套接字,利用套接字实现数据交互;通过proc 文件系统创建文件来进行数据交互;还可以使用设备文件的方式,访问设备文件会调用设备驱动相应的例程,设备驱动本身就是核心态和用户态的一个接口, Tun/tap 驱动就是利用设备文件实现用户态和核心态的数据交互。从结构上来说, Tun/tap 驱动并不单纯是实现网卡驱动,同时它还实现了字符设备驱动部分。以字符设备的方式连接用户态和核心态。 Tun/tap 设备提供的虚拟网卡驱动,从 tc

4、p/ip 协议栈的角度而言,它与真实网卡驱动并没有区别。从驱动程序的角度来说,它与真实网卡的不同表现在 tun/tap 设备获取的数据不是来自物理链路,而是来自用户区, Tun/tap 设备驱动通过字符设备文件来实现数据从用户区的获取。发送数据时 tun/tap 设备也不是发送到物理链路,而是通过字符设备发送至用户区,再由用户区程序通过其他渠道发送。 发送过程: 使用 tun/tap 网卡的程序经过协议栈把数据传送给驱动程序,驱动程序调用注册好的 hard_start_xmit 函数发送, hard_start_xmit 函数又会调用 tun_net_xmit 函数,其中skb 将会被加入 s

5、kb 链表,然后唤醒被阻塞的使用 tun/tap 设备字符驱动读数据的进程,接着tun/tap 设备的字符驱动部分调用其 tun_chr_read()过程读取 skb 链表,并将每一个读到的 skb发往用户区,完成虚拟网卡的数据发送。 此过程对于整个 open vpn 过程而言如下 : 9 网卡接收到 SSL 报文 ,送到协议栈处理 9 协议栈根据其地址和端口信息和 ssl socket 绑定 ,并触发 socket read 信号 9 OPEN VPN 解密 ,如果是 SSL 握手报文则进行 SSL 处理 . 9 对于封装后的报文进行解密 . 9 解密后的 IP 报文通过 tun 字符驱动接

6、口 write 发送到内核 9 Tun 驱动进行 字符设备和网卡进行转换 Yanghoonari- 技术交流 Page 2 6/24/2006 9 TUN 网卡驱动触发 netif_rx 软中断 ,将解密后的报文转交给协议栈 9 协议栈根据 IP 报文信息送入相应的 Socket TUN-WRITE(CHAR)TUN_NETIF_RX(NET)TUN_NET_XMIT(NET)TUN-READ(CHAR)用户层链路层网络层OPENVPN TUN 进程TCP/IP协议栈IP packet(VPN解密 ) IP packet(vpn加密 )C/S进程socketin outSSLsocket126

7、45378接收数据的过程: 当我们使用 write()系统调用向 tun/tap 设备的字符设备文件写入数据时, tun_chr_write函数将被调用,它使用 tun_get_user 从用户区接受数据,其中将数据存入 skb 中,然后调用关键的函数 netif_rx(skb) 将 skb 送给 tcp/ip 协议栈处理,完成虚拟网卡的数据接收。 此过程对于整个 open vpn 过程而言如下 : 9 C/S 应用正常发送字节的数据到协议展 9 TCP/IP 协议栈查找路由后 ,选择 TUN 网卡驱动发送 IP 报文 9 Tun 驱动进行 字符设备和网卡进行转换 9 OPEN VPN 加密并

8、封装数据报文 9 OPENVPN 通过 SSL 发送报文 9 TCP/IP 协议栈查找路由后 ,选择普通 TUN 网卡驱动发送 IP 报文 TUN-WRITE(CHAR)TUN_NETIF_RX(NET)TUN_NET_XMIT(NET)TUN-READ(CHAR)用户层链路层网络层OPENVPN TUN 进程TCP/IP协议栈VPN解密后的 IPpacket IP packet(vpn加密 )C/S进程socketin outSSLsocket12345678Yanghoonari- 技术交流 Page 3 6/24/2006 二.OPENVPN工作模式 OpenVPN 可以创建两种基本的隧

9、道类型: Routed IP tunnels - 适用于不需广播的点对点 IP (point-to-point)通信。比起桥接网络隧道来略显得更有效率些而且更易配置。 此时 vpn 连上后相当于一个路由器; Bridged Ethernet Tunnels(桥接网络隧道) - 能用于 IP 协议或非 IP 协议的隧道。这种类型的隧道更适合于使用广播(broadcast)的应用 ,比如某些 Windows 网络游戏。配置起来稍微复杂些。 此时 vpn 连上后相当于一个交换机; TUN1 ETHc ETH1 TUN2 ETH0ClientETHsServerSSL GatewayTUN1 TUN2

10、 TUN0 ETHsTUN1 TUN2 ETH0 ETHs四个地址在相同网段则是桥接模式两两在相同网段则是路由模式三.OPENVPN进程 Openvpn 采用 Daemon 不断轮寻 io 事件包括 用户 ,系统 ,管理的 ,但是核心的时 SSL socket(TCP /UDP) 和 tun 的数据包 . OPEN VPN LOOP FOR EVENT/* UDP port ready to accept write */ 发送 ssl协商报文if (status /* TUN device ready to accept write */发送加密后的报文else if (status /*

11、Incoming data on UDP port */ ssl 协商报文else if (status multi_release_io_lock (m);if (!IS_SIG (/* Incoming data on TUN device */ 本地要报文 ,进行加密else if (status multi_release_io_lock (m);if (!IS_SIG (Yanghoonari- 技术交流 Page 4 6/24/2006 具体每个事件处理流程如下 : 1) multi_process_incoming_link Process packets in the TCP/

12、UDP socket - TUN/TAP interface direction, i.e. client - server direction. multi_get_create_instance_udp Get a client instance based on real address. If the instance doesnt exist, create it while maintaining real address hash table atomicity. process_incoming_link:decrypt in instance context * Good,

13、non-zero length packet received. * Commence multi-stage processing of packet, * such as authenticate, decrypt, decompress. * If any stage fails, it sets buf.len to 0 or -1, * telling downstream stages to ignore the packet. multi_process_post: multi_connection_established: * Called as soon as the SSL

14、/TLS connection authenticates. * * Instance-specific directives to be processed: * * iroute start-ip end-ip * ifconfig-push local remote-netmask * push 2)multi_process_incoming_tun: * Process packets in the TUN/TAP interface - TCP/UDP socket direction, * i.e. server - client direction. process_incom

15、ing_tun: multi_process_post: 3)multi_process_outgoing_tun: Send a packet to TUN/TAP interface. process_outgoing_tun : process_ipv4_header,write_tun. ret = multi_process_post 4) multi_process_outgoing_link: Send a packet to TCP/UDP socket. multi_process_outgoing_link_pre multi_process_outgoing_link_d

16、owork: sendto 对于 Client 和 Server 之间交互的信息 ,基本在 SSL socket multi_connection_established 中进行此时有 push 路由 ,分配地址 ,认证 ,等等 Yanghoonari- 技术交流 Page 5 6/24/2006 四.OPENVPN改进 1. 管理界面 (CS 通用 ) 2. 认证方式 (证书 ) 3. 性能问题 (修改 SSL 代码对于 RSA 部分采用加密卡 ) 采用 SSL 加速器接口为 encrypt_sign (struct context *c, bool comp_frag) decrypt_sign (struct context *c, bool comp_frag) 采用用户层异步处理方式对报文进行处理 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报