چه کسی با چه کسی حرف میزند: جریانها و وابستگیها
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 بفرستد (بالا).
روترها و فایروالها هر اتصالی را که از آنها میگذرد میبینند. با صادرکردن جریان این اتصالها را خلاصه میکنند و خلاصهها را برای یک جمعآوریکننده میفرستند: برای هر مکالمه، دو آدرس، پروتکل و پورتها، و چند بایت و بسته رد و بدل شد. سیسکو به آن NetFlow میگوید، استاندارد IETF آن IPFIX است، و میکروتیک آن را Traffic Flow مینامد. محتوای بستهها فرستاده نمیشود، فقط اینکه چه کسی با چه کسی و چقدر حرف زد.
سوئیچها بیشتر sFlow حرف میزنند. سوئیچ بهجای خلاصهکردن هر اتصال، از هر N بسته (مثلاً ۱ در ۱۰۰۰) اولین بایتهای یکی (سرآیندهایش) را همراه با خود N میفرستد. چون این کار در سختافزار سوئیچ انجام میشود، در سرعت کامل هم هزینهای ندارد، و در طول یک دقیقه همین نمونهها، ضرب در N، تخمین خوبی از اینکه چه کسی با چه کسی حرف میزند به دست میدهند.
یک رکورد جریان بهتنهایی یک جفت آدرس IP است. Zaryn سایت را میشناسد: روترها و سوئیچها، هایپروایزرها، و هر ماشین مجازی با آدرسهایش. پس جمعآوریکنندهٔ سایت جریانها را دریافت و جمع میکند، و Zaryn هر دو سر را نامگذاری میکند:
این همان نقشهٔ وابستگی است که معمولاً پیش از یک مهاجرت یا پس از یک قطعی با دست کشیده میشود: کدام ماشینها باید با هم جابهجا شوند، یک پنجرهٔ نگهداری چه چیزهایی را از کار میاندازد، و کدام ماشینهای مجازی به چیزی بیرون از سایت وابستهاند.
جریانها به نقشهٔ وابستگی تبدیل میشوند
ترافیک دیدهشده
روترها و سوئیچها خلاصهٔ اتصالها را میفرستند؛ Zaryn ماشینهای پشت آدرسها را نام میبرد.
روی جمعآوریکننده (این تنظیم فقط روی همان ماشین است):
Terminal
sudo zev site flows on # NetFlow/IPFIX روی UDP 2055، sFlow روی UDP 6343sudo zev site flows on --port 9995 --sflow-port 6343
جمعآوریکننده را دوباره راهاندازی کنید (sudo systemctl restart zev-site، یا دوباره zev site run) تا شروع به گوشدادن کند، بعد صادرکردن جریان روترها را به سمت آن بفرستید. روی IPv4 و IPv6 گوش میدهد، پس فرستندهها از هر کدام میتوانند به آن برسند.
sFlow سوئیچها را روی UDP 6343 به جمعآوریکننده بفرستید. نرخ نمونهبرداری ۱ در ۱۰۰۰ تا ۱ در ۴۰۰۰ برای وابستگیها کافی است؛ روی پیوندهای پرترافیک 10G و سریعتر، همان توصیهٔ سازنده خوب است.
Arista EOS:
Text
sflow sample 1024sflow destination <collector> 6343sflow source-interface Management1sflow run
میزبانها و هایپروایزرهای لینوکسی با پل معمولی: host sFlow (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 بفرستد (بالا).