Submitted by admin on 2011, August 3, 8:43 AM
http://wiki.solusvm.com/index.php/KVM_Network_Bridge_Setup
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1236
Submitted by admin on 2011, August 3, 8:42 AM
Xen桥接网络非常灵活,然而逻辑和管理方面也还算简单
桥接设备
- bridge, 网桥;一般起名为:xenbr0, xenbr1, etc.
- vif, 虚拟网络接口;一般起名为:vif0.0,vif0.1, etc.
- veth/eth, 虚拟网络设备;一般起名为:eth0, etc.
桥接工具
- /etc/xen/script/network-bridge, 网桥操作脚本
- /etc/xen/script/vif-bridge, 虚拟接口操作脚本
- brctl 工具,事实上以上两个脚本均调用了它
排查步骤
- brctl show; 再看桥接是否OK。
- ethtool peth; 先看物理网卡通不通。
- ifconfig vif; 看各虚拟接口是否正常。
- ifconfig eth/veth; 看看虚拟网络设备是否正常。
http://wiki.xensource.com/xenwiki/XenNetworking
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1418
Submitted by admin on 2011, August 3, 8:39 AM
本文介绍了Xen桥接网络及出故障时可采用的工具和方法:
Xen桥接网络非常灵活,然而逻辑和管理方面也还算简单。
桥接设备
- bridge, 网桥;一般起名为:xenbr0, xenbr1, etc.
- vif, 虚拟网络接口;一般起名为:vif0.0,vif0.1, etc.
- veth/eth, 虚拟网络设备;一般起名为:eth0, etc.
桥接工具
- /etc/xen/script/network-bridge, 网桥操作脚本
- /etc/xen/script/vif-bridge, 虚拟接口操作脚本
- brctl 工具,事实上以上两个脚本均调用了它
排查步骤
- brctl show; 再看桥接是否OK。
- ethtool peth; 先看物理网卡通不通。
- ifconfig vif; 看各虚拟接口是否正常。
- ifconfig eth/veth; 看看虚拟网络设备是否正常。
链接
Xen网络联接方式
Xen 提供了 3 种虚拟网络模型来供客户机访问物理设备——桥接、路由和 NAT。在桥接模式中,虚拟网络接口(vif)在外部局域网是可见的,在路由模型中,vif 在外部局域网是不可见的,但是 IP 是可见的。在 NAT 模型中,vif 在外部局域网不可见,它也没有一个外部可见的 IP 地址。
在桥接模式下, brctl 工具被用来创建软件方式的桥接接口,一个物理网络接口然后附加到桥上。Xen 客户机域的后端 vif 能被附加到这个桥上。当桥接口接收到来自物理接口的包时,物理网络接口将依据各域的虚拟网卡的 MAC 地址转发它们到不同的域上。
在路由模型下将使用 iptables 机制来进行路由。由物理接口所收到的所有的包将被驱动域的网络 IP 层所处理。驱动域(dom0)查找路由表条目并将包转发到不同的客户机 IP 地址。在路由模式下,驱动域连接 2 个不同的网段:内部由客户机使用的网段和连接外部网络的网段。
在驱动域作为一个 NAT 网关时,驱动域仍然作为一个路由器,但是更进一步映射一个它自己的 IP 地址和端口到一个客户机的 IP 地址和端口。客户机的 IP 地址隐藏在驱动域后面对外部网络不可见。
Linux 防火墙提供了 iptables ,而 bridge-utils 则提供了 etables 来进行基本的 MAC 地址过滤。也可以指定一个物理网卡给一个域使用。
Xen网络结构相当灵活,适当配置可以“轻松”实现dom0/domU与物理网络三者之间的复杂拓扑。
桥接模式
图一、Xen 桥接模式示意图
下图是个桥接的例子。
veth0、vif0.0 是 dom0 的网络接口。veth0 被重命名为 eth0。xenbr0 接口是软桥接接口。vif1.0 是运行的客户机的后端网络接口
peth0、xenbr0、vif0.0、vif1.0 都共享同样的 MAC 地址 FE:FF:FF:FF:FF:FF,它是以太网的广播地址。这意味着实际的网络接口、dom0 的回环接口、客户机的后端接口都向 xenbr0 广播。当物理网卡接收到包时,它直接发送到桥接接口 xenbr0,这个桥接接口通过包的 MAC 地址决定将包转发到哪个域的后端接口。因此 peth0 不需要 IP,只需要 MAC 地址。物理接口的原先 IP 已经被告知给 eth0——驱动域的虚拟前端接口。
xenbr0 通过 MAC 地址是 00:11:25:F6:15:22 或者是 00:16:3e:45:e7:12 来决定包转发到 eth0 或者 vif1.0。客户域相应的前端接口被命名为 eth0。从 dom0 的角度看,客户机中 eth0 实际是 vif1.0。
brctl 命令的显示:
- [user@Dom0]# brctl show
- bridge name bridge id STP enabled interfaces
- xenbr0 8000.feffffffffff no vif1.0
- peth0
- vif0.0
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1683
Submitted by admin on 2011, August 1, 8:14 PM
实验室一直使用Squid来做代理服务器,今天突发奇想希望统计一下大家的上网情况。故写了一个简单的网络流量分析脚本。拿来和大家分享一下。
首先得打开Squid的access_log功能:
access_log /usr/local/squid/var/logs/access.log squid
默认的日志格式如下:
access.log中的日志规则:time elapsed remotehost code/status bytes method URL rfc931 peerstatus/peerhost type
1 time 表示客户端访问的时间,毫秒,从1970/0101开始
2 elapsed 客户请求所花费的时间,毫秒
3 remotedhost 客户机的IP地址
4 code/status 客户请求类型/HTTP返回码
5 bytes 客户请求的数据大小
6 method 客户请求的方法
7 URL 客户请求的URL
8 rfc931 客户认证信息
9 peerstatus/peerhost 缓冲/目的IP
10 type 客户请求对象类型
查看活跃的客户端
cat access.log | awk '{print$3}' | sort > sortresult.log
cat access.log | awk '{print$3}' | sort -u > iplist.log
sortresult.log中存储就是每次访问来源的IP地址,iplist.log中存储的是sortresult中不重复的IP,也就是客户端IP列表。
查看总的链接请求个数:
cat sortlist.log | wc -l
查看某个IP发出了多少次链接请求:
cat sortlist.log | grep 210.45.***.*** |wc -l
流量统计
统计总的数据流量大小(以M为单位):cat access.log |awk '{print $5}'|awk '{m+=$1}END{print m/1024/1024}'
查看各种请求方式的数量(以POST为例):
cat access.log | awk '{print $6}'|grep "POST"|wc -l
查看有多少链接来自腾讯QQ:cat access.log |grep ".qq.com" |wc -l
最后将希望特别关注的信息写入了一个shell脚本,以日志文件名为参数,产生自己关心的数据。
#!/bin/bash
echo -n "总的网络链接数:"
cat $1 | wc -l
echo -n "访问数据总流量(单位:M)"
cat $1 |awk '{print $5}'|awk '{m+=$1}END{print m/1024/1024}'
echo -n "访问 renren.com的链接数:"
cat $1 | grep ".renren."|wc -l
echo -n "访问 xiaonei.com的链接数:"
cat $1 | grep ".xiaonei."|wc -l
echo -n "访问 qq.com的链接数:"
cat $1 |grep ".qq."|wc -l
echo -n "访问 taobao.com的链接数:"
cat $1 | grep ".taobao."|wc -l
echo -n "访问 youku.com的链接数:"
cat $1 | grep ".youku."|wc -l
echo -n "访问 ykimg.com(youku的镜像站点)的链接数:"
cat $1 | grep ".ykimg."|wc -l
echo -n "访问 ku6.com的链接数:"
cat $1 |grep ".ku6."|wc -l
echo -n "访问 tudou.com的链接数:"
cat $1 |grep ".tudou."|wc -l
echo -n "访问 paipai.com的链接数:"
cat $1 |grep ".paipai."|wc -l
echo -n "访问 sina.com的链接数:"
cat $1 | grep ".sina."|wc -l
echo -n "访问 163.com的链接数:"
cat $1 | grep ".163."|wc -l
echo -n "访问 sohu.com的链接数:"
cat $1 | grep ".sohu."|wc -l
echo -n "访问 xunlei.com的链接数:"
cat $1 |grep ".xunlei."|wc -l
echo -n "访问 baidu.com的链接数:"
cat $1 |grep ".baidu."|wc -l
echo -n "访问 google.com的链接数:"
cat $1 |grep ".google."|wc -l
echo -n "访问 neu6.edu的链接数:"
cat $1 |grep ".neu6."|wc -l
对下午4个小时的网络日志进行分析的结果是:
总的网络链接数:48441
访问数据总流量(单位:M)1587.98
访问 renren.com的链接数:1253
访问 xiaonei.com的链接数:94
访问 qq.com的链接数:6461
访问 taobao.com的链接数:3544
访问 youku.com的链接数:1610
访问 ykimg.com(youku的镜像站点)的链接数:953
访问 ku6.com的链接数:54
访问 tudou.com的链接数:113
访问 paipai.com的链接数:1349
访问 sina.com的链接数:1602
访问 163.com的链接数:1692
访问 sohu.com的链接数:501
访问 xunlei.com的链接数:58
访问 baidu.com的链接数:2375
访问 google.com的链接数:1464
访问 neu6.edu的链接数:388
转
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1441
Submitted by admin on 2011, August 1, 8:13 PM
以前写了个Squid防盗链,不好用,现在更新了一下,有更加好用的。呵呵.
见下面的内容。我设置的例子是在squid上对mp3和wma进行控制防盗链.其实原理很容易啦,主要是对referer进行控制,更加高级的大家可以研究一下用cookie来进行控制。有空我也写个出来.
acl wmvurl url_regex -i \.mp3$ \.wma$ \.exe$
#要控制的后缀
acl phpoaref referer_regex -i ^http://.*\.php-oa\.com
#可以链接的网站
acl legalplayer browser -i Firefox ^NSPlayer ^contype$ ^rma ^windows-media-player ^foobar2000 ^RealMedia ^RealPlayer
#要在线直播的软件
http_access allow legalplayer wmvurl
http_access allow phpoaref wmvurl
#先让上面这些条件都可以的,让他们可以通过
http_access deny !phpoaref wmvurl
http_access deny !legalplayer wmvurl
#先accept后deny.
deny_info http://www.php-oa.com/error.jpg phpoaref
#deny时出错时,给显示的出错的图
转
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1319
Submitted by admin on 2011, August 1, 8:12 PM
squid日志里面默认记录的时间都是根据标准时间计算后加上毫秒记录的,不便于查看。
网上搜了搜,仿佛有许多方法都可以进行转换,但是想想还是麻烦,其实squid可以直接改日志的记录格式的。
打开squid的配置文件/etc/squid/squid.conf
找到下面这句,并取消注释
#logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%S
再找到:
access_log /var/log/squid/access.log squid
修改成
access_log /var/log/squid/access.log combined
重启squid
得到的日志格式就跟apache日志格式相似了
转
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1355
Submitted by admin on 2011, August 1, 8:11 PM
在squid中access访问日志最为重要,位于/var/log/squid/access.log,常用的记录格式如下
例如:
下面来看看意思
1206507660.803 84367 192.168.1.114 TCP_MISS/502 1486 GET
http://123.138.238.114/QQ2008SpringKB1.exe - DIRECT/123.138.238.114 text/html
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt
解释如下:
%ts Seconds since epoch;
%03tu subsecond time (milliseconds);
%6tr Response time (milliseconds);
%>a Client source IP address;
%Ss Squid request status (TCP_MISS etc);
%03Hs HTTP status code;
%<st Reply size including HTTP headers;
%rm Request method (GET/POST etc) ;
%ru Request URL;
%un User name;
%Sh Squid hierarchy status (DEFAULT_PARENT etc);
%<A Client FQDN;
%mt MIME content type
我喜欢下面这样,可以输出 squid 日志的请求头
logformat squid_test_log %{%y%m%d%H%M%S}tl.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt "%>h"
>h Request header. Optional header name argument on the format header[:[separator]element]
<h Reply header. Optional header name argument as for >h
squid的日志很重要。常常要了解的,其中最重要的就是命中率啦,不然反向代理做的用就不大。
#cat access.log|gawk ‘{print $4}’|sort|uniq -c|sort -nr
9568 TCP_IMS_HIT/304
6313 TCP_HIT/200
2133 TCP_MISS/200
1568 TCP_MISS/206
587 TCP_MEM_HIT/200
531 TCP_MISS/304
207 TCP_REFRESH_HIT/200
152 TCP_REFRESH_HIT/304
86 TCP_NEGATIVE_HIT/404
69 TCP_MISS/404
9 TCP_MISS/000
4 TCP_MISS/503
1 TCP_REFRESH_MISS/000
1 TCP_DENIED/400
可以使用上面的方法,大约的分析一下命令中比。什么意思就看下面的详解.
#cat /var/log/squid/access.log |grep TCP_MEM_HIT
如果看到很多的TCP_MEM_HIT ,这表明该文件是从内存缓存读取的,squid已经起作用了!你再用浏览器打开该文件,应该是快如闪电了。。呵呵,大功告成了!还有其他类型的HIT,如TCP_HIT等等,这些是从磁盘读取的,我觉得加速的意义不大,只不过缓解了apache的压力而已。
相应于HTTP请求,下列标签可能出现在access.log文件的第四个域。
TCP_HIT
Squid发现请求资源的貌似新鲜的拷贝,并将其立即发送到客户端。
TCP_MISS
Squid没有请求资源的cache拷贝。
TCP_REFERSH_HIT
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器返回304(未修改)响应,指示squid的拷贝仍旧是新鲜的。
TCP_REF_FAIL_HIT
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。然而,原始服务器响应失败,或者返回的响应Squid不能理解。在此情形下,squid发送现有cache拷贝(很可能是陈旧的)到客户端。
TCP_REFRESH_MISS
Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器。原始服务器响应新的内容,指示这个cache拷贝确实是陈旧的。
TCP_CLIENT_REFRESH_MISS
Squid发现了请求资源的拷贝,但客户端的请求包含了Cache-Control: no-cache指令。Squid转发客户端的请求到原始服务器,强迫cache确认。
TCP_IMS_HIT
客户端发送确认请求,Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端,而不联系原始服务器。
TCP_SWAPFAIL_MISS
Squid发现请求资源的有效拷贝,但从磁盘装载它失败。这时squid发送请求到原始服务器,就如同这是个cache丢失一样。
TCP_NEGATIVE_HIT
在对原始服务器的请求导致HTTP错误时,Squid也会cache这个响应。在短时间内对这些资源的重复请求,导致了否命中。 negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache,不会写往磁盘。下列HTTP状态码可能导致否定 cache(也遵循于其他约束): 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。
TCP_MEM_HIT
Squid在内存cache里发现请求资源的有效拷贝,并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如,某些cache在内存里,但要求确认的响应,会以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式记录。
TCP_DENIED
因为http_access或http_reply_access规则,客户端的请求被拒绝了。注意被http_access拒绝的请求在第9域的值是NONE/-,然而被http_reply_access拒绝的请求,在相应地方有一个有效值。
TCP_OFFLINE_HIT
当offline_mode激活时,Squid对任何cache响应返回cache命中,而不用考虑它的新鲜程度。
TCP_REDIRECT
重定向程序告诉Squid产生一个HTTP重定向到新的URI(见11.1节)。正常的,Squid不会记录这些重定向。假如要这样做,必须在编译squid前,手工定义LOG_TCP_REDIRECTS预处理指令。
NONE
无分类的结果用于特定错误,例如无效主机名。
相应于ICP查询,下列标签可能出现在access.log文件的第四域。
UDP_HIT
Squid在cache里发现请求资源的貌似新鲜的拷贝。
UDP_MISS
Squid没有在cache里发现请求资源的貌似新鲜的拷贝。假如同一目标通过HTTP请求,就可能是个cache丢失。请对比UDP_MISS_NOFETCH。
UDP_MISS_NOFETCH
跟UDP_MISS类似,不同的是这里也指示了Squid不愿去处理相应的HTTP请求。假如使用了-Y命令行选项,Squid在启动并编译其内存索引时,会返回这个标签而不是UDP_MISS。
UDP_DENIED
因为icp_access规则,ICP查询被拒绝。假如超过95%的到某客户端的ICP响应是UDP_DENIED,并且客户端数据库激活了(见附录A),Squid在1小时内,停止发送任何ICP响应到该客户端。若这点发生,你也可在cache.log里见到一个警告。
转
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1305
Submitted by admin on 2011, July 28, 6:39 PM
使用的i909手机的免费流量是2G,不过如果要用手机看美剧,这个流量就有点不足。但是,当前我所被覆盖的无线网,上网需要手动设置上网路由。Android里面我还没有找到现成的能够设置路由的软件,不过经摸索,却找出了通过终端使用超级用户模式手工设置路由的办法。
首先确保机器已经root了,还安装了busybox和Emulator。
启动Emulator,然后输入命令:
# ip route show
172.18.0.0/16 dev eth0 src 172.18.3.80
default via 172.18.1.170 dev eth0
有井号的行是命令,没有的是输出结果。上述命令用于显示手机当前的路由。下面的命令删除手机的默认路由。如果出错,说明可能没有安装好busybox。
查看路由只需要普通权限,删除、添加、修改路由都需要超级用户权限。
# su ip route del default
然后,添加默认路由和一条通往内网另一个网段的路由
# su route add default gw 172.18.1.252
# su route add -net 192.30.1.0 netmask 255.255.255.0 gw 172.18.1.170
最后查看新的路由设置,下面的结果表示设置成功了。
#ip route show
192.30.1.0/24 via 172.18.1.170 dev eth0
172.18.0.0/16 dev eth0 src 172.18.3.80
default via 172.18.1.252 dev eth0
当前我使用的busybox有个问题就是命令返回出错结果,它也不会提示任何信息。此外,使用手机键盘输入实在麻烦,解决的一个办法是使用SSH,通过电脑来控制手机。
注意:不同版本的emulator, busybox, 命令稍微有差异,例如最近升级后,su命令需要而且只要首次单独执行一次,此后都不用su, 其次,route add 命令的格式也与电脑版本Linux更接近,需要用route add -net 此类的语法了。
近期升级后,我手机上修改路由的语句变成了:
su
ip route del default
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.18.1.252
route add -net 192.30.1.0 netmask 255.255.255.0 gw 172.18.1.170
android | 评论:0
| Trackbacks:0
| 阅读:1329