自动化配置ospf脚本

前面有提到过自己写的一个自动化在服务器上配置quagga跑ospf的脚本。简单说一下适用的环境1. 服务器同时有千兆和万兆的接入,万兆接入交换机上起OSPF,互联地址每个网卡使用/30的一段地址。2. ospf的验证需要和交换机相一致。3. 使用dummy0宣告单独的万兆服务地址使用的方式比较简单 sh confi g_ospf.sh eth4 eth5 192.168.1.1 当交换机上配置好ospf,就能自动抓包分析配置,在本地dummy0宣告192.168.1.1的地址了。 #!/bin/s h #****************************************************************# # ScriptName: confi g _ospf.sh # Author: [email protected] # Create Date: 2013-10-30 11:29 # Modify Author: [email protected] # Modify Date: 2014-05-16 14:18 # Function: #***************************************************************# . /etc/profi le #DEVS=(eth4 eth5) declare -A IPS declare -A AREAS declare -A MASKS declare -A NETWORKS declare -A HELLOTIMES declare -A DEADTIMES declare -A GATEWAYS OSPF_PASS=OSPF—PASS-WORD #if no bond0, set GIGADEV=() GIGADEV=( bond0 ) INNET_GATEWAY="172.15.1.1" NET=30 TMP=/tmp/autoconfi g.$$ get_link_confi g(){ killall -9 zebra ospfd for dev in ${DEVS[@]} do #tcpdump ifconfi g $dev up echo "get $dev info" tcpdump -i $dev proto ospf -nn -v -c1 2>/dev/null >$TMP RIP=$(grep OSPFv2 $TMP |awk ‘{print $1}’) if [ $RIP ];then LIP=$( echo $RIP|sed “s/.*.//”) ...

May 27, 2014 · 4 min · pm

单机跑20G带宽

大家知道2个千兆网卡做bond,mode4的时候因为是两个网卡都会有流量,出口的带宽总和就是 网卡数量X单网卡带宽。一般双网卡的机器我们的上联带宽就是2Gbps了。如果2个网卡都是万兆的,当处于万兆pod内,就可以通过做bond来使得单机具备20G的出口带宽。但如果服务器是和上联的交换机跑ospf的,默认的情况下只能学到1条默认路由,出口的带宽就只有10G了。我们可以通过打开quagga的multipath,使得能同时学习到2条默认路由。首先需要确认我们的内核是支持IP_ROUTE_MULTIPATH 的 #grep CONFIG_IP_ROUTE_MULTIPATH /boot/config-uname -r CONFIG_IP_ROUTE_MULTIPATH=y 其次就是编译quagga的时候打开multipath了。 ./configure –disable-ipv6 –enable-multipath=2 - 启动后可以看到能学到2条metric值一样的路由 default proto zebra metric 11 nexthop via 192.10.193.5 dev eth4 weight 1 nexthop via 192.10.194.5 dev eth5 weight 1 实际测试单机可以跑到18G左右的流量

May 16, 2014 · 1 min · pm

时间管理

现实工作中,大家都会觉得工作压力非常大,尤其大公司要面对许多部门的协作,效率更是被降低了很多,往往是一堆事情需处理,最终每天堆着加班都干不完的活。时间长了,自然觉得幸福感非常低,生活也非常累,工作中毫无乐趣可言。 记得刚工作那会,新人都是负责登录值班旺旺,处理各种日常的事情。每天IM上排队等着我处理事情的人都很多,并发度经常大于10个,上个厕所回来未接电话都有好几个。新人最大的苦难其实在于自身对业务不是太熟悉,人不熟,遇到问题troubleshooting的思路也不够成熟,很多事情拖着还没有搞定又一堆新的活来了。这样的处境困扰了我大概半年左右。被折腾了半年左右后有所好转。主要因为:(1) 业务上的东西比较熟练了,绝大部分日常问题能很快解决,单个事情的处理时间缩短了很多;(2) 人际关系慢慢建立起来了,也学会了寻求帮助,总的来说是能帮别人把问题搞好;(3) 通过不断的积累,个人基础技能得到了提升,troubleshooting比较顺手。 不过实际上自己还是处于每天忙碌的状态,非常累。尤其是后来慢慢接管了很多线上的维护工作,压力比之前更大。每天依旧是忙忙碌碌,似乎在血汗工厂中完全迷失了自己。以前的众多爱好也慢慢都因为没时间逐渐忘记。 还好在公司内认识的人比较多,我也比较乐于向很多人请教。开始是有人推荐了一本番茄工作法图解。本来我是不太习惯看这类书的,因为一直觉得很多东西还是要靠自己的实践,别人的经验很多时候没有啥意义。不过看了之后自己做了一些调整,感觉工作上的节奏把握稍微有些改善。简单说一下我自己看了之后的收获: 番茄工作法图解(1) 我们的大脑实际是不擅长多线程的,如果一次只做一件事情,更容易集中精力,提升效率。如果日常工作不断被人打断,自己每次扔下做了一半的事情又去做另外的一个事情,如此循环,最终只是未完成的事情越来越多。所以要学会把后面来的需求放到队列里,自己去安排好优先级,要学会让人等待。其实绝大部分事情不是非常紧急的,反正不急那几分钟。要把随机来的需求队列化。 (2) 要能在一个适当的时间段(20-30分钟)内集中精力做一件事情,没过一段时间稍微放松休息一下。这样不会造成一天一直处于疲惫的状态。在这段时间内,一定要能做到心无杂念地去思考,工作。在嘈杂的环境下需要慢慢培养自己集中精力的能力。 (3) 每天要大致规划一下需要做的事情,做一下todolist,自己根据实际的优先级进行粗步的时间安排。保证每天能做完觉大部分需要做的事情。这样每天都能有做完大部分事情,工作上也能得到绝大部分人的认可,自己也能有点成就感,而且不会被搞马拉松式的工作累死。对于有的工作量大一点的事情,每天更新一下进度情况,保证每天能有一点的进展,只要保证整体的工期OK,自己灵活安排好。 (4) 想好要做的事情,不要拖延。拖延的原因往往是心里没有把握,或者觉得不急。可以让自己做事更积极主动,这样自己对所有事情的掌控力也会好些,能推动事情往往给人的感觉也会好些。 (5) 或许我们每天的工作是平谈无奇,但是要能做工作中找点兴趣点,找到自己工作的价值。这样才不会觉得工作就是无聊的谋生手段。 (6) 学会跟进自己的身体情况,调整工作的节奏,健康第一。 另外就是在大公司,和其他团队的协助也是比较重要的。要逐渐在协作中了解彼此的工作,相互理解。只有相互有信任之后,别人才会真把你的事情当成他自己的事情一样重要来处理,当你有求于人的时候别人也会主动帮忙。

