Anycast نامی است که به یک (IPV4) کروی یا (IPV6) داده میشود که از مسیریابهای متعدد درون یک (WAN) یا (AS) اعلام شده است. در واقع Anycast یک پروتکل نیست بلکه یک تکنیک شبکه ای است.
Anycast به پروتکلهای مسیریابی داخلی مانند OSPF، EIGRP یا iBGP اجازه میدهد تا این اعلامیههای مختلف را کنترل کرده و سریعترین مسیر را از طریق الگوریتمهای منتخب مربوطهی خود انتخاب کنند. (مثل Dijkstra برای OSPF)
Anycast یک شبکهی توزیع “جغرافیایی” را فراهم میکند که ارسال سریع محتویات را ممکن میسازد. همانطور که میدانیم خدمات وب، سیستم آگاه نام دامنه و البته وابسته است. وب جهانی بوده و بدون مرز است. محتویات آن باید در دسترس باشند و از هر جایی قابلاستفاده باشند، اما فیزیک هنوز یک واقعیت در روی کره زمین است. Anycast با سیستم نام دامنه، پاسخ بسیار سریع همه کاربردها و محتوای مبتنی بر وب را فراهم میکند. Anycast اغلب در شبکههای تحویل محتوا (CDNs) مانند Cloudflare یا Akamai مورد استفاده قرار میگیرد.
سادهترین و پرکاربردترین مورد استفاده در سیستم نام دامنه است. از آنجا که همهی خدمات مبتنی بر وب، وابسته به DNS هستند، تمام مشتریان باید یک یا چند درخواست DNS را به انجام برسانند. بسیار بد، سرور DNS شما در طرف دیگر جهان است. یعنی ۵۰۰ میلیثانیه برای دانلود ۴ بایت داده! برخی افراد پیش از بازگشت درخواست DNS از پنجره مرورگر، از CTRL + F4 استفاده میکنند.
یک پاسخ بسیار ساده برای این مساله وجود دارد: Anycast. بیایید فرض کنیم که ما ۲ عدد روتر داریم که iBGP را با هم اجرا میکنند (همانگونه که در AS هستند). از OSPF بهعنوان پروتکل مسیریابی داخلی استفاده میشود. روتر ۱ روتر لبه است و روتر ۲ یک روتر اصلی خواهد بود که ممکن است به IXs یا یک ISP متصل شود. همچنین ما به یک سرور نیاز داریم که نقش سرور DNS متصل به روتر Edge را بازی میکند. یک آدرس anycast معمولاً به صورت ۳۲ در IPv4 یا ۱۲۸ در IPv6 نوشته میشود، چون که در یک گره تحت شکل واسط Loopback وجود دارد.
توجه داشته باشید که تمام مراحل این کار بیشتر با سرورهای مشابه anycast پیکربندی شده در سراسر جهان توزیع میشود. این سرورها بهعنوان بخشی از وب سایتهایی مانند تصاویر، ویدئو و صفحات ثابت یا کدها خدمترسانی خواهند کرد. قسمتهای متحرک مانند DB Server و uploads و غیره توسط یک سرور متمرکز انجام خواهند شد. درخواستهای HTTP با نشانیهای اینترنتی DNS مانند static.mydomain.net و dynamic.mydomain.net که در متغیرهای webapp کد گذاری میشوند، برای کارگزار مناسب انجام خواهد شد.
تنظیمات شبکه را درنظر بگیرید:
آنچه ما می خواهیم انجام دهیم این است: تبلیغ loopback در سرور DNS به دروازهی ما که همان Edge Router ماست. این تبلیغات میتوانند بهطور مستقیم از طریق OSPF هم انجام شود، اما ما IBGP را انتخاب کردیم.
توجه داشته باشید که کدها و دستورها در طول زمان در حال تغییر هستند؛ همچنین، این راهاندازی را نمیتوان بدون فکر کردن ایجاد کرد.
ما حداقل به دو روتر و یک سرور Debian / Quagga که با ارسال IP فعال میشود نیاز داریم:
ysctl -w net.ipv4.conf.default.forwarding = 1
sysctl -w net.ipv6.conf.default.forwarding = 1
توجه داشته باشید که از کار انداختن تبلیغات و پیشنهادات روتر بهترین تمرین در محیط شبکه LAN است:
sysctl -w net.ipv6.conf.default.accept_ra = 0
sysctl -w net.ipv6.conf.default.router_solicitations = 0
پیکربندی روتر Quagga شما باید به این شکل باشد:
hostname dns-node-1 ! password zebra enable password zebra ! interface eth0 description dns-node-1 ip address 172.16.0.2/24 ipv6 nd suppress-ra ! interface lo description dns-ip-1 ip address 10.0.0.1/32 label lo:0 ! interface lo0 ipv6 nd suppress-ra ! router bgp 65500 bgp router-id 172.16.0.2 bgp log-neighbor-changes network 10.0.0.1/32 neighbor 172.16.0.1 remote-as 65500 neighbor 172.16.0.1 update-source lo neighbor 172.16.0.1 next-hop-self neighbor 2a01:200:1:1::1 remote-as 65500 neighbor 2001:200:1:1::1 update-source lo no neighbor 2001:200:1:1::1 activate ! address-family ipv6 network 2001:200:1:f:10::1/128 neighbor 2001:200:1:1::1 activate exit-address-family ! ip forwarding ! line vty !
اکنون نگاهی به پیکربندی روتر RT1 بیندازید. توجه داشته باشید که روتر آزمایش شده یک بارکد CER بود:
! no spanning-tree ! vlan 1 name DEFAULT-VLAN ! ipv6 prefix-list anycast-ipv6 seq 5 permit 2001:200:1:f:10::1/128 ! ip prefix-list anycast-ip seq 5 permit 10.0.0.1/32 ! ip router-id 192.168.254.1 ipv6 nd global-suppress-ra hostname rt1 ! router ospf area 0 redistribute bgp route-map bgp-to-ospf ! ipv6 router ospf area 0 redistribute bgp route-map bgp-to-ospf-6 ! interface loopback 1 port-name iBGP loopback ip ospf area 0 ip ospf passive ip address 192.168.254.1/32 ipv6 address 2001:200::1/128 ipv6 ospf area 0 ipv6 ospf passive ! interface ethernet 1/1 enable ip ospf area 0 ip address 192.168.0.1/31 ipv6 address 2001:200:f:f::1/126 ipv6 ospf area 0 ipv6 nd suppress-ra ! interface ethernet 1/2 enable ip address 172.16.0.1/24 ipv6 address 2001:200:1:1::1/64 ipv6 nd suppress-ra ! router bgp local-as 65500 neighbor IBGP peer-group neighbor IBGP next-hop-self neighbor IBGP update-source loopback 1 neighbor IBGP6 peer-group neighbor IBGP6 next-hop-self neighbor IBGP6 update-source loopback 1 neighbor ANY peer-group neighbor ANY next-hop-self neighbor 172.16.0.2 remote-as 65500 neighbor 172.16.0.2 peer-group ANY neighbor 192.168.254.2 remote-as 65500 neighbor 192.168.254.2 peer-group IBGP neighbor 2001:200::2 remote-as 65500 neighbor 2001:200::2 peer-group IBGP6 neighbor 2001:200:1:1::2 remote-as 65500 neighbor 2001:200:1:1::2 peer-group ANY ! address-family ipv4 unicast redistribute ospf no neighbor 2001:200::2 activate bgp-redistribute-internal exit-address-family ! address-family ipv4 unicast redistribute ospf no neighbor 2001:200::2 activate no neighbor 2001:200:1:1::2 activate bgp-redistribute-internal exit-address-family ! address-family ipv6 unicast redistribute ospf neighbor 2001:200::2 activate neighbor 2001:200:1:1::2 activate bgp-redistribute-internal exit-address-family ! address-family ipv6 multicast exit-address-family ! address-family vpnv4 unicast exit-address-family ! route-map bgp-to-ospf permit 10 match ip address prefix-list anycast-ip ! route-map bgp-to-ospf-6 permit 10 match ipv6 address prefix-list anycast-ipv6 ! end
درنهایت پیکربندی روتر RT2 در واقع یک روتر اصلی ساده است:
! no spanning-tree ! vlan 1 name DEFAULT-VLAN ! hostname rt2 router ospf area 0 ! interface loopback 1 ip ospf area 0 ip ospf passive ip address 192.168.254.2/32 ipv6 address 2001:200::2/128 ipv6 ospf area 0 ipv6 ospf passive ! interface ethernet 1/1 enable ip ospf area 0 ip address 192.168.0.0/31 ipv6 address 2001:200:f:f::2/126 ipv6 ospf area 0 ! router bgp local-as 65500 neighbor IBGP peer-group neighbor IBGP remote-as 65500 neighbor IBGP next-hop-self neighbor IBGP update-source loopback 1 neighbor IBGP6 peer-group neighbor IBGP6 remote-as 65500 neighbor IBGP6 next-hop-self neighbor IBGP6 update-source loopback 1 neighbor 192.168.254.1 remote-as 65500 neighbor 192.168.254.1 peer-group IBGP neighbor 2001:200::1 remote-as 65500 neighbor 2001:200::1 peer-group IBGP6 ! address-family ipv4 unicast no neighbor 2001:200::1 activate exit-address-family ! address-family ipv4 multicast exit-address-family ! address-family ipv6 unicast neighbor 2001:200::1 activate exit-address-family ! address-family ipv6 multicast exit-address-family ! address-family vpnv4 unicast exit-address-family ! end
برای خاموش کردن BGP در هنگامی که سرویس DNS خود را بالا میبرد، میتوانیم از این اسکریپت استفاده کنیم:
#!/bin/bash DNSUP=`dig @dns-node-1 localhost. A +short` if [ "$DNSUP" != "127.0.0.1" ]; then echo "Stopping Anycast server because DNS service is not working..." /etc/init.d/quagga stop /etc/init.d/bind9 stop else echo "Everything's OK." fi
فقط کافیست آن را به etc/cronta اضافه کنید:
*/۲ * * * * root /root/.isDNSAlive.sh > /dev/null 2>&1
این کار هر ۲ دقیقه یک بار چک خواهد شد تا برنامه آنگونه که انتظار میرود کار کند.
تایمر BGP میتواند موجب پیشرفت سریعتر مسیر شود:
timers bgp
همچنین میتوانیم تعیین کنیم:
neighbor x.x.x.x timers connect
سینداد یعنی هدیهی سیمرغ، یا فرزند سیمرغ؛ به عبارتی یعنی خود سیمرغ، با همه ی شگفتی هایش، اما جوانتر و سرزنده تر. و این چیزی است که ما سعی می کنیم در سینداد باشیم. از سال ۱۳۸۵ دانش مان را به صورت خدماتی در حوزه ی هاستینگ، شبکه و تولید نرم افزار در اختیار مشتریان مان قرار داده ایم و به این افتخار می کنیم که تک تک آنها تا به امروز همراه ما مانده اند. باور داریم که سینداد صرفاً یک شرکت نیست، بلکه نوعی باور است به ارائه ی شگفت انگیز از هر چیز.