quagga路由进程连接限制

quagga套件内的每个路由进程,都会起1个独立的端口。日常的管理我们可以通过直接telnet 端口登录到相应的路由进程做操作。出于安全的考虑,我们需要对连接到这些路由进程的ip做限制。以只允许本地连接为例,zebra.conf/ospfpd.conf的配置如下 access-list allowed permit 127.0.0.1/32 access-list allowed deny any ! line vty access-class allowed !

April 29, 2015 · 1 min · pm

vtysh批量执行命令

在使用quagga的过程中,实际有很多非交互式的场景,比如想批量做路由撤销的操作。从一个系统管理员的角度上看,希望对软路由的控制像直接在linux里写脚本一样简单方便。之前在vtysh里行执行路由撤销命令我是用expect实现的 实际有更简单的方式 这样可以简单对expect的依赖,脚本编写也更简洁。

March 15, 2015 · 1 min · pm

arp_announce引发的1个ARP问题

最近配置服务器时遇到在dummy0上宣告的公网地址不能正常访问公网的问题。网络的基本结构为2个网卡分别上联2个交换机,跑OSPF。在dummy0上会单独宣告1个公网的地址。自己通过在zebra内修改路由表使得访问公网时设置自己宣告的公网地址为源IP。 以前这个方案实际线上跑了多次,一直OK。最近有一套服务器安装这样的配置会出现刚启动时是OK的,过段时间就歇菜了。简单地说实际的情况如下:T1 (192.168.1.2 )–> 交换机A的Port X(192.168.1.1)T2 (192.168.2.2 )–> 交换机B的Port X(192.168.2.1)平时默认都走T1,公网的路由表默认学到的网关实际是T2的对端地址。当本地公网地址不能出去的时候,我自己带源地址(架设公网地址是4.4.4.4)ping,发现发送的ARP请求都是这样 Request who-has 192.168.2.1 tell 4.4.4.4 此时交换机上发现4.4.4.4实际不是和自己一个网段的地址,不会进行回复。就使得这本地这个公网地址出不去。解决这个问题就是加内核参数 net.ipv4.conf.all.arp_announce=1 下面是fix后的情况,可以看到使用的是接口上的IP为源IP发的ARP请求。 附上参数说明 rp_announce - INTEGER Define different restriction levels for announcing the local source IP address from IP packets in ARP requests sent on interface: 0 - (default) Use any local address, configured on any interface 1 - Try to avoid local addresses that are not in the target's subnet for this interface. This mode is useful when target ...

October 24, 2014 · 2 min · pm

自动化配置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