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]
همونطور که پیداست امکان ارتباط وجود نداره پس تنظیمات ما بدرستی اعمال شده است.