Access、Hybrid和Trunk三种模式的理解

untag就是普通的ethernet报文,普通PC机的网卡是可以识别这样的报文进行通讯;
tag报文结构的变化是在源mac地址和目的mac地址之后,加上了4bytes的vlan信息,也就是vlan tag头;一般来说这样的报文普通PC机的网卡是不能识别的

下图说明了802.1Q封装tag报文帧结构

带802.1Q的帧是在标准以太网帧上插入了4个字节的标识。其中包含:
2个字节的协议标识符(TPID),当前置0x8100的固定值,表明该帧带有802.1Q的标记信息。
2个字节的标记控制信息(TCI),包含了三个域。
Priority域,占3bits,表示报文的优先级,取值0到7,7为最高优先级,0为最低优先级。该域被802.1p采用。
规范格式指示符(CFI)域,占1bit,0表示规范格式,应用于以太网;1表示非规范格式,应用于Token Ring。
VLAN ID域,占12bit,用于标示VLAN的归属。
以太网端口有三种链路类型:Access、Hybrid和Trunk。
Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口;
Trunk类型的端口可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,一般用于交换机之间连接的端口;
Hybrid类型的端口可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,可以用于交换机之间连接,也可以用于连接用户的计算机。
Hybrid端口和Trunk端口在接收数据时,处理方法是一样的,唯一不同之处在于发送数据时:Hybrid端口可以允许多个VLAN的报文发送时不打标签,而Trunk端口只允许缺省VLAN的报文发送时不打标签。

在这里先要向大家阐明端口的缺省VLAN这个概念
Access端口只属于1个VLAN,所以它的缺省VLAN就是它所在的VLAN,不用设置;
Hybrid端口和Trunk端口属于多个VLAN,所以需要设置缺省VLAN ID。缺省情况下,Hybrid端口和Trunk端口的缺省VLAN为VLAN 1
如果设置了端口的缺省VLAN ID,当端口接收到不带VLAN Tag的报文后,则将报文转发到属于缺省VLAN的端口;当端口发送带有VLAN Tag的报文时,如果该报文的VLAN ID与端口缺省的VLAN ID相同,则系统将去掉报文的VLAN Tag,然后再发送该报文。
注:对于华为交换机缺省VLAN被称为“Pvid Vlan”, 对于思科交换机缺省VLAN被称为“Native Vlan”

fuel中的vlan设置

之前部署fuel 的在一个物理接口上面绑定了多个vlan,下午查看了一个文档,看了一下具体实现方式。原来在CentOS6里面配置vlan已经相当方面了,比如我想在eth1上面配置vlan101,直接配置如下文件即可:

DEVICE=eth1.101
IPADDR=192.168.0.3
NETMASK=255.255.255.0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
VLAN=yes

表示我开启一个vlan101并虚拟一个接口eth1.101放到此vlan中,而最为关键的是经过此配置后eth1是默认为trunk模式,所以数据能出来啊。

参考地址:

https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s2-networkscripts-interfaces_802.1q-vlan-tagging.html

http://network.51cto.com/art/201311/415869_all.htm

fuel中的实例网关设置疑难解决

这几天安装试用了fuel 4.0,功能设置还挺方便的。因为使用flatdhcp模式,所以想把虚拟机的实际网关指向交换机中配置的实际IP地址,fuel中使用dnsmasq从openstack捞IP分配给实例,默认分配的网关是br100的网桥地址,一般为xxx.xxx.xxx.3,但这样的结果就是虚拟机和外部并不能通信。后来查询资料通过修改dnsmasq的相关配置实现,方法如下:

1.修改/etc/dnsmasq.conf文件添加:

dhcp-option=option:router,10.10.13.250

2.修改/etc/nova/nova.conf添加:

dnsmasq_config_file=/etc/dnsmasq.conf

经过这样修改后虚拟机可以得到实际的网关,这个网关英文叫hardware gateway,可以翻译作 “硬网关”吗?另外,这里的网关是无法在fuel 的console界面里面设置的,这点太不人性化了,得找半天才找到。