April 21, 2014 · 1 min · pm

小型高可用NAT网关设计

小企业内,很多都是直接拿1台Linux服务器用iptables做NAT,给内部服务器提供上网的需求。但是这样的NAT网关实际很容易成为单点。所以在设计的时候最好还是需要做一下HA。简单的考虑小规模场景,可以2个服务器起一个keepalived跑VRRP,把网关的IP和SNAT的IP都做浮动IP。这样单机挂掉的时候能自动进行切换。 如果公网地址足够,最好是需用一个段做SNAT地址池。比如64个地址的话就ifcfg-eth0:1~ifcfg-eth0:64,每个配置文件把公网地址配置上去 DEVICE="eth0.X:Y" BOOTPROTO="static" ONBOOT="yes" TYPE="ethernet" IPADDR=aa.aa.aa.Y NETMASK=255.255.255.0 VLAN=yes PEERDNS=no /etc/sysctl.conf记得配置net.ipv4.ip_forward = 1。 iptables规则如下 *filter :INPUT ACCEPT [3:309] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [518:57577] -A INPUT -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT -A INPUT -d a.a.a.0/255.255.255.0 -i eth0.X -p tcp -j DROP -A INPUT -d a.a.a.0/255.255.255.0 -i eth0.X -p udp -j DROP COMMIT Completed on Tue Apr 15 18:21:48 2014 *nat :PREROUTING ACCEPT [6778:567991] :POSTROUTING ACCEPT [41:3373] :OUTPUT ACCEPT [41:3373] -A POSTROUTING -s 10.10.0.0/16 -o eth0.X-j SNAT --to- source aa.aa.aa.1-aa.aa.aa.64 COMMIT ...

April 15, 2014 · 1 min · pm

开放的BGP路由器

