پالت فرمان

دنبال فرمانی برای اجرا بگردید…

ZarynZaryn
خودکارسازی شبکه·۵ دقیقه مطالعه·

چه کسی با چه کسی حرف می‌زند: جریان‌ها و وابستگی‌ها

NetFlow، IPFIX و sFlow روترها و سوئیچ‌هایتان، روی IPv4 و IPv6، تبدیل‌شده به وابستگی میان ماشین‌های مجازی، دستگاه‌ها و میزبان‌های نام‌دار: هر کدام از چه سرویس‌هایی استفاده می‌کند، و چه چیزهایی با هم جابه‌جا یا قطع می‌شوند.

## صادرکردن جریان چیست روترها و فایروال‌ها هر اتصالی را که از آن‌ها می‌گذرد می‌بینند. با **صادرکردن جریان** این اتصال‌ها را خلاصه می‌کنند و خلاصه‌ها را برای یک جمع‌آوری‌کننده می‌فرستند: برای هر مکالمه، دو آدرس، پروتکل و پورت‌ها، و چند بایت و بسته رد و بدل شد. سیسکو به آن NetFlow می‌گوید، استاندارد IETF آن **IPFIX** است، و میکروتیک آن را Traffic Flow می‌نامد. محتوای بسته‌ها فرستاده نمی‌شود، فقط اینکه چه کسی با چه کسی و چقدر حرف زد. سوئیچ‌ها بیشتر **sFlow** حرف می‌زنند. سوئیچ به‌جای خلاصه‌کردن هر اتصال، از هر N بسته (مثلاً ۱ در ۱۰۰۰) اولین بایت‌های یکی (سرآیندهایش) را همراه با خود N می‌فرستد. چون این کار در سخت‌افزار سوئیچ انجام می‌شود، در سرعت کامل هم هزینه‌ای ندارد، و در طول یک دقیقه همین نمونه‌ها، ضرب در N، تخمین خوبی از اینکه چه کسی با چه کسی حرف می‌زند به دست می‌دهند. ## آنچه Zaryn با آن می‌کند یک رکورد جریان به‌تنهایی یک جفت آدرس IP است. Zaryn سایت را می‌شناسد: روترها و سوئیچ‌ها، هایپروایزرها، و هر ماشین مجازی با آدرس‌هایش. پس جمع‌آوری‌کنندهٔ سایت جریان‌ها را دریافت و جمع می‌کند، و Zaryn هر دو سر را نام‌گذاری می‌کند: - **web1 (ماشین مجازی) ← db (ماشین مجازی): postgresql (5432)، redis (6379)، روزی ۱٫۲ گیگابایت** - **erp (ماشین مجازی) ← web1 (ماشین مجازی): https (443)** - **web1 (ماشین مجازی) ← 8.8.8.8 (اینترنت): dns (53)** این همان نقشهٔ وابستگی است که معمولاً پیش از یک مهاجرت یا پس از یک قطعی با دست کشیده می‌شود: کدام ماشین‌ها باید با هم جابه‌جا شوند، یک پنجرهٔ نگهداری چه چیزهایی را از کار می‌اندازد، و کدام ماشین‌های مجازی به چیزی بیرون از سایت وابسته‌اند. ```diagram type: graph title: جریان‌ها به نقشهٔ وابستگی تبدیل می‌شوند alt: یک ماشین ERP از راه HTTPS با ماشین وب حرف می‌زند؛ ماشین وب با یک پایگاه داده از راه PostgreSQL و با اینترنت از راه DNS legend: path=ترافیک دیده‌شده caption: روترها و سوئیچ‌ها خلاصهٔ اتصال‌ها را می‌فرستند؛ Zaryn ماشین‌های پشت آدرس‌ها را نام می‌برد. --- node erp | erp | 10 30 | vm node web1 | web1 | 40 30 | vm | accent node db | db | 72 14 | storage node net | اینترنت | 72 46 | cloud link erp web1 | https 443 | path link web1 db | postgresql 5432 | path link web1 net | dns 53 | path ``` ## روشن‌کردن روی جمع‌آوری‌کننده (این تنظیم فقط روی همان ماشین است): ```bash sudo zev site flows on # NetFlow/IPFIX روی UDP 2055، sFlow روی UDP 6343 sudo zev site flows on --port 9995 --sflow-port 6343 ``` جمع‌آوری‌کننده را دوباره راه‌اندازی کنید (`sudo systemctl restart zev-site`، یا دوباره `zev site run`) تا شروع به گوش‌دادن کند، بعد صادرکردن جریان روترها را به سمت آن بفرستید. روی IPv4 و IPv6 گوش می‌دهد، پس فرستنده‌ها از هر کدام می‌توانند به آن برسند. میکروتیک (RouterOS 7): ```text /ip traffic-flow set enabled=yes interfaces=all /ip traffic-flow target add dst-address=<collector> port=2055 version=ipfix ``` سیسکو IOS-XE (Flexible NetFlow): ```text flow exporter ZEV destination <collector> transport udp 2055 export-protocol ipfix flow monitor ZEV-MON exporter ZEV record netflow ipv4 original-input flow monitor ZEV-MON6 exporter ZEV record netflow ipv6 original-input interface GigabitEthernet1/0/1 ip flow monitor ZEV-MON input ipv6 flow monitor ZEV-MON6 input ``` روترها و هایپروایزرهای لینوکسی: `softflowd -i eth0 -n <collector>:2055 -v 10`، یا pmacct. `zev site flows status` پورت‌ها و آخرین ارسال را نشان می‌دهد: چند مکالمه، از چند فرستنده. ## sFlow sFlow سوئیچ‌ها را روی UDP 6343 به جمع‌آوری‌کننده بفرستید. نرخ نمونه‌برداری ۱ در ۱۰۰۰ تا ۱ در ۴۰۰۰ برای وابستگی‌ها کافی است؛ روی پیوندهای پرترافیک 10G و سریع‌تر، همان توصیهٔ سازنده خوب است. Arista EOS: ```text sflow sample 1024 sflow destination <collector> 6343 sflow source-interface Management1 sflow run ``` سیسکو Nexus (NX-OS): ```text feature sflow sflow sampling-rate 4096 sflow collector-ip <collector> vrf management sflow collector-port 6343 sflow agent-ip <switch management address> sflow data-source interface ethernet 1/1 ``` Juniper Junos: ```text set protocols sflow collector <collector> udp-port 6343 set protocols sflow sample-rate ingress 1024 set protocols sflow interfaces ge-0/0/0 ``` Open vSwitch (Proxmox VE با پل‌های OVS، میزبان‌های KVM)، روی هر میزبان: ```bash ovs-vsctl -- --id=@s create sflow agent=vmbr0 target='"<collector>:6343"' sampling=1000 polling=20 -- set bridge vmbr0 sflow=@s ``` میزبان‌ها و هایپروایزرهای لینوکسی با پل معمولی: [host sFlow](https://sflow.net) (`hsflowd`)، با `collector { ip=<collector> udpport=6343 }` و `pcap { dev=vmbr0 }` در `/etc/hsflowd.conf`. نمونه‌برداری روی پل خود هایپروایزر، ماشین‌های مجازی‌ای را هم که روی یک میزبان با هم حرف می‌زنند می‌بیند؛ چیزی که هیچ روتری نمی‌بیند. هر سوئیچ با آدرس agent در sFlow (همان که در هر datagram می‌گذارد) فهرست می‌شود، پس سوئیچی که از یک VRF مدیریتی یا از پشت NAT می‌فرستد هم با آدرس خودش فهرست می‌شود. ## آنچه نگه داشته می‌شود جمع‌آوری‌کننده **NetFlow v5، NetFlow v9، IPFIX و sFlow v5** را روی **IPv4 و IPv6** می‌فهمد، با آدرس‌های IPv4 و IPv6 در رکوردها. شمارش‌های نمونه‌برداری‌شده دوباره ضرب می‌شوند. از sFlow، سرآیندهای هر بستهٔ نمونه را می‌خواند (Ethernet، برچسب‌های VLAN، IPv4 یا IPv6، پورت‌های TCP، UDP یا SCTP)، یا اگر سوئیچ رکورد IPv4 یا IPv6 رمزگشایی‌شدهٔ خودش را بفرستد همان را؛ نمونه‌های شمارندهٔ رابط‌ها کنار گذاشته می‌شوند، چون دستگاه‌های سایت رابط‌هایشان را خودشان گزارش می‌کنند. هر دقیقه ۵۰۰۰ مکالمهٔ پرترافیک را برای Zaryn می‌فرستد، هر کدام خلاصه‌شده به کلاینت، سرور، پورت سرور و پروتکل (پورت تصادفی کلاینت کنار گذاشته می‌شود)، همراه با تعداد بایت، بسته و جریان. Zaryn آن‌ها را ساعتی جمع می‌کند و ۳۰ روز نگه می‌دارد. جهت یک مکالمه از روی پورت‌ها مشخص می‌شود: طرفی که روی پورت شناخته‌شده است (زیر ۴۹۱۵۲، و اگر هر دو باشند پورت کوچک‌تر) سرور است. پاسخی که به‌صورت جریانی جدا فرستاده شود روی همان مکالمه می‌نشیند. ## کجا می‌بینید - زبانهٔ **وابستگی‌ها** در سایت: هر جفت نقطه‌ای که در ساعت، روز، هفته یا ۳۰ روز گذشته با هم حرف زده‌اند، سرویس‌های میانشان و حجمشان، و هر سر با نامش به‌عنوان ماشین مجازی، دستگاه، میزبان هایپروایزر، آدرس داخلی ناشناخته، یا اینترنت. - جزئیات هر ماشین مجازی در **ماشین‌های مجازی**: با چه چیزهایی حرف می‌زند و چه چیزهایی با آن حرف می‌زنند. آدرس‌ها از روی آنچه Zaryn می‌داند نام‌گذاری می‌شوند: دستگاه‌ها و رابط‌هایشان، میزبان‌های هایپروایزر، و ماشین‌های مجازی (آدرس‌های guest agent یا VMware Tools، کانفیگ کانتینر، یا جدول‌های ARP). آدرس‌های IPv6 هر طور که نوشته شده باشند تطبیق داده می‌شوند (`2001:DB8:0:0::5` و `2001:db8::5` یک ماشین مجازی‌اند). آدرس‌های IPv6 محلی یکتا (`fc00::/7`) و link-local، مثل بازه‌های خصوصی IPv4، داخلی به حساب می‌آیند. ## محدودیت‌ها - sFlow نمونه‌برداری است: مکالمه‌ای با فقط چند بسته ممکن است اصلاً دیده نشود، و حجم‌های کوچک تخمین‌اند. شمارش بایت‌هایش طول فریم است، با سرآیند Ethernet. - جریان‌ها فقط به اندازهٔ روترهایی که آن‌ها را صادر می‌کنند کامل‌اند: ترافیکی که هرگز از یک روتر صادرکننده نمی‌گذرد (دو ماشین مجازی روی یک میزبان و یک VLAN) دیده نمی‌شود، مگر اینکه پل خود هایپروایزر sFlow بفرستد (بالا).