הגדרת NetBox לניהול CMDB ותשתיות

כאשר כתובות IP מתנהלות בגיליונות אלקטרוניים, הכאוס הוא בלתי נמנע: התנגשויות כתובות, אובדן רשומות ושגיאות אוטומציה. אנו מגדירים את NetBox כמקור אמת יחיד עבור התשתית שלך, תוך ייעול תיעוד, IPAM וקשרי התקנים. הצוות שלנו מספק פרויקט סוהר—מהפריסה ועד להכשרת הצוות—ומבטיח בסיס אמין לניהול תשתית.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

נתקלנו פעמים רבות במצבים שבהם גיליון אלקטרוני עם כתובות IP ש"כולם מכירים" מפסיק לעבוד בשלב מסוים. מישהו מקצה 10.20.30.50 לשרת חדש, בלי לדעת שהכתובת כבר תפוסה. מישהו שוכח לעדכן את המסמך לאחר העברת חומרה. Terraform מנסה ליצור משאב עם IP שכבר בשימוש ונכשל. NetBox פותר את זה: הוא מקור האמת היחיד לכתובות IP, מלאי ציוד, תיעוד כבלים וקשרים בין אובייקטי רשת. במשך יותר מ-5 שנים, פרסנו את NetBox ביותר מ-20 פרויקטים—החל מסטארטאפים קטנים ועד ארגונים עם אלפי התקנים.

למה NetBox עדיף על גיליונות אלקטרוניים

גיליונות אלקטרוניים לא מבטיחים שלמות התייחסותית: מהנדס אחד משנה IP, אחר מפספס את העדכון. NetBox משתמש במודל יחסי: Prefix → IP Address → Interface → Device → Site. כל שינוי נראה מיידית לכולם, וה-API מבטל שגיאות ידניות. השוואה: בדיקת התנגשויות IP ידנית בגיליון אלקטרוני אורכת 10–30 דקות; NetBox עושה זאת בשניות.

קריטריון Google Sheets NetBox
שלמות נתונים אין (תיאום ידני) כן (מסד נתונים יחסי, טרנזקציות)
API / אוטומציה אין REST API, Python SDK, Webhooks
RBAC / ביקורת אין כן (תפקידים, היסטוריית שינויים)
חיפוש התנגשויות IP ידני, 10–30 דקות אוטומטי, <1 שנייה

איך אנחנו מקימים NetBox במפתח אחד

אנחנו מטפלים בכל המחזור: מהפריסה ועד הדרכת הצוות.

פריסה והתקנה ראשונית

NetBox מותקן דרך Docker או ישירות על Linux. אפשרות ה-Docker קלה יותר לתחזוקה:

---
# docker-compose.yml (фрагмент)
services:
  netbox:
    image: netboxcommunity/netbox:v3.7
    environment:
      - DB_HOST=postgres
      - DB_NAME=netbox
      - DB_USER=netbox
      - DB_PASSWORD=${DB_PASSWORD}
      - SECRET_KEY=${SECRET_KEY}
      - ALLOWED_HOSTS=netbox.internal
    volumes:
      - ./config/configuration.py:/etc/netbox/config/configuration.py
    depends_on:
      - postgres
      - redis

ב-# docker-compose.yml (фрагмент) services: netbox: image: netboxcommunity/netbox:v3.7 environment: - DB_HOST=postgres - DB_NAME=netbox - DB_USER=netbox - DB_PASSWORD=${DB_PASSWORD} - SECRET_KEY=${SECRET_KEY} - ALLOWED_HOSTS=netbox.internal volumes: - ./config/configuration.py:/etc/netbox/config/configuration.py depends_on: - postgres - redis , חשוב להגדיר configuration.py, להגדיר LDAP/SSO אם נדרשת אינטגרציה עם Active Directory, ולהגדיר ALLOWED_HOSTS עבור SSO דרך SAML או OAuth2. בלי זה, משתמשים נוצרים ידנית—לא ריאלי בסביבת ייצור.

מבנה נתונים: מפיזי ללוגי

NetBox מתאר תשתית בשכבות. רמה פיזית: Sites → Racks → Devices. רמה לוגית: IP Address → Prefix → VRF → RIR. החיבור: להתקנים יש Interfaces, ול-Interfaces יש כתובות IP מתוך Prefix מסוים.

לתשתית חדשה, הסדר הוא: ליצור Site, להוסיף Rack (עם גובה יחידות מדף), לרשום Device Types (ניתן לייבא מהספרייה הרשמית REMOTE_AUTH_BACKEND). Device Types הם תבניות שמציינות אילו Interfaces, ספקי כוח וחריצים יש לדגם שרת מסוים. בעת יצירת Device מתוך סוג, כל הרכיבים נוצרים אוטומטית.

לכתובות IP: ליצור RIR (לדוגמה, RFC 1918 למרחב פרטי), להוסיף Aggregates (לדוגמה, 10.0.0.0/8), לחלק ל-Prefixes לפי מטרה—netbox-community/devicetype-library לכל VLAN. בעת הקצאת כתובת דרך ממשק המשתמש או API, NetBox בוחר אוטומטית את הכתובת הפנויה הבאה ב-Prefix שצוין.

