quagga یک نوع نرم افزار مسیریابی تحت لینوکس می باشد که از zebra منشعب شده و پروتکل های مسیریابی همچون RIPv۱,RIPv۲,OSPFv۲,OSPFv۳,BGP-۴و +BGP-۴را پشتیبانی میکند.(معرفی این پروتکل ها خارج از بحث ما می باشد .

در فدورا و دبین از quagga بجای zebra استفاده میشود و همراه با cd و dvd های آنها عرضه میشود(من در اینجا سیستم را دبین در نظر گرفتم که تنها تفاوت با سیستم های دیگر در نصب میباشد که براحتی میتوانید این مسئله را حل کنید)

مراحل نصب :

#apt-get install quagga

 فایل تنظیمات در 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 runCurrent 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 رو به نمایش گذاشت

تامین امنیت :

 شاید فکر کنید که هر کس میتونه با راه انداختن یک روتر و تنظیم اون به شبکه ما متصل بشه…برای جلوگیری از این کار فایروال رو بدین ترتیب تنظیم میکنیم

از این اسکریپت استفاده میکنیم

#!/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

همونطور که پیداست امکان ارتباط وجود نداره پس تنظیمات ما بدرستی اعمال شده است.