quagga یک نوع نرم افزار مسیریابی تحت لینوکس می باشد که  از zebra منشعب شده و پروتکل های مسیریابی همچون  RIPv۱,RIPv۲,OSPFv۲,OSPFv۳,BGP-۴و +BGP-۴را پشتیبانی میکند.(معرفی این  پروتکل ها خارج از بحث ما میباشد برای شناخت بهتر به کتابهای CCNAو BCMSN  شرکت سیسکو که از طریق سایت Persianadmins  میتوانید تهیه کنید.)شیوه تنظیمات quagga شبیه به IOS شرکت سیسکو میباشد  که همین عامل باعث جذب افراد آشنا به محصولات سیسکو که طیف وسیعی را تشکیل  میدهند به این نرم افزار میشود. 
    در فدورا و دبین از quagga بجای zebra استفاده میشود و همراه با cd و dvd  های آنها عرضه میشود(من در اینجا سیستم را دبین در نظر گرفتم که تنها تفاوت  با سیستم های دیگر در نصب میباشد که براحتی میتوانید این مسئله را حل  کنید) 
    مراحل نصب : 
        فایل تنظیمات در etc/quagga/ ذخیره میشود که در فدورا طی نصب این فایل ها  ساخته میشود ولی در دبین اینطور که من نصب کردم باید خودتان این فایل ها را  بسازید.تنها ۲ فایل در این دایرکتوری قرار دارد 
    	 	 daemons :
	  	
 	  	 	# This file tells the quagga package which daemons to start.
	 # Entries are in the format: <daemon>=(yes|no|priority)
	 #   ۰, "no"  = disabled
	 #   ۱, "yes" = highest priority
	 #   ۲ .. ۱۰  = lower priorities
	 #
	 zebra=no
	 bgpd=no
	 ospfd=no
	 ospf۶d=no
	 ripd=no
	 ripngd=no
	 isisd=no 	
 	  همونطور که از اسمش معلومه سرویس های مختلف quagga رو فعال میکنه و در حالت  پیش فرض همگی غیرفعالن که برای  فعال کردنشون باید no رو به yes تبدیل  کنیم 
       	 	 debian.conf : 	
 	  	 	  	 	 # If this option is set the /etc/init.d/quagga script automatically loads
	  # the config via "vtysh -b" when the servers are started.
	  #
	 vtysh_enable=yes
	 zebra_options=" –daemon -A ۱۲۷.۰.۰.۱"
	 bgpd_options="  –daemon -A ۱۲۷.۰.۰.۱"
	 ospfd_options=" –daemon -A ۱۲۷.۰.۰.۱"
	 ospf۶d_options="–daemon -A ::۱"
	 ripd_options="  –daemon -A ۱۲۷.۰.۰.۱"
	 ripngd_options="–daemon -A ::۱"
	 isisd_options=" –daemon -A ۱۲۷.۰.۰.۱" 	
 	     برای پیکربندی quagga و سرویس ها مختلفتش مانند RIP, OSPF و … میبایست از  telnet برای اتصال البته با port های متفاوت استفاده کرد , همچنین تنظیمات  این پروتکل ها دقیقا همانند مسیریابهای سیسکو میباشد. 
    port های مورد استفاده را می توان از طریق فایل etc/services/ مشاهده کرد 
       	 	behroozi:~# grep zebra /etc/services
	 zebrasrv        ۲۶۰۰/tcp                        # zebra service
	 zebra            ۲۶۰۱/tcp                        # zebra vty
	 ripd              ۲۶۰۲/tcp                         # ripd vty (zebra)
	 ripngd          ۲۶۰۳/tcp                          # ripngd vty (zebra)
	 ospfd           ۲۶۰۴/tcp                          # ospfd vty (zebra)
	 bgpd            ۲۶۰۵/tcp                         # bgpd vty (zebra)
	 ospf۶d          ۲۶۰۶/tcp                         # ospf۶d vty (zebra)
	 isisd           ۲۶۰۸/tcp                           # ISISd vty (zebra)  	
 	 اول از هر چیز باید مشخص کنیم چکار میخوایم انجام بدیم که من چون اکثر ما  روتر سیسکو برای تست نداریم با روتر نرم افزاری ویندوز ۲۰۰۳ این کارو انجام  میدم 
    در ادامه ما با یک ارتباط rip دو شبکه مشخص شده در دیاگرام زیر را بهم وصل میکنیم  
           برای مشاهده تصویر بزرگتر روی عکس کلیک کنید  
       
 
     
 
            برای اینکار ابتدا میبایست در فایل daemons تغییراتی بدین شکل انجام بدهیم 
          	 zebra=yes
	 bgpd=no
	 ospfd=no
	 ospf۶d=no
	 ripd=yes
	 ripngd=no
	 isisd=no
     الان باید فایل های zebra.conf و ripd.conf و بسازیم و تنظیمات اولیه را در آنها قرار بدهیم 
      
  	  	 	#cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf 	
 	     حالا فایل ripd.conf 
       	 	 #cp /usr/share/doc/quagga/examples/ripd.conf.sample /etc/quagga/ripd.conf 	
 	     بعد از ساختن فایل تنظیمات ابتدایی سرویس quagga را دوباره راه اندازی میکنیم 
       	 	behroozi:~# /etc/init.d/quagga restart
	 Stopping Quagga daemons (prio:۰): (waiting) .. ripd (waiting) .. zebra (bgpd) (ripngd) (ospfd) (ospf۶d).
	 Removing all routes made by zebra.
	 Nothing to flush.
	 Loading capability module if not yet done.
	 Starting Quagga daemons (prio:۱۰): zebra ripd.
	 behroozi:~#  	
 	   به zebra برای انجام تنظیمات اولیه وصل میشویم 
       	 	behroozi:~# telnet ۱۲۷.۰.۰.۱ ۲۶۰۱
	 Trying ۱۲۷.۰.۰.۱…
	 Connected to ۱۲۷.۰.۰.۱.
	 Escape character is '^]'.  	 	 Hello, this is Quagga (version ۰.۹۸.۳).
	 Copyright ۱۹۹۶-۲۰۰۵ Kunihiro Ishiguro, et al. 	
 	  	 	 User Access Verification 	
 	  	 	 Password: (zebra)
	 Router> en
	 Password:  (zebra)
	 Router# 	
 	
 	   یک سری تنظیمات اولیه از قبیل تغییر پسورد و hostname همچنیم شما میتوانید ip هم از این طریق تغییر دهید 
       	 	Router#conf t
	 Router(config)# password reza
	 Router(config)# enable password persianadmins
	 behroozi(config)# hostname persianadmins.com
	 persianadmins.com(config)#
	 persianadmins.com(config)# service password-encryption
	 persianadmins.com(config)# int eth۰
	 persianadmins.com(config-if)# ip address ۱۹۲.۱۶۸.۰.۱/۲۴
	 persianadmins.com(config-if)# exit
	 persianadmins.com(config)# int eth۱
	 persianadmins.com(config-if)# ip address ۱۹۲.۱۶۸.۱.۱/۲۴
	 persianadmins.com(config-if)# exit
	 persianadmins.com(config)# exit
	 persianadmins.com# sh run  	 	 Current configuration:
	 !
	 hostname persianadmins.com
	 password ۸ ETqePsm۶sd۵o۶
	 enable password ۸ ۵B۵WeM۱SCnAag
	 service password-encryption
	 !
	 interface eth۰
	  ip address ۱۹۲.۱۶۸.۰.۱/۲۴
	 !
	 interface eth۱
	  ip address ۱۹۲.۱۶۸.۱.۱/۲۴
	 !
	 interface lo
	 !
	 ipv۶ forwarding
	 !
	 line vty
	 !
	 end
	 persianadmins.com#
	 persianadmins.com# write memory
	 Configuration saved to /etc/quagga/zebra.conf
	 persianadmins.com# 	
 	
 	     با استفاده از service password-encryption مشاهده میکنید که پسورد از حالت  plain-text بیرون آمده پس حتما از این دستور استفده کنید, ۲ نکنته رو باید  در تنظمیات بالا توجه کنید که با اضافه کردن ip از این طریق تغییری در ip  قبلی بوجود نمیاد و این ip به آنها اضافه میشود…همچنین در انتها باید  تنظمیات صورت گرفته را با write memory ذخیره کرد. 
    	 	 behroozi:~# ifconfig
	 eth۰      Link encap:Ethernet  HWaddr ۰۰:۰C:۲۹:۵F:۶۰:A۲
	           inet addr:۱۹۲.۱۶۸.۰.۱   Bcast:۱۹۲.۱۶۸.۰.۲۵۵  Mask:۲۵۵.۲۵۵.۲۵۵.۰
	           UP BROADCAST RUNNING MULTICAST  MTU:۱۵۰۰  Metric:۱
	           RX packets:۵۵۳۲۳ errors:۰ dropped:۰ overruns:۰ frame:۰
	           TX packets:۳۵۳۴۶ errors:۰ dropped:۰ overruns:۰ carrier:۰
	           collisions:۰ txqueuelen:۱۰۰۰
	           RX bytes:۶۶۶۲۵۶۲ (۶.۳ MiB)  TX bytes:۵۱۵۷۶۸۴ (۴.۹ MiB)
	           Interrupt:۱۸ Base address:۰×۱۰۸۰  	
 	  	 	  	 	eth۱      Link encap:Ethernet  HWaddr ۰۰:۰C:۲۹:۵F:۶۰:AC
	           inet addr:۱۹۲.۱۶۸.۱.۱  Bcast:۱۹۲.۱۶۸.۱.۲۵۵  Mask:۲۵۵.۲۵۵.۲۵۵.۰
	           UP BROADCAST RUNNING MULTICAST  MTU:۱۵۰۰  Metric:۱
	           RX packets:۱۳۱ errors:۰ dropped:۰ overruns:۰ frame:۰
	           TX packets:۰ errors:۰ dropped:۰ overruns:۰ carrier:۰
	           collisions:۰ txqueuelen:۱۰۰۰
	           RX bytes:۸۲۴۴ (۸.۰ KiB)  TX bytes:۰ (۰.۰ b)
	           Interrupt:۱۹ Base address:۰×۱۴۰۰  	
 	     همونطور که در بالا میبینید تغییرات اعمال شده است. 
    قبل از تنظیم rip از workstation۲ به workstation۱ دستور ping رو میزنیم تا نتیجه رو با بعد مقایسه کنیم  
    	 	workstation۲:~# ping ۱۹۲.۱۶۸.۲.۲
	 PING ۱۹۲.۱۶۸.۲.۲ (۱۹۲.۱۶۸.۲.۲) ۵۶(۸۴) bytes of data.
	 From ۱۹۲.۱۶۸.۰.۱ icmp_seq=۱ Destination Host Unreachable
	 From ۱۹۲.۱۶۸.۰.۱ icmp_seq=۲ Destination Host Unreachable
	 From ۱۹۲.۱۶۸.۰.۱ icmp_seq=۳ Destination Host Unreachable
	 From ۱۹۲.۱۶۸.۰.۱ icmp_seq=۴ Destination Host Unreachable 	
 	     تنظیمات rip: 
       	 	behroozi:~# telnet ۱۲۷.۰.۰.۱ ۲۶۰۲
	 Trying ۱۲۷.۰.۰.۱…
	 Connected to ۱۲۷.۰.۰.۱.
	 Escape character is '^]'.  	 	 Hello, this is Quagga (version ۰.۹۸.۳).
	 Copyright ۱۹۹۶-۲۰۰۵ Kunihiro Ishiguro, et al. 	
 	  	 	 User Access Verification 	
 	  	 	 Password: (zebra)
	 ripd> en
	 ripd#
	 ripd# conf t
	 ripd(config)# password reza
	 ripd(config)# enable password persianadmins
	 ripd(config)#router rip
	 ripd(config-router)# network ۱۹۲.۱۶۸.۰.۰/۲۴
	 ripd(config-router)# network ۱۹۲.۱۶۸.۱.۰/۲۴
	 ripd(config-router)# version ۲
	 ripd(config)#
	 ripd# sh run 	
 	  	 	 Current configuration:
	 !
	 hostname ripd
	 password reza
	 enable password persianadmins
	 log stdout
	 !
	 router rip
	  version ۲
	  network ۱۹۲.۱۶۸.۰.۰/۲۴
	  network ۱۹۲.۱۶۸.۱.۰/۲۴
	 !
	 line vty
	 !
	 end
	 ripd#
	 ripd# write memory
	 Configuration saved to /etc/quagga/ripd.conf
	 ripd# 	
 	
 	      حالا باید سرویس رو دوباره راه اندازی کرد 
    	 	#/etc/init.d/quagga restart  	
 	     نوبت به تنظیمات ویندوز میرسد که من به صورت تصویری اینجا میزارم  
                            حالا دوباره از workstation۲ به workstation۱ دستور ping رو اجرا میکنیم 
       	 	workstation۲:~# ping ۱۹۲.۱۶۸.۲.۲
	 PING ۱۹۲.۱۶۸.۲.۲ (۱۹۲.۱۶۸.۲.۲) ۵۶(۸۴) bytes of data.
	 ۶۴ bytes from ۱۹۲.۱۶۸.۲.۲: icmp_seq=۱ ttl=۶۴ time=۱.۴۵ ms
	 ۶۴ bytes from ۱۹۲.۱۶۸.۲.۲: icmp_seq=۲ ttl=۶۴ time=۰.۰۸۲ ms
	 ۶۴ bytes from ۱۹۲.۱۶۸.۲.۲: icmp_seq=۳ ttl=۶۴ time=۰.۰۴۳ ms
	 ۶۴ bytes from ۱۹۲.۱۶۸.۲.۲: icmp_seq=۴ ttl=۶۴ time=۰.۰۴۲ ms
	 ۶۴ bytes from ۱۹۲.۱۶۸.۲.۲: icmp_seq=۵ ttl=۶۴ time=۰.۰۴۱ ms 	
 	  	 	— ۱۹۲.۱۶۸.۲.۲ ping statistics —
	 ۵ packets transmitted, ۵ received, ۰% packet loss, time ۴۰۳۴ms
	 rtt min/avg/max/mdev = ۰.۰۴۱/۰.۳۳۲/۱.۴۵۴/۰.۵۶۱ ms
	 workstation۲:~#  	
 	     مشاهده میکنید که ارتباط برقرار شده …همچنین برای دیدن جدول routing بدین ترتیب عمل میکنیم 
    در لینوکس 
        در ویندوز 
           توجه داشته باشید که مثال بالا بخش کوچکی از دستورات quagga رو به نمایش  گذاشت که برای دیدن دستورات و عملکرد کامل اون میتوانید این 