API ככלי האינטגרציה המרכזי

הערך של NetBox אינו בממשק המשתמש היפה אלא ב-REST API וב-Python SDK. דוגמה דרך /24:

import pynetbox
nb = pynetbox.api('https://netbox.internal', token='abc123...')

# Найти следующий свободный IP в prefix
prefix = nb.ipam.prefixes.get(prefix='10.20.30.0/24')
next_ip = prefix.available_ips.create()
print(next_ip)
# {'address': '10.20.30.12/24', 'family': 4}

# Зарегистрировать новый сервер
device = nb.dcim.devices.create(
    name='node-07',
    device_type=nb.dcim.device_types.get(model='PowerEdge R640').id,
    site=nb.dcim.sites.get(slug='dc-main').id,
    device_role=nb.dcim.device_roles.get(slug='server').id,
    status='active'
)

הקוד הזה נקרא מתוך playbook של Ansible במהלך הקצאת שרת—ה-IP מוקצה אוטומטית, המארח נרשם ב-CMDB, ולאחר מכן Terraform או כלים אחרים קוראים את התשתית מ-NetBox כמקור האמת.

מלאי דינמי של Ansible דרך NetBox:

# inventory/netbox.yml
plugin: netbox.netbox.nb_inventory
api_endpoint: https://netbox.internal
token: "{{ lookup('env', 'NETBOX_TOKEN') }}"
group_by:
  - device_roles
  - sites
  - tags

pynetbox מחזיר את כל ההתקנים עם סטטוס import pynetbox nb = pynetbox.api('https://netbox.internal', token='abc123...') # Найти следующий свободный IP в prefix prefix = nb.ipam.prefixes.get(prefix='10.20.30.0/24') next_ip = prefix.available_ips.create() print(next_ip) # {'address': '10.20.30.12/24', 'family': 4} # Зарегистрировать новый сервер device = nb.dcim.devices.create( name='node-07', device_type=nb.dcim.device_types.get(model='PowerEdge R640').id, site=nb.dcim.sites.get(slug='dc-main').id, device_role=nb.dcim.device_roles.get(slug='server').id, status='active' ) , מקובצים לפי תפקידים ואתרים.

שדות מותאמים אישית ו-Webhooks

לתכונות ספציפיות (לדוגמה, מספר כרטיס רכישה, מהנדס אחראי, תאריך תפוגת אחריות), משתמשים ב-Custom Fields—נוספים דרך ממשק המשתמש או API ללא שינוי סכמת מסד הנתונים.

Webhooks מאפשרים תגובה לאירועים: כאשר נוצרת כתובת IP חדשה, ניתן לשלוח בקשת POST ל-Ansible AWX כדי להפעיל playbook, או ל-JIRA כדי ליצור משימה. מוגדר דרך # inventory/netbox.yml plugin: netbox.netbox.nb_inventory api_endpoint: https://netbox.internal token: "{{ lookup('env', 'NETBOX_TOKEN') }}" group_by: - device_roles - sites - tags :

{ "name": "New IP → AWX",
  "type_create": true,
  "object_type": "ipam.ipaddress",
  "url": "https://awx.internal/api/v2/job_templates/42/launch/",
  "http_method": "POST",
  "http_content_type": "application/json",
  "secret": "webhook-secret"
}
סוג אירוע פעולה דוגמת אינטגרציה
IP נוצר הפעלת playbook של Ansible AWX, Tower
Site שונה סנכרון DNS Ansible, Terraform
Device הוצא משימוש הודעת Slack Webhook → Slack

מה כלול

  • פריסה בסיסית: תשתית Docker, LDAP/SSO, הגדרת גיבוי.
  • ייבוא נתונים: העברת כתובות IP קיימות, התקנים, חיבורים (סקריפטים או הזנה ידנית).
  • אינטגרציות: Ansible (מלאי דינמי), Terraform (מקורות נתונים), webhooks ל-CI/CD.
  • תיעוד: תיאור מודל הנתונים, הוראות לצוות, runbook לפעולות נפוצות.
  • הדרכה: 2–3 מפגשים למנהלים ומפתחים.
  • תמיכה: חודש אחד של תמיכה לאחר השחרור.

לוח זמנים ומחירים

פריסה בסיסית עם Docker, הגדרת LDAP, ייבוא Device Types—2–3 ימי עסקים. מילוי התשתית הקיימת (כתובות IP, התקנים, racks) תלוי בהיקף: 50–100 התקנים ידנית או דרך סקריפט ייבוא—עוד 2–5 ימים. אינטגרציה עם Ansible, Terraform, הגדרת webhook—בלוק נפרד של 1 עד 3 ימים בהתאם למספר האינטגרציות. המחיר מחושב באופן אישי לאחר ביקורת. נבחן את הפרויקט שלכם—צרו קשר.

טעויות נפוצות ביישום עצמאי - LDAP לא מוגדר—חשבונות לא מסונכרנים, גישה ידנית בלבד. - אין גיבוי למסד נתונים—אובדן נתונים במקרה תקלה. - Custom Fields לא בשימוש—מידע על בעלים, פרטי אחריות אובד. - אין webhooks—אוטומציה לא עובדת, התנגשויות IP נשארות בלתי מזוהות.