有时需要能查一些BGP的AS PATH信息,有一个“Route Views Project”项目。可以直接登录到一些zebra上直接查一下。bgp的命令可以参考quagga的手册,简单的比如:1. 查看某个网段的bgp信息 “Route Views Project” show ip bgp 8.8.8.8/24 route-views.isc.routeviews.org> show ip bgp 8.8.8.8/24 BGP routing table entry for 8.8.8.0/24 Paths: (11 available, best #11, table Default-IP-Routing-Table) Not advertised to any peer 4436 209 15169 198.32.176.13 from 198.32.176.13 (69.22.143.244) Origin IGP, metric 13, localpref 100, valid, external Community: 209:209 209:888 209:40822 4436:999 4436:31413 Last update: Mon Apr 7 12:08:01 2014 14361 15169 198.32.176.10 from 198.32.176.10 (66.36.224.11) Origin IGP, localpref 100, valid, external Last update: Thu Apr 3 19:28:25 2014 ...

April 8, 2014 · 3 min · pm

bind多个view的主备同步

上一篇blog简单写了一下使用nsupdate动态更新DNS记录。今天再写一下在多个view的时候如何设置主备的自动同步。多个view的主备同步主要是是主备之间每个view都使用共享key进行消息的签名。master的配置和之前的稍微有点小的改动 include "/opt/bind/etc/rndc.key"; include "/opt/bind/etc/views.key"; // controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; // acl test1 { 10.201.0.0/16; }; acl test2 { 192.0.0.0/8; }; acl slavedns { 10.144.149.61; 127.0.0.1; }; options { listen-on port 53 { any; }; listen-on-v6 { none; }; directory "/opt/bind/etc/"; dump-file "/opt/bind/var/named/data/cache_dump.db"; statistics-file "/opt/bind/var/named/data/named_stats.txt"; memstatistics-file "/opt/bind/var/named/data/named_mem_stats.txt"; zone-statistics yes; allow-query { any; }; recursion config recursion yes; max-ncache-ttl 60; recursive-clients 2000; ...

March 6, 2014 · 5 min · pm

多个view的时候使用nsupdate更新记录

大家经常使用bind的时候是划分不同的view的,因为每个view的zone需要单独修改,所以人肉修改是比较麻烦的。这个时候可以使用nsupdate进行批量的操作。只要注意每个view使用正确的记录就行。使用nsupdate需要给每个view都创建一个key,每个view指定允许对应的这个key能更新。views.key文件: key "default" { algorithm hmac-md5; secret "GkbQ6Q2WtVqu9pk8WzPDOA=="; }; key "test1" { algorithm hmac-md5; secret "4qEjC+NgFmRvGdt8DuCRDA=="; }; key "test2" { algorithm hmac-md5; secret "88PUPwk66CbQacWCgFG0kw=="; }; named.conf文件 controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; // acl test1 { 10.0.0.0/8; }; acl test2 { 192.0.0.0/8; }; acl slavedns { 192.18.208.31; //ztt dns1 127.0.0.1; }; options { listen-on port 53 { any; }; listen-on-v6 { none; }; directory "/opt/bind/etc/"; dump-file "/opt/bind/var/named/data/cache_dump.db"; statistics-file "/opt/bind/var/named/data/named_stats.txt"; memstatistics-file "/opt/bind/var/named/data/named_mem_stats.txt"; zone-statistics yes; allow-query { any; }; ...

March 2, 2014 · 4 min · pm

根据AS号查询IP段

he.net上可以直接看到任何AS所归属的IP段。可以写个脚本查询一下,默认是把curl屏蔽了的可以改一下UA。 #!/usr/bin/python import urllib2 import sys import os import re import string class AS_TO_ACL: def __init__(self,asnum): self.asnum=asnum; self.url="http://bgp.he.net/AS%s#_prefixes"%(self.asnum) self.cidr=set(); def http_client(self,url): request=urllib2.Request(url,headers={'User-agent':"Chrome 27.0"}) try: response=urllib2.urlopen(request,timeout=5) info=response.info() data=response.read() except urllib2.HTTPError,error: print “%s error:%s” %(url,error.reason) return None except urllib2.URLError,error: print error.reason return None else: outdata=data return outdata def get_acl(self): htmldata=self.http_client(self.url) ip_reg=re.compile("/net/(\d+\.\d+.\d+\.\d+/\d+)") htmls=htmldata.split(); for line in htmls: match=ip_reg.search(line) if match: ips=match.group(1) self.cidr.add(string.strip(ips)) for ip in self.cidr: print “%s;\n”%(ip), if len(sys.argv)<2: print “error!” print “as_to_acl ASN” sys.exit(1) query=AS_TO_ACL(sys.argv[1]) query.get_acl() ...

February 24, 2014 · 1 min · pm

tc做网络延迟、丢包模拟

在生产环境上经常需要模拟一下应用间异地调用的场景,或者模拟一下协议栈优化在丢包的情况下是否有效果。可以使用netem来做。具体的直接看看的介绍就行。 Examples Emulating wide area network delays This is the simplest example, it just adds a fixed amount of delay to all packets going out of the local Ethernet. Real wide area networks show variability so it is possible to add random variation. tc qdisc change dev eth0 root netem delay 100ms 10msThis causes the added delay to be 100ms ± 10ms. Network delay variation isn’t purely random, so to emulate that there is a correlation value as well. tc qdisc change dev eth0 root netem delay 100ms 10ms 25%This causes the added delay to be 100ms ± 10ms with the next random element depending 25% on the last one. This isn’t true statistical correlation, but an approximation. Delay distribution ...

February 23, 2014 · 4 min · pm

用Graphviz画图LVS的示意图

最近几天写文档比较多,天天都在画图。画了一个LVS的图。之前画Master和Slave的时候不能把这2个放一层,后来看到有subgraph这个属性,可以定义几个是同一个rank来做。 digraph G{ "x.xxx.com"->{"Master\nLVS1"}[label="192.168.1.250",color=red]; “x.xxx.com”->{“Slave\nLVS2”}[style=dashed]; "Master\nLVS1"->{"RS1"; "RS3"; "RS2"}[color=red,style="filled"]; "Slave\nLVS2"->{"RS1"; "RS3"; "RS2"}[color=blue,style=dashed]; {"Master\nLVS1"[style=filled,fillcolor=red]}->{"Slave\nLVS2"[style=filled,fillcolor=blue]} [dir=both,label="VRRP VIP\n192.168.1.250",color=blue]; subgraph { rank = same; “Master\nLVS1”; “Slave\nLVS2”; } } ![lvs1](/picture/c837eb32.png)

February 20, 2014 · 1 min · pm