Submitted by admin on 2011, July 9, 7:59 PM
在RS中建立一个lo:0接口,设置ip为vip地址。
当使用arping vip时,会有多个MAC地址回应,这是因为RS也响应的VS的arp查询。[code]sysctl -e net.ipv4.conf.all.arp_ignore=1[/code]复制代码
此时,RS即不再影响RS关于vip的ARP MAC查询了。
假如两台VS之间使用的互备关系,那么当一台VS接管LVS服务时,可能会网络不通,这时因为路由器的MAC缓存表里关于vip这个地址的MAC地址还是被替换的VS的MAC,有两种解决方法,一种是修改新VS的MAC地址,另一种是使用send_arp 命令(piranha软件包里带的一个小工具),格式如下:[code]send_arp
send_arp [-i dev] src_ip_addr src_hw_addr targ_ip_addr tar_hw_addr[/code]复制代码
这个命令不一定非要在VS上执行,只要在同一VLAN即可。
12-17:
今天对RS ARP MAC查询有了新的认识,网上大多数的文章都提到要用四个参数来关闭arp查询响应请求:[code]
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce[/code]复制代码
我的RS最近的流量也频繁出现“异常”,经分析是因为arp的问题,rs有时会夺取VS的ip援用权。使用以上四条之后,VS立刻有了流量。
1. LVS调度的最小单位是“连接”。
2. 当apache的KeepAlive被设置成Off时,“连接”才能被较均衡的调度。
3. 在不指定-p参数时,LVS才真正以“连接”为单位按“权值”调度流量。
4. 在指定了-p参数时,则一个client在一定时间内,将会被调度到同一台RS。
5. 可以通过”ipvsadm ?set tcp tcpfin udp”来调整TCP和UDP的超时,让连接淘汰得快一些。
6. 在NAT模式时,RS的PORT参数才有意义。
7. DR和TUN模式时,InActConn 是没有意义的(Thus the count in the InActConn column for LVS-DR, LVS-Tun is
inferred rather than real.)
转
集群/分流 | 评论:0
| Trackbacks:0
| 阅读:1367
Submitted by admin on 2011, July 8, 3:13 PM
近日,记者了解到水货手机市场上原本具备国外运营商网络锁的手机,多数商家仅简单的采用所谓“白卡”的方式进行解锁,并销售给消费者。这一现象也本使系统稳定的手机却只能以工程测试机的不稳定形式供消费者使用。
手机测试卡用作解锁卡
“白卡”是一种手机测试SIM卡,由于其一般颜色为白色,故被俗称为“白卡”,其被广泛应用于通讯工业生产及测试过程。手机测试卡本身用于测试显示手机、调节器版本,显示话音加密码、还原通话时间和误码率等方面的手机功能性测试。
据悉,现在主要测试卡有GSM、TD-SCDMA、WCDMA、CDMA、CDMA2000多种网络类型的支持。其卡身内存常用的有32K/64K/128K,并可根据不同的测试需求进行定制。
近日,记者了解到一些水货市场中的商家普遍利用“白卡”对有国外运营商网络锁的手机进行解锁,使其被解锁的手机可以使用国内运营商的网络。而这一现象也使得专用于测试的“白卡”有了新的市场。
另据记者了解,销售解锁“白卡”的分类与手机测试卡分类不同,网络类型多被以不同手机品牌或地区的划分所取代。如销售价约为65元左右的MrSIM解锁卡则专门针对解锁日*本运营商的网络锁而设计,主要适合NTTDocomo和Softbank手机的解锁。
针对手机品牌的则有夏普手机解锁卡、iPhone手机解锁卡、NOKIA及索尼爱立信解锁卡、HTC解锁卡等。尽管卡的网络属性及针对品牌不同,但SIM卡样式基本相同,颜色也全部为白色。
某销售“白卡”的商家表示,此卡主要销售对象为一些水货手机商或部分手机发烧友。
手机易变为工程测试机
跟据市场调查发现,由于此种方法进行手机的解锁效率相对较高,水货市场上的多数商家均喜欢采取此种方式对含有外国网络锁的手机进行解锁,然后再销售给消费者并可插入我国运营商的SIM卡后使用。
但记者针对此事采访相关进行手机启动项安装程序开发的人士时却得知,此种方法解锁的一些智能手机尽管可以正常使用,但实际上由于“白卡”为手机测试卡,用此卡解锁后的手机系统引导模式将被更改,当手机开机加载系统时将会加载入工程测试机的启动项。
本身为正式销售的手机产品,“白卡”解锁在系统层却变为工程测试机,影响了用户使用手机时系统的稳定性。
另有相关专业人士提示消费者,“白卡”解锁后的智能手机在二次刷机后还可脱离工程测试机属性,并跳出原有国外运营商的网络锁。只因步骤相对复杂,大部分水货销售商对此步骤进行了省略。建议消费者在熟悉所购买的手机后要求水货商进行二次刷机或进行自行刷机。
了解了白卡机的源头之后,再来看看怎样辨别是否白卡机:
1.机子从一开始入手至今,没自己去彻底root过,但是你发现你的机子进去FASTBOOT里面可以看到已经显示有”S-OFF”字样!(关机,按住返回键和电源键直到开机,三色英文字体的界面就是FASTBOOT,看最顶部一行英文后面显示“S-ON”还是“S-OFF”即可,我的就是S-OFF);
2.机子一到手至今开机就是个安智网的登录界面而不是原厂的开机界面也不是是Alpharev S-OFF第一屏,那就很大可能是工程机了(安置登录的最近好像少了,我的就是原厂开机界面,不知道是不是JS们换了另一个体面点的ROM);
3.试试更换你的第一屏吧!如果没权限会提示“no allowed”。
android | 评论:0
| Trackbacks:0
| 阅读:1014
Submitted by admin on 2011, July 8, 3:06 PM
HTC安卓系统手机进入HBOOT界面显示的是 ACE PVT SHIP S-ON/OFF或者是 ACE PVT ENG S-ON/OFF,现对此显示进行深入了解(SHIP S-OFF、ENG S-OFF、软解、白卡解锁释疑)。
ACE: 这个是手机的内部代号
Desire HD这台 HTC版叫Desire HD 内部代号是 ACE
PVT : 这台机子的主板类型是PVT
关于主板,稍微说明下下哈,一台硬件设备上市前,其都经历过大量的实验以及修改,主板版本的不同代表了这台机子是什么时期的硬件
主板类型其实还有很多 EVT DVT CVT PVT 什么的
EVT:工程机 恭喜你了,你拿到了工程样机,说好听的多有纪念价值啊,说不好听的,这台机子跟上市的机子可能有很大硬件上的区别,基本上不要指望能跟大家用一样的ROM软件啥的
DVT:开发机 比EVT好点,硬件较稳定或接近稳定状态,但是基本也都存在跟正式版硬件上的差异,请更多关注纪念价值吧~
CVT:商试用机(认证机)拿来试用,交给运营商贴ok标签的机型,一般到这个版本,硬件是不会再去改动的了,和零售版不会有啥区别
PVT:最终量产机 不需解释了吧
这里一般不会有假的,大可放心(EVT,DVT数量极少,就算不小心流出市面,JS要是有能力改SPL信息的话,也早就不用做JS这行啦~) 如果你还不放心,告诉你,确认主板类型最保险的还是拆机直接看主板,主板上直接印有的,安心了吧~~
SHIP: 当前SPL版本
这个纠结的人多啊~~ 哈哈 这个是当前SPL的版本(SPL是啥?靠,完机器人怎能不知道呢?简单来说就是你这台手机的BIOS)
版本也有几个的 SHIP ENG DEV
SHIP: 原生版 也就是系统原生自带的SPL,处女膜SPL哦~
ENG: 工程版(自制版) 这里其实更多是自制的意思,也就是大神们修改过后的SPL
DEV: 开发版 极少有,对咱们终端用户意义不大的
S-OFF : 安全锁 OFF
S-ON:安全锁打开 CID校验 检测往里刷的东东副不符合CID校验,不符合的就砍你没商量
S-OFF: 安全锁关闭 SUPERCID
简单来说,S-OFF 关闭CID校验,刷ROM比较自由,权限最大,大部分自制ROM都要求关闭CID校验的,所以才有说S-ON刷不了这么一说
回到我们手上的机器
现在大家应该知道 白卡解的是SHIP S-OFF 软解的是 ENG S-OFF
看过上面的解释后,估计大家也就明白区别了
白卡就是那HTC内部的某神奇SIM卡,直接修改了安全锁校验为OFF 这本身就是官方内部的东西,只不过不知道JS通过什么手段拿到了这张官方SIM卡
对于白卡解的机子,并没有对原生SPL进行修改,所以还是SHIP版的 就只是安全锁OFF了
软解的机子,基本上都对SPL进行了操作修改,可以说并不是原生系统SPL了 所以显示版本为 ENG
那SHIP 和 ENG 有啥区别呢
原生的SPL 对于我们刷ROM是没有任何限制,但是对于刷RECOVERY和刷IMG是要验证签名的,这也是为啥下面替换开机画面那贴里所谓“白卡机用不了”的原因
而ENG的SPL,去掉了这些签名机制,可以直刷
但也并不是说SHIP版的就刷不了,跟ENG版的有些少不同罢了.
而且SPL本身是可以刷的,SHIP版ENG版,没啥所谓啦 反正刷ROM都一样的
android | 评论:0
| Trackbacks:0
| 阅读:1069
Submitted by admin on 2011, July 8, 2:59 PM
想要玩好android,有一些词汇那是相当的重要,必须要牢记的。否则会给以后的刷机留下很大的麻烦。
什么?你说只玩游戏不刷机?那也要明白这些词,因为这些都是日常使用当中对你很有帮助的。比如为什么我的手机那么慢?为什么别的人桌面效果我没有?为什么我的手机信号总不好?为什么我的手机会出现灵异事件?
如果掌握了这些东西,就不会被自己身上发生的灵异事件吓到。即使吓到了,你也知道怎么在网上询问,其他网友也知道怎么跟你沟通。
Recovery
Recovery模式可以给你的android系统升级固件版本,升级系统版本,升级通讯基带版本,做APPtoSD,系统备份还原等等很多功能,所以一定一定要明白recovery。
进入recovery的方法也很简单,拿G1来说,按住小房子+电源进入就好了。
root
root权限和我们在windows系统的administrator权限一个意思 。root是android系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权利,所有对象他都可以操作。(现在的手机,大部分都已经提取了root权限)
radio
Radio是无线通信模块的驱动程序,负责网络通信。
菜单->设置->关于手机->基带版本,看是不是62.50S.20.17H_2.22.19_26I。
升级系统一定要刷新最近的radio,而且新的radio对通信质量的帮助很大。属于比刷的东西。
SPL
SPL负责主板,电源、硬件初始化程序。SPL 一般提供这几部分功能:检测手机硬件、寻找系统启动分区、启动操作系统为系统的基本维护提供操作界面,可以通过数据线与操作终端建立连接,并接受和执行相应命令。
是否spl了 用超级终端:键入su 回车 再键入df 回车 看到data 91M的就是spl,其他则不是。
固件版本
固件是说操作系统的系统内核版本。就好像是电脑用的winXP,win7的样子。
目前最新的固件是【2.2】,但是个人比较倾向于【2.1】,经过几个改动,目前还是很稳定的。
ROM
ROM就和固件版本关系比较暧昧了。我还用刚才的例子打比方,固件是winXP,那么ROM就是XPsp3,是固件版本的细分。再或者说,比如是番茄花园的XP,枫林玉林的XP。
android | 评论:0
| Trackbacks:0
| 阅读:919
Submitted by admin on 2011, July 8, 1:57 PM
IPIP是在两台主机之间的IP层上建立一条虚拟的通道(没有加密,没有压缩),相当于建立一条VPN.
下面是一个例子:
我们想在两台机器之间建立ipip,它们分别为:Router A 和 Router B. 它们分别都连接到网络上.
Router A:
外网地址是: 192.0.2.34
内网地址是: 192.168.1.1
Router B:
外网地址是: 192.0.2.69
内网地址是: 192.168.1.254
在Router A上执行命令:
ip tunnel add tunnel0 mode ipip remote 192.0.2.69 local 192.0.2.34
ip link set tunnel0 up
ip addr add 192.168.1.1/24 dev tunnel0
在Router B执行命令:
ip tunnel add tunnel0 mode ipip remote 192.0.2.34 local 192.0.2.69
ip link set tunnel0 up
ip addr add 192.168.1.254/24 dev tunnel0Skip to 'testing the tunnel'.
Debian sample setup
Router A
Edit /etc/network/interfaces:
auto tunnel0
iface tunnel0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
pre-up /sbin/ip tunnel add tunnel0 mode ipip remote 192.0.2.69 local 192.0.2.34
post-down /sbin/ip tunnel del tunnel0Then execute
ifup tunnel0.
Router B
Edit /etc/network/interfaces:
auto tunnel0
iface tunnel0 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
pre-up /sbin/ip tunnel add tunnel0 mode ipip remote 192.0.2.34 local 192.0.2.69
post-down /sbin/ip tunnel del tunnel0Then execute
ifup tunnel0
Testing your tunnel
After you have configured your tunnel via one of the examples above you should be able to ping the remote end:
Router A
ping 192.168.1.254
Router B
ping 192.168.1.1
Both pings should succeed without problems.
使用你建立的IP tunnel
You can now use your tunnel - just pretend it's a piece of Ethernet between the two computers.
Remember the MTU on the tunnel will be lower than normal because of the extra IP header.
You can setup routing and whatever you like over the tunnel.
If you lose your route to the tunnel endpoint, the tunnel will not work either.
--------------------------------------------------------------------------------
More complex situations
When tunneling between 2 routers, and 1 router has a private network on another interface, routing between the two can be confusing. Here is the network layout:
Router 1
eth0: 1.2.3.4 (public)Router 2
eth0: 4.3.2.1 (public)
eth1: 10.0.0.1In my particular case, Router 1 is an asterisk system on a public network, and Router 2 is a NAT router that is also a gateway for my private 10.0.0.0/24 network. I have multiple SIP phones (which don't work through NAT) on the 10.0.0.0/24 network and I need to establish routes between the 2.
IN THIS ORDER ENTER THESE COMMANDS
Router 1
iptunnel add iptun mode ipip remote 4.3.2.1
ifconfig iptun 10.0.1.1
route add -net 10.0.2.0/24 dev iptunRouter 2
iptunnel add iptun mode ipip remote 1.2.3.4
ifconfig iptun 10.0.2.1
route add -net 10.0.1.0/24 dev iptunRouter 1
route add -net 10.0.0.0/24 dev iptun
route add -net 10.0.0.0/24 gw 10.0.0.1Now from Router 2 you can ping any device on the 10.0.0.0/24 network behind Router 1, and from any device on the 10.0.0.0/24 network, you can ping Router 1 using the address 10.0.1.1
linux | 评论:0
| Trackbacks:0
| 阅读:1363
Submitted by admin on 2011, July 8, 1:57 PM
$vip = 192.168.0.254
ifconfig tunl0 $vip netmask 255.255.255.255 broadcast $vip up
route add -host $vip dev tunl0
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden
集群/分流 | 评论:0
| Trackbacks:0
| 阅读:1038
Submitted by admin on 2011, July 8, 1:56 PM
一.实现
在Linux中,隧道的实现主要基于两个文件new_tunnel.c和ipip.c
同时Linux定义了一种新的协议类型--IPIP(IPPROTO_IPIP),与上面所说封包类型类似。
基本思路
在Linux中IP Tunnel的实现也分为两个部件:封装部件和解封部件,分别司职发送和接收。但这两个部分是在不同的层次以不同的方式实现的。封装部件是在数据链路层以虚设备的方式实现。所有源代码见
/usr/src/linux/drivers/net/new_tunnel.c
为实现封装,Linux实现一个称为tunl的网络设备(类似loopback设备),此设备具有其他网络设备共有的特征,对于使用此设备的上层应用来说,对这些网络设备不加区分,调用及处理方法当然也完全一样。
tunnel_init()和tunnel_xmit()是new_tunnel.c中的两个主要过程。
tunnel_init()初始化与设备tunl相关的device结构。
而tunnel_xmit()在从tunl设备发送数据时被调用,tunl设备作为实现IP隧道技术的封装部分,在此过程中完成对相应的数据报进行封装所需的全部操作,形成IPIP类型的IP包,并重新转发此数据包(ip_forward())。
解码器在IP的上层实现,系统把它作为一个虚的传输层(实际上与传输层毫无关系),具体处理见文件
/usr/src/linux/net/ipv4/ipip.c。
我们知道,每一个IP数据包均交由ip_rcv函数处理,在进行一些必要的判断后,ip_rcv对于发送给本机的数据包将交给上层处理程序。对于IPIP包来说,其处理函数是ipip_rcv(就如TCP包的处理函数是tcp_rcv一样,IP层不加区分)。也就是说,当一个目的地址为本机的封包到达后,ip_rcv函数进行一些基本检查并除去IP头,然后交由ipip_rcv解封。ipip_rcv所做的工作就是去掉封包头,还原数据包,然后把还原后的数据包放入相应的接收队列(netif_rx())。
从以上IP Tunnel实现的思想来看,思路十分清晰,但由于IP Tunnel的特殊性,其实现的层次并不单纯。实际上,它的封装和解封部件不能简单地象上面所说的那样分层。tunl设备虽应算进链路层,但其发送程序中做了更多的工作,如制作IPIP头及新的IP头(这些一般认为是传输层或网络层的工作),调用ip_forward转发新包也不是一个网络设备应当做的事。可以说,tunl借网络设备之名,一把抓干了不少工作,真是‘高效’。而解封部件宏观上看在网络层之上,解出IPIP头,恢复原数据包是它分内的事,但在它解出数据包(即原完整的协议数据包)后,它把这个包放入相应的协议接收队列。这种事可不是一个上层协议干的,这是网络设备中断接收程序的义务。看到了,在这点上,它好象到了数据链路层。
二.协议
1. 点对点隧道协议(PPTP)
PPTP协议允许对IP,IPX或NetBEUI数据流进行加密,然后封装在IP包头中通过企业IP网络或公共互联网络发送。
2. 第2层隧道协议(L2TP)
L2TP协议允许对IP,IPX或NetBEUI数据流进行加密,然后通过支持点对点数据报传递的任意网络发送,如IP,X.25,桢中继或ATM。
3.安全IP(IPSec)隧道模式
IPSec隧道模式允许对IP负载数据进行加密,然后封装在IP包头中通过企业IP网络或公共IP互联网络如Internet发送。
隧道协议
为创建隧道,隧道的客户机和服务器双方必须使用相同的隧道协议。
隧道技术可以分别以第2层或第3层隧道协议为基础。上述分层按照开放系统互联(OSI)的参考模型划分。第2层隧道协议对应OSI模型中的数据链路层,使用桢作为数据交换单位。PPTP,L2TP和L2F(第2层转发)都属于第2层隧道协议,都是将数据封装在点对点协议(PPP)桢中通过互联网络发送。第3层隧道协议对应OSI模型中的网络层,使用包作为数据交换单位。IP overIP以及IPSec隧道模式都属于第3层隧道协议,都是将IP包封装在附加的IP包头中通过IP网络传送。
提供PPTP客户机和PPTP服务器之间的加密通信。PPTP客户机是指运行了该协议的PC机,如启动该协议的Windows95/98;PPTP服务器是指运行该协议的服务器,如启动该协议的WindowsNT服务器。PPTP是PPP协议的一种扩展。它提供了一种在互联网上建立多协议的安全虚拟专用网(VPN)的通信方式。远端用户能够透过任何支持PPTP的ISP访问公司的专用网。
通过PPTP,客户可采用拨号方式接入公用IP网。拨号用户首先按常规方式拨到ISP的接入服务器(NAS),建立PPP连接;在此基础上,用户进行二次拨号建立到PPTP服务器的连接,该连接称为PPTP隧道,实质上是基于IP协议的另一个PPP连接,其中的IP包可以封装多种协议数据,包括TCP/IP、IPX和NetBEUI。PPTP采用了基于RSA公司RC4的数据加密方法,保证了虚拟连接通道的安全。对于直接连到互联网的用户则不需要PPP的拨号连接,可以直接与PPTP服务器建立虚拟通道。PPTP把建立隧道的主动权交给了用户,但用户需要在其PC机上配置PPTP,这样做既增加了用户的工作量,又会给网络带来隐患。另外,PPTP只支持IP作为传输协议。
第2层转发(L2F)
L2F是Cisco公司提出隧道技术,作为一种传输协议L2F支持拨号接入服务器将拨号数据流封装在PPP桢内通过广域网链路传送到L2F服务器(路由器)。L2F服务器把数据包解包之重新注入(inject)网络。与PPTP和L2TP不同,L2F没有确定的客户方。应当注意L2F只在强制隧道中有效。(自愿和强制隧道的介绍参看“隧道类型”)。
第2层隧道协议(L2TP)
L2TP隧道协议是典型的被动式隧道协议,它结合了L2F和PPTP的优点,可以让用户从客户端或访问服务器端发起VPN连接。L2TP是把链路层PPP帧封装在公共网络设施如IP、ATM、帧中继中进行隧道传输的封装协议。
L2TP主要由LAC(L2TP Access Concentrator) 和LNS(L2TP Network Server) 构成,LAC支持客户端的L2TP,用于发起呼叫、接收呼叫和建立隧道;LNS是所有隧道的终点,LNS终止所有的PPP流。在传统的PPP连接中,用户拨号连接的终点是LAC,L2TP使得PPP协议的终点延伸到LNS。
L2TP的好处在于支持多种协议,用户可以保留原有的IPX、Appletalk等协议或公司原有的IP地址。L2TP还解决了多个PPP链路的捆绑问题,PPP链路捆绑要求其成员均指向同一个NAS(Network Access Server),L2TP可以使物理上连接到不同NAS的PPP链路,在逻辑上的终结点为同一个物理设备。L2TP还支持信道认证,并提供了差错和流量控制。
L2TP利用IPsec增强了安全性,支持数据包的认证、加密和密钥管理。L2TP/IPSec因此能为远程用户提供设计精巧并有互操作性的安全隧道连接。这对安全的远程访问和安全的网关之间连接来说,它是一个很好的解决方案。因此,安全的VPN需要同时解决好L2TP和IPSec这两个不同的问题。L2TP协议解决了穿过IP网络的不同用户协议的转换问题;IPSec协议(加密/解密协议)解决了通过公共网络传输信息的保密问题。
IP网上的L2TP使用UDP和一系列的L2TP消息对隧道进行维护。L2TP同样使用UDP将L2TP协议封装的PPP桢通过隧道发送。可以对封装PPP桢中的负载数据进行加密或压缩。 PPTP与L2TP
PPTP和L2TP都使用PPP协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。尽管两个协议非常相似,但是仍存在以下几方面的不同:
PPTP要求互联网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接。L2TP可以在IP(使用UDP),桢中继永久虚拟电路(PVCs),X.25虚拟电路(VCs)或ATM VCs网络上使用。
PPTP只能在两端点间建立单一隧道。L2TP支持在两端点间使用多隧道。使用L2TP,用户可以针对不同的服务质量创建不同的隧道。
L2TP可以提供包头压缩。当压缩包头时,系统开销(overhead)占用4个字节,而PPTP协议下要占用6个字节。
L2TP可以提供隧道验证,而PPTP则不支持隧道验证。但是当L2TP或PPTP与IPSEC共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道。
IPSec隧道模式
IPSec在IP层上对数据包进行高强度的安全处理,提供数据源地验证、无连接数据完整性、数据机密性、抗重播和有限业务流机密性等安全服务。各种应用程序可以享用IP层提供的安全服务和密钥管理,而不必设计和实现自己的安全机制,因此减少密钥协商的开销,也降低了产生安全漏洞的可能性。IPSec可连续或递归应用,在路由器、防火墙、主机和通信链路上配置,实现端到端安全、虚拟专用网络(VPN)和安全隧道技术。
IPSEC是第3层的协议标准,支持IP网络上数据的安全传输。本文将在“高级安全”一部分中对IPSEC进行详细的总体介绍,此处仅结合隧道协议讨论IPSEC协议的一个方面。除了对IP数据流的加密机制进行了规定之外,IPSEC还制定了IPoverIP隧道模式的数据包格式,一般被称作IPSEC隧道模式。一个IPSEC隧道由一个隧道客户和隧道服务器组成,两端都配置使用IPSEC隧道技术,采用协商加密机制。
为实现在专用或公共IP网络上的安全传输,IPSEC隧道模式使用的安全方式封装和加密整个IP包。然后对加密的负载再次封装在明文IP包头内通过网络发送到隧道服务器端。隧道服务器对收到的数据报进行处理,在去除明文IP包头,对内容进行解密之后,获的最初的负载IP包。负载IP包在经过正常处理之后被路由到位于目标网络的目的地。
IPSEC隧道模式具有以下功能和局限:
只能支持IP数据流
工作在IP栈(IPstack)的底层,因此,应用程序和高层协议可以继承IPSEC的行为。
由一个安全策略(一整套过滤机制)进行控制。安全策略按照优先级的先后顺序创建可供使用的加密和隧道机制以及验证方式。当需要建立通讯时,双方机器执行相互验证,然后协商使用何种加密方式。此后的所有数据流都将使用双方协商的加密机制进行加密,然后封装在隧道包头内。
linux | 评论:0
| Trackbacks:0
| 阅读:841
Submitted by admin on 2011, July 8, 1:56 PM
在Linux中,隧道的实现主要基于两个文件new_tunnel.c和ipip.c
同时Linux定义了一种新的协议类型--IPIP(IPPROTO_IPIP),与上面所说封包类型类似。
基本思路
在Linux中IP Tunnel的实现也分为两个部件:封装部件和解封部件,分别司职发送和接收。但这两个部分是在不同的层次以不同的方式实现的。封装部件是在数据链路层以虚设备的方式实现。所有源代码见
/usr/src/linux/drivers/net/new_tunnel.c
为实现封装,Linux实现一个称为tunl的网络设备(类似loopback设备),此设备具有其他网络设备共有的特征,对于使用此设备的上层应用来说,对这些网络设备不加区分,调用及处理方法当然也完全一样。
tunnel_init()和tunnel_xmit()是new_tunnel.c中的两个主要过程。
tunnel_init()初始化与设备tunl相关的device结构。
而tunnel_xmit()在从tunl设备发送数据时被调用,tunl设备作为实现IP隧道技术的封装部分,在此过程中完成对相应的数据报进行封装所需的全部操作,形成IPIP类型的IP包,并重新转发此数据包(ip_forward())。
解码器在IP的上层实现,系统把它作为一个虚的传输层(实际上与传输层毫无关系),具体处理见文件
/usr/src/linux/net/ipv4/ipip.c。
我们知道,每一个IP数据包均交由ip_rcv函数处理,在进行一些必要的判断后,ip_rcv对于发送给本机的数据包将交给上层处理程序。对于 IPIP包来说,其处理函数是ipip_rcv(就如TCP包的处理函数是tcp_rcv一样,IP层不加区分)。也就是说,当一个目的地址为本机的封包 到达后,ip_rcv函数进行一些基本检查并除去IP头,然后交由ipip_rcv解封。ipip_rcv所做的工作就是去掉封包头,还原数据包,然后把 还原后的数据包放入相应的接收队列(netif_rx())。
从以上IP Tunnel实现的思想来看,思路十分清晰,但由于IP Tunnel的特殊性,其实现的层次并不单纯。实际上,它的封装和解封部件不能简单地象上面所说的那样分层。tunl设备虽应算进链路层,但其发送程序中 做了更多的工作,如制作IPIP头及新的IP头(这些一般认为是传输层或网络层的工作),调用ip_forward转发新包也不是一个网络设备应当做的 事。可以说,tunl借网络设备之名,一把抓干了不少工作,真是‘高效’。而解封部件宏观上看在网络层之上,解出IPIP头,恢复原数据包是它分内的事, 但在它解出数据包(即原完整的协议数据包)后,它把这个包放入相应的协议接收队列。这种事可不是一个上层协议干的,这是网络设备中断接收程序的义务。看到 了,在这点上,它好象到了数据链路层。
为实现VPN的扩展
实际上Linux只为实现隧道机制提供了一个框架,图二中的封包协议头在Linux中被忽略了,也就是说,封包头只含封包IP头,其后紧跟原IP数据 包。这样的结构用于传输公开数据没有关系,但对于一个VPN来说,安全保密是不可缺少的重要功能。我们希望通过隧道的数据可靠且不可窃取和冒充的,那么, 加密和认证就必不可少。为实现这一构想,设计以下封包协议头:
0 4 8 16 24 31
+-----+-----+-----------+------------------------+
| ver |type | hlen | OldPacketLen |
+-----------------------+------------------------+
| DeviceID | EncapID |
+-----------------------+------------------------+
| Flags | CheckSum |
+------------------------------------------------+
| IPIP Options( If any ) |
+------------------------------------------------+
. | padding |
. .
+------------------------------------------------+
图三、 IPIP头设想图
ver: 版本号,利于扩展
type: 用于建立不同目的的隧道(可能处理上有差别)
OldPacketLen: 进入隧道的原数据包长度
DeviceID: 对数据包进行封装的设备标识
EncapID: 此封包的ID号
Flags: 标志位,共16位,初步定义如下:
0 保留
1 有否加密
2 有否做摘要
3 有否签名
4 保留
5 有否传送消息密钥
6 消息密钥有否加密
7 消息密钥是否需保留
8-15 保留
CheckSum: 头校验
IPIP Options: 用来传送一些必要的数据,比如消息密钥、签名等
格式:
+-------------------------------------+
| 类型 | 长度 | 数据 ... |
+-------------------------------------+
好了,有了这个东西,我们就可以扩展Linux IP Tunnel为我们的VPN服务了。首先,改写new_tunnel.c和ipip.c两个文件,加入对IPIP头的处理。
接着,我们要实现一种密钥的管理和传送机制。
当然,对称密钥是必需的,而对IP数据包加密要使用序列密码。从全体考虑,
我们可以提出建立VPN的逻辑步骤;
1、准备工作:建网安装系统完成配置等等
2、隧道的两端分别向对方发送自己的公开密码和设备号
3、如有必要,产生序列密码,后加密签名传给对方
4、正常通信,----放心,你的数据已经很保险了。
在一个VPN的隧道中,一个封包的格式应如图四所示。
/ +-----------------+
| | 封包IP头 |
封包头 | +-----------------+
| | 封包协议头 |
+-----------------+
/ | |
| | 原协议头 |
| | 及 |
封包数据 | | 原协议数据 |
| . (密文) .
| . .
| | |
+-----------------+
图四. VPN封包结构
你的几种使用方法
事情往往不能两全其美,你在安全强度和通信速度上必须作出选择,(不然你就需要在安全强度和Money的耗费中做选择。)使用这样的协议,根据你的需求不同,你可有不同的使用方法,下面列举一些:
跨Internet的公司多个内部网之间进行通信,保密性并不重要直接使用原框架机制,无任何加密措施这样速度快、效率高,公司也不用申请多个IP地址,方便可行
一般性的商业应用,具有保密要求利用事先产生的序列密码,每次对原数据包加密安全度提高了,是一种十分实用的方法。只要强度足够,一般很难破译速度快密码 不变的方式你认为不够安全你可以自己实现一种密码传送方法,每隔一段时间更换一次密码。其中一些握手关系需要完善,有兴趣的欢迎探讨。如果发展成熟,此法 相信很有前途。
高度机密领域:敬请使用一次一密,并进行每次签名。每次产生新密钥和签名十分费时,在目前我国Internet网络的速度下几乎不可行。但相信有此需要的 部门也能够设法提高其网络带宽,让网络状况适合这种应用。另外,当然还可以就加密强度自身作出选择,比如选择128位,还是512位、1024位
待完善
主要牵涉 到隧道的管理,在封包的传送过程中如果出现错误是十分正常的,当一台路由器检测到错误时,它会发送一个ICMP包给隧道的发送端,但遗憾的是ICMP返回 的数据除了IP头外,只含8个字节的上层协议信息。只凭这个难以对ICMP信息作出反应,因此,在隧道端保留一些状态信息是必须的。这些信息主要包括:
隧道的另一端的可达性
隧道的拥塞状况
隧道的MTU
同时所发送的封包信息也是需要保留的,举例说,当一个路由不可达信息到来时,封包的发送者要能够找出所封装的数据来自何方,并发送相应的ICMP包。
linux | 评论:0
| Trackbacks:0
| 阅读:866