quagga یک نوع نرم افزار مسیریابی تحت لینوکس می باشد که  از zebra منشعب شده و پروتکل های مسیریابی همچون  RIPv۱,RIPv۲,OSPFv۲,OSPFv۳,BGP-۴و +BGP-۴را پشتیبانی میکند.(معرفی این  پروتکل ها خارج از بحث ما میباشد برای شناخت بهتر به کتابهای CCNAو BCMSN  شرکت سیسکو که از طریق سایت وب هاستینگ تالک و پرشین ادمین   میتوانید تهیه کنید.)شیوه تنظیمات quagga شبیه به IOS شرکت سیسکو میباشد  که همین عامل باعث جذب افراد آشنا به محصولات سیسکو که طیف وسیعی را تشکیل  میدهند به این نرم افزار میشود. 
    در فدورا و دبین از quagga بجای zebra استفاده میشود و همراه با cd و dvd  های آنها عرضه میشود(من در اینجا سیستم را دبین در نظر گرفتم که تنها تفاوت  با سیستم های دیگر در نصب میباشد که براحتی میتوانید این مسئله را حل  کنید) 
    مراحل نصب : 
   
	کد PHP:
	
     [LEFT]     #apt-get install quagga     
[/LEFT] 
         فایل تنظیمات در etc/quagga/ ذخیره میشود که در فدورا طی نصب این فایل ها  ساخته میشود ولی در دبین اینطور که من نصب کردم باید خودتان این فایل ها را  بسازید.تنها ۲ فایل در این دایرکتوری قرار دارد 
   
	کد PHP:
	
     [LEFT]      daemons :
          [/LEFT]                # 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 تبدیل  کنیم 
      
	کد PHP:
	
           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/ مشاهده کرد 
      
	کد PHP:
	
          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 تغییراتی بدین شکل انجام بدهیم 
      
	کد PHP:
	
         zebra=yes
     bgpd=no
     ospfd=no
     ospf۶d=no
     ripd=yes
     ripngd=no
     isisd=no 
     الان باید فایل های zebra.conf و ripd.conf و بسازیم و تنظیمات اولیه را در آنها قرار بدهیم 
      
 
	کد PHP:
	
                #cp /usr/share/doc/quagga/examples/zebra.conf.sample /etc/quagga/zebra.conf 
        حالا فایل ripd.conf 
      
   
	کد PHP:
	
           #cp /usr/share/doc/quagga/examples/ripd.conf.sample /etc/quagga/ripd.conf 
        بعد از ساختن فایل تنظیمات ابتدایی سرویس quagga را دوباره راه اندازی میکنیم 
      
	کد PHP:
	
          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 برای انجام تنظیمات اولیه وصل میشویم 
      
	کد PHP:
	
          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 هم از این طریق تغییر دهید 
      
	کد PHP:
	
          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 ذخیره کرد. 
	کد PHP:
	
              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:۰×۱۰۸۰                 [LEFT]           [/LEFT]                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 رو میزنیم تا نتیجه رو با بعد مقایسه کنیم  
   
	کد PHP:
	
          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: 
      
	کد PHP:
	
             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# 
         حالا باید سرویس رو دوباره راه اندازی کرد 
   
	کد PHP:
	
     [LEFT]     #/etc/init.d/quagga restart      
[/LEFT] 
       
    نوبت به تنظیمات ویندوز میرسد که من به صورت تصویری اینجا میزارم  
                            حالا دوباره از workstation۲ به workstation۱ دستور ping رو اجرا میکنیم 
      
	کد PHP:
	
     [LEFT]     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     
[/LEFT]                — ۱۹۲.۱۶۸.۲.۲ ping statistics —
     ۵ packets transmitted, ۵ received, ۰% packet loss, time ۴۰۳۴ms
     rtt min/avg/max/mdev = ۰.۰۴۱/۰.۳۳۲/۱.۴۵۴/۰.۵۶۱ ms
     workstation۲:~# 
        مشاهده میکنید که ارتباط برقرار شده …همچنین برای دیدن جدول routing بدین ترتیب عمل میکنیم 
    در لینوکس 
        در ویندوز 
           توجه داشته باشید که مثال بالا بخش کوچکی از دستورات quagga رو به نمایش  گذاشت که برای دیدن دستورات و عملکرد کامل اون میتوانید این 
PDF  را دانلود کنید 
     شاید فکر کنید که هر کس میتونه با راه انداختن یک روتر و تنظیم اون به  شبکه ما متصل بشه…برای جلوگیری از این کار فایروال رو بدین ترتیب تنظیم  میکنیم 
    از این اسکریپت استفاده میکنیم 
	کد PHP:
	
        [LEFT]     #!/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     
[/LEFT] 
        برای اینکه فقط از طریق localhost بتوان telnet کرد access-list بدین شکل مینویسیم 
   
	کد PHP:
	
     [LEFT]     behroozi:~# telnet ۱۲۷.۰.۰.۱ ۲۶۰۱
         Trying ۱۲۷.۰.۰.۱…
         Connected to ۱۲۷.۰.۰.۱.
         Escape character is '^]'.     
[/LEFT]                               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 از کامپیوتری دیگر به پورت های ۲۶۰۱ و ۵۲۰ متصل میشویم 
	کد PHP:
	
        [LEFT]     C:\Documents and Settings\reza>telnet ۱۹۲.۱۶۸.۰.۱  ۲۶۰۱
     Connecting To ۱۹۲.۱۶۸.۰.۱….Could not open connection to the host, on port ۲۶۰۱: Connect failed     [/LEFT]           [LEFT]     C:\Documents and Settings\reza>telnet ۱۹۲.۱۶۸.۰.۱  ۲۶۰۲
     Connecting To ۱۹۲.۱۶۸.۰.۱….Could not open connection to the host, on port ۲۶۰۲: Connect failed     [/LEFT] 
     همونطور که پیداست امکان ارتباط وجود نداره پس تنظیمات ما بدرستی اعمال شده است.