经过上述修改后虚拟机还是不能ping 硬网关,抓包什么办法都试了,无果。抓包结果如下:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br100, link-type EN10MB (Ethernet), capture size 65535 bytes
03:32:27.711268 ARP, Request who-has 10.10.13.250 tell 10.10.13.2, length 28
03:32:28.490676 STP 802.1d, Config, Flags [none], bridge-id 81f7.04:c5:a4:89:a8:00.801d, length 43
03:32:28.715561 ARP, Request who-has 10.10.13.250 tell 10.10.13.2, length 28
03:32:29.716679 ARP, Request who-has 10.10.13.250 tell 10.10.13.2, length 28
03:32:30.496860 STP 802.1d, Config, Flags [none], bridge-id 81f7.04:c5:a4:89:a8:00.801d, length 43
03:32:30.723434 ARP, Request who-has 10.10.13.250 tell 10.10.13.2, length 28
03:32:31.727406 ARP, Request who-has 10.10.13.250 tell 10.10.13.2, length 28
03:32:32.505213 STP 802.1d, Config, Flags [none], bridge-id 81f7.04:c5:a4:89:a8:00.801d, length 43
03:32:32.728025 ARP, Request who-has 10.10.13.250 tell 10.10.13.2, length 28
03:32:33.746869 ARP, Request who-has 10.10.13.250 tell 10.10.13.2, length 28
03:32:34.506225 STP 802.1d, Config, Flags [none], bridge-id 81f7.04:c5:a4:89:a8:00.801d, length 43

可以在网桥上面看到并没有主机响应10.10.13.250这个IP,就是数据出不去。后来查询发现,因为我的主机是virtualbox中模拟,要想数据出去网卡要设置混杂模式才可以。

经过以上设置虚拟机果真可以ping  硬网关了,不再呵呵了。

后记:
混杂模式 :
一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序
参考网址:

http://www.mirantis.com/blog/openstack-networking-flatmanager-and-flatdhcpmanager/

http://lynnkong.iteye.com/blog/1699883

racktables AD认证

修改secret.php文件:

$LDAP_options = array
(
        'server' => '172.20.1.250',
        'domain' => 'test-inc.com',
        'search_attr' => 'sAMAccountName',
        'search_dn' => 'OU=Users,DC=test-inc,DC=com',
        'search_attr' => 'uid',
        'cache_refresh' => 300,
        'cache_retry' => 15, 
        'cache_expiry' => 600,
);

还要配置里面permission的allow_user,添加每一个用户到里面:
allow {$username_yinxuexiang}

ruby多个版本安装

在ubuntu 13.04上ruby默认是1.9的,要安装ruby 1.8.7如下:

In console:
apt-get install ruby1.8 rubygems
gem install rails -v=2.3.8
To check installed versions:
ruby -v
rails -v

参考:http://stackoverflow.com/questions/18095046/how-to-install-rails-2-3-8-and-ruby-1-8-7

linux下面快速删除大量文件及快速复制大量小文件

(1)快速删除大量小文件

    今天遇见一个百万级的cache目录,删了20+分钟只删掉一个目录。。。。
    在网上找到了一种巧妙的快速删除方法,原理很简单,使用rsync同步一个空目录即可。对于万级文件的目录基本是秒删,回车就OK。
    步骤如下:
    1、建立一个空目录
        mkdir -p /tmp/rsync_blank
    2、确立需要清空的目标目录
        /data/ooxx
    3、使用rsync同步删除(注意目录后面的“/”),整体效率会快一个数量级的样子。
        rsync –delete-before -a -H -v –progress –stats /tmp/rsync_blank/ /data/ooxx/
    选项说明:
    –delete-before 接收者在传输之前进行删除操作
    –progress 在传输时显示传输过程
    -a 归档模式,表示以递归方式传输文件,并保持所有文件属性
    -H 保持硬连接的文件
    -v 详细输出模式
    -stats 给出某些文件的传输状态
    一般我们不需要显示进度,使用以下命令即可
        rsync –delete-before -a -H /tmp/rsync_blank/ /data/ooxx/
  这样我们要删除的 cache目录就会被清空了。