PDF  را دانلود کنید 
     شاید فکر کنید که هر کس میتونه با راه انداختن یک روتر و تنظیم اون به  شبکه ما متصل بشه…برای جلوگیری از این کار فایروال رو بدین ترتیب تنظیم  میکنیم 
    از این اسکریپت استفاده میکنیم 
    	 	#!/bin/bash
	 I=/sbin/iptables
	 #flush all rules
	 $I –F
	 #allow packets on the loopback interface
	 $I -A INPUT -i lo -j ACCEPT
	 #reject all zebra vtys
	 $I -A INPUT -p tcp –dport ۲۶۰۱:۲۶۰۲ -i eth+ -j REJECT
	 #allow the rip neighbors to connect to udp port ۵۲۰
	 $I –A INPUT –p udp –-dport ۵۲۰ –s ۱۹۲.۱۶۸.۰.۲ –j ACCEPT
	 #reject the rest of the world for the udp port ۵۲۰
	 $I –A INPUT –p udp –-dport ۵۲۰ –j REJECT 	
 	     برای اینکه فقط از طریق localhost بتوان telnet کرد access-list بدین شکل مینویسیم 
    	 	behroozi:~# telnet ۱۲۷.۰.۰.۱ ۲۶۰۱
	     Trying ۱۲۷.۰.۰.۱…
	     Connected to ۱۲۷.۰.۰.۱.
	     Escape character is '^]'. 	
 	  	 	  	 	    Hello, this is Quagga (version ۰.۹۸.۳).  	
 	  	 	     Copyright ۱۹۹۶-۲۰۰۵ Kunihiro Ishiguro, et al.
	 User Access Verification 	
 	  	 	 Password:
	 persianadmins.com> en
	 Password:
	 persianadmins.com#
	 persianadmins.com# conf t
	 persianadmins.com(config)# access-list ۱ permit host ۱۲۷.۰.۰.۱
	 persianadmins.com(config)# access-list ۱ deny any
	 persianadmins.com(config)# line vty
	 persianadmins.com(config-line)# access-class ۱
	 persianadmins.com(config-line)# exit  	
 	
  	 برای تست تنظیمات بالا بوسیله telnet از کامپیوتری دیگر به پورت های ۲۶۰۱ و ۵۲۰ متصل میشویم 
    	 	C:\Documents and Settings\reza>telnet ۱۹۲.۱۶۸.۰.۱  ۲۶۰۱
	 Connecting To ۱۹۲.۱۶۸.۰.۱….Could not open connection to the host, on port ۲۶۰۱: Connect failed 	
 	  	 	C:\Documents and Settings\reza>telnet ۱۹۲.۱۶۸.۰.۱  ۲۶۰۲
	 Connecting To ۱۹۲.۱۶۸.۰.۱….Could not open connection to the host, on port ۲۶۰۲: Connect failed 	
 	  همونطور که پیداست امکان ارتباط وجود نداره پس تنظیمات ما بدرستی اعمال شده است. 
       نویسنده :    رضا بهروزی