虚拟网卡通过实现一个字符设备来支持物理层,这样应用层和物理层就通过这个字符设备联系起来了,从这个字符设备读出来的就是虚拟网卡发往物理层的字节流,写入字符设备的数据作为字节流被虚拟网卡接收,虚拟网卡下面不再是网线或者无线电波,而是一个字符设备,这样从字符设备读出的还是写入字符设备的都是物理层字节流了,用它来实现隧道再简单不过了,VPN 程序读取字符设备,得到封装好的原始数据,然后用 SSL 再封装后发往 VPN 的对端,和 loopback 的最初尝试一样,实现配置一条路由,使得要通过隧道的数据从虚拟网卡流出,最终通过虚拟网卡的字符设备导入应用层的 VPN 进程。
OpenVPN协议之Control packet wire format
Control packet wire format
[header] [1-byte ack array len] [[4 bytes acked packet-id]] [8 bytes dest session-id] [4 bytes message-packet-id] [tls-encrypted payload]
[header]
tls-plain
[1 byte opcode/key-id] [8 bytes self session-id]
tls-auth
[1 byte opcode/key-id] [8 bytes self session-id] [hmac] [4 bytes packet-id] [4 bytes packet-datetime]
[8 bytes self session-id] - 8 bytes of randomness, generated at the beginning of protocol session
[hmac] - calculate hmac over:
OpenVPN协议概要
OpenVPN Wire Protocol (work in progress)
OpenVPN is an open source SSL/TLS based VPN solution which had its first release in May 2001. This document describes the wire protocol OpenVPN makes use of for establishing end-to-end-connections. Even though OpenVPN bases its communication on SSL/TLS, it is not a traditional SSL/TLS protocol which utilizes only TCP. OpenVPN supports some enhanced security features as well as providing SSL/TLS connections both over TCP as well as UDP.
VPN原理及实现之隧道的一种实现
理论上已经合理的 ip over ssl 还需要一些额外的技术支撑才能使用,必须想办法将一个 ip 数据报原封不动的让它被 ssl 重新封装一次,这个动作不可能在原始的标准协议栈中执行,标准协议栈不支持数据双向流动,那么解决方案之一就是修改协议栈,在 ip 层之下实现一个轻量的 ssl 协议层,但是如此一来就又回到了 IPSec 的老路上,因此此法不可取,正确的方法是不修改协议栈,让一切留在它应该在的地方,于是 ssl 必然得在应用层或者说是表示层实现,现在的问题是如何将下层的 ip 数据报重新引入上面的应用层,而且还不能修改标准协议栈,于是必然地要让 ip 数据报继续往下走,然后最终从一个网卡流出,于是就出了协议栈,接下来就可以自由发挥了,让数据流出网卡的原因是不能修改协议栈,但是还不能真的让它流出机器,如果它走了就不能指望用 ssl 封装它了,那么流到哪里呢?回环设备是一个不错的选择,从回环设备流出的数据实际上又流进了回环设备,用户空间只需要打开回环设备然后读取就可以了,注意不能通过一般套接字读取,毕竟那些数据不是发给我们的,要使用类似抓包的方式进行数据抓取,并且用防火墙禁止被抓取的数据继续被 forward,这实际上是一种巧妙的拦截方式,被抓取得数据然后经过 ssl 封装后再发向一个真的 ip 地址,我们需要配置的就是将所有的 vpn 数据全部发往回环设备,其实就是添加一条路由,虚拟网络已经建立,事情到此为止看似要结束了。
VPN原理及实现之一般理论
OpenVPN 基于 OpenSSL 来实现安全,但是却不是传统意义上的 SSLVPN,它只是一个普通的 VPN,工作在 IP 层而不是传输层。
VPN 的含义着重点有两层意思,一个是 V,也就是虚拟,另一个是 P,也就是专用。
OpenVPN简介
1. OpenVPN 简介
VPN 直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,OpenVPN 无疑是 Linux 下开源 VPN 的先锋,提供了良好的性能和友好的用户 GUI。
OpenVPN协议解析之网络结构之外
前面写了不少关于OpenVPN的文章,那些文章大多数都是侧重于网络的,要么就是源码解析。其实OpenVPN还有更深的可挖掘的东西。只可惜我们很难搜到中文的,因此本文就增添几笔。实际上,很多人都很看好OpenVPN,虽然它看起来是很简陋,然而确实有很多值得挖掘的。
Vim鼠标右键无法粘贴
最近维护一台服务器,使用putty登录后,用vim时,鼠标右键不能粘贴而是进入了visual模式。网上查找一番找到了解决方法:
方法一:在普通模式下键入“ :set mouse-=a”(不包括引号)