tips:
当SRC和DEST文件性质不一致时将会报错
当SRC和DEST性质都为文件【f】时,意思是清空文件内容而不是删除文件
当SRC和DEST性质都为目录【d】时,意思是删除该目录下的所有文件,使其变为空目录
最重要的是,它的处理速度相当快,处理几个G的文件也就是秒级的事
最核心的内容是:rsync实际上用的就是替换原理

 

  (2)快速复制大量小文件方法
  1,在需要对大量小文件进行移动或复制时,用cp、mv都会显得很没有效率,可以用tar先压缩再解压缩的方式。
  2,在网络环境中传输时,可以再结合nc命令,通过管道和tcp端口进行传输。
  nc和tar可以用来快速的在两台机器之间传输文件和目录,比ftp和scp要来得简单的多。
  由于nc是一个超轻量的命令,所以一般busybox都会集成它。当一个linux终端,比如linux pda,
  通过usblan的方式连接到另一台linux主机的时候,这样的嵌入式终端上一般不会集成ftp server, ssh server
  这样比较笨重的服务,这个时候, nc可能成为唯一的上传手段。
  比如将机器A上的mytest目录上传到到机器 B(192.168.0.11)上,只需要:
  在机器B上,用nc来监听一个端口,随便就好,只要不被占用;并且将收到的数据用tar展开。-l代表监听模式。
  #nc -l 4444 |tar -C /tmp/dir -zxf -
  然后,在A上通过nc和 tar发送test目录。使用一致的4444的端口。
  #tar -zcvf  –  test|nc 192.168.0.11 4444
REF:
http://www.blogjava.net/hongqiang/archive/2012/07/12/382939.html

Installing vSphere cli on Centos 6

VMware vSphere cli requires many CPAN libraries. On Centos 6 I have enabled EPEL repositoryand installed packages:

yum install perl-Compress-Raw-Zlib perl-Archive-Zip perl-Compress-Zlib perl-IO-Compress-Zlib perl-IO-Zlib \
perl-Crypt-SSLeay perl-ExtUtils-MakeMaker perl-libwww-perl perl-Net-SSLeay perl-SOAP-Lite perl-URI \
perl-XML-LibXML rpm-build uuid-perl libuuid-devel lwp-devel perl-Data-Dump perl-libxml-perl

But UUID is still missing and must be compiled from source.

First install development tools

yum groupinstall "Development Tools"

Then download and compile UUID

wget http://search.cpan.org/CPAN/authors/id/L/LZ/LZAP/UUID-0.05.tar.gz

tar xvzf UUID-0.05.tar.gz
cd UUID-0.05
perl Makefile.PL
make
make install

Finally vSphere cli installation

./vmware-install.pl

succeeded.

apache 整合svn

apache 和svn编辑参数如下:
apache的

"./configure" \
"--prefix=/usr/local/httpd" \
"--enable-modules=most" \
"--enable-mods-shared=most" \
"--enable-so" \
"--enable-dav" \
"--enable-maintainer-mode" \
"--with-mpm=prefork" \
"--with-apr=/usr/local/apr" \
"--with-apr-util=/usr/local/apr-util/" \
"--with-pcre=/usr/local/pcre/" \
"--sysconfdir=/usr/local/httpd/conf/" \
"--with-included-apr" \
"$@"

svn的

#! /bin/sh
#
# Created by configure

'./configure'  '--prefix=/usr/local/svn' '--with-apr=/usr/local/apr' \
'--with-apr-util=/usr/local/apr-util/' '--with-neon=/usr/local/neon/' \
'--with-apxs=/usr/local/httpd/bin/apxs' '--enable-maintainer-mode' "$@"

apache与svn整合配置 :
httpd.conf添加如下内容:

LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so

svn.conf配置如下:

<Location /svn>
  DAV svn
  SVNParentPath /home/svn
  AuthType Basic
  AuthName "Subversion repository"
  AuthzSVNAccessFile /home/svn/authz.conf
  AuthUserFile /home/svn/authfile
  Require valid-user
</Location>


下面建立可访问用户文件
# htpasswd -c /home/svn/authfile 用户名
要增加用户,则使用下面命令
# htpasswd /home/svn/authfile 用户名

权限分配:
[qq:/]
test = rw

[/]
yinxuexiang = rw

Feed