هذه الوثيقة مكتوبة لجمهور مطوري البرامج. للحصول على معلومات حول استخدام ZeroTier، راجع: موقع الويب وموقع التوثيق ومنتدى المناقشة.
ZeroTier هو محول إيثرنت ذكي قابل للبرمجة لكوكب الأرض. فهو يسمح لجميع الأجهزة المتصلة بالشبكة والأجهزة الافتراضية والحاويات والتطبيقات بالتواصل كما لو كانت جميعها موجودة في نفس مركز البيانات الفعلي أو المنطقة السحابية.
يتم تحقيق ذلك من خلال الجمع بين شبكة نظير إلى نظير موجهة تشفيريًا وآمنة (تسمى VL1) مع طبقة مضاهاة Ethernet تشبه إلى حد ما طبقة VXLAN (تسمى VL2). تشتمل طبقة المحاكاة الافتراضية VL2 Ethernet الخاصة بنا على ميزات SDN للمؤسسات المتقدمة مثل قواعد التحكم في الوصول الدقيقة للتجزئة الدقيقة للشبكة ومراقبة الأمان.
يتم تشفير كل حركة مرور ZeroTier من طرف إلى طرف باستخدام مفاتيح سرية لا يتحكم فيها أحد سواك. معظم تدفقات حركة المرور من نظير إلى نظير، على الرغم من أننا نقدم ترحيلًا مجانيًا (ولكنه بطيء) للمستخدمين الذين لا يستطيعون إنشاء اتصالات نظير إلى نظير.
إن أهداف ومبادئ تصميم ZeroTier مستوحاة من بين أشياء أخرى من ورقة Google BeyondCorp الأصلية ومنتدى Jericho بمفهوم "إزالة المحيط".
قم بزيارة موقع ZeroTier لمزيد من المعلومات والحزم الثنائية المعدة مسبقًا. تتوفر تطبيقات Android وiOS مجانًا في متجر تطبيقات Google Play وApple.
تم ترخيص ZeroTier بموجب الإصدار 1.1 من BSL. راجع LICENSE.txt وصفحة تسعير ZeroTier للحصول على التفاصيل. ZeroTier مجاني للاستخدام داخليًا في الشركات والمؤسسات الأكاديمية ولأغراض غير تجارية. تتطلب أنواع معينة من الاستخدام التجاري، مثل إنشاء تطبيقات وأجهزة مغلقة المصدر تعتمد على ZeroTier أو تقديم وحدات تحكم شبكة ZeroTier وإدارة الشبكة كخدمة SaaS، ترخيصًا تجاريًا.
يتم أيضًا تضمين قدر صغير من أكواد الطرف الثالث في ZeroTier ولا يخضع لترخيص BSL الخاص بنا. راجع AUTHORS.md للحصول على قائمة برموز الجهات الخارجية، حيث يتم تضمينها، والتراخيص التي تنطبق عليها. جميع أكواد الطرف الثالث في ZeroTier مرخصة بشكل حر (MIT، BSD، Apache، المجال العام، وما إلى ذلك).
يتم التحكم في كل شيء في عالم ZeroTier بواسطة نوعين من المعرفات: عناوين ZeroTier المكونة من 40 بت/10 أرقام ومعرفات الشبكة المكونة من 64 بت/16 رقمًا. يمكن تمييز هذه المعرفات بسهولة بطولها. يحدد عنوان ZeroTier العقدة أو "الجهاز" (الكمبيوتر المحمول، الهاتف، الخادم، VM، التطبيق، وما إلى ذلك) بينما يحدد معرف الشبكة شبكة إيثرنت افتراضية يمكن الانضمام إليها بواسطة الأجهزة.
يمكن اعتبار عناوين ZeroTier بمثابة أرقام منافذ على محول إيثرنت ذكي ضخم على مستوى الكوكب يدعم شبكات VLAN. معرفات الشبكة هي معرفات VLAN التي قد يتم تعيين هذه المنافذ لها. يمكن تخصيص منفذ واحد لأكثر من شبكة محلية ظاهرية (VLAN).
يبدو عنوان ZeroTier مثل 8056c2e21c
ومعرف الشبكة يشبه 8056c2e21c000001
. تتكون معرفات الشبكة من عنوان ZeroTier لوحدة التحكم الأساسية لتلك الشبكة ومعرف عشوائي 24 بت يحدد الشبكة الموجودة على وحدة التحكم هذه. تشبه وحدات تحكم الشبكة تقريبًا وحدات تحكم SDN في بروتوكولات SDN مثل OpenFlow، على الرغم من أنه كما هو الحال مع القياس بين VXLAN وVL2، لا ينبغي قراءة هذا للإشارة إلى أن البروتوكولات أو التصميم متماثلان. يمكنك استخدام وحدات التحكم المستضافة SaaS المريحة وغير المكلفة لدينا على my.zerotier.com أو تشغيل وحدة التحكم الخاصة بك إذا كنت لا تمانع في العبث بملفات تكوين JSON أو كتابة البرامج النصية للقيام بذلك.
يحتوي المسار الأساسي على نقطة الإدخال الرئيسية لخدمة ZeroTier One ( one.cpp
)، وكود الاختبار الذاتي، وملفات makefiles، وما إلى ذلك.
artwork/
: أيقونات، شعارات، إلخ.attic/
: العناصر القديمة والرمز التجريبي الذي نريد الاحتفاظ به كمرجع.controller/
: تطبيق وحدة تحكم الشبكة المرجعية، والذي تم إنشاؤه وتضمينه افتراضيًا على أهداف إنشاء سطح المكتب والخادم.debian/
: ملفات لبناء حزم دبيان على Linux.doc/
: صفحات الدليل والوثائق الأخرى.ext/
: مكتبات الطرف الثالث، والثنائيات التي نشحنها للراحة على بعض الأنظمة الأساسية (Mac وWindows)، وملفات دعم التثبيت.include/
: يتضمن ملفات لـ ZeroTier core.java/
: غلاف JNI يُستخدم مع تطبيق Android للجوال. (تطبيق Android بأكمله ليس مفتوح المصدر، ولكن يمكن جعله كذلك في المستقبل.)node/
: نواة محول Ethernet الظاهري ZeroTier، والتي تم تصميمها لتكون منفصلة تمامًا عن بقية التعليمات البرمجية وقابلة للإنشاء كمكتبة مستقلة عن نظام التشغيل. ملاحظة للمطورين: لا تستخدم ميزات C++ 11 هنا، لأننا نريد أن يعتمد هذا على الأنظمة الأساسية القديمة المضمنة التي تفتقر إلى دعم C++ 11. يمكن استخدام C++ 11 في مكان آخر.osdep/
: رمز لدعم أنظمة التشغيل والتكامل معها، بما في ذلك العناصر الخاصة بالنظام الأساسي المصممة لأهداف معينة فقط.rule-compiler/
: مترجم لغة قواعد JavaScript لتحديد القواعد على مستوى الشبكة.service/
: خدمة ZeroTier One، التي تغطي نواة ZeroTier وتوفر اتصالاً يشبه VPN بالشبكات الافتراضية لأجهزة الكمبيوتر المكتبية وأجهزة الكمبيوتر المحمولة والخوادم وأجهزة VM والحاويات.windows/
: ملفات حلول Visual Studio، ورمز خدمة Windows، وواجهة مستخدم تطبيق شريط مهام Windows.zeroidc/
: تطبيق OIDC الذي تستخدمه خدمة ZeroTier لتسجيل الدخول إلى الشبكات التي تدعم الدخول الموحد (SSO). (هذا الجزء مكتوب بلغة Rust، وسيظهر المزيد من Rust في هذا المستودع في المستقبل.) يرجى سحب الطلبات من فرع dev
.
تتم الإصدارات عن طريق دمج dev
في main
ثم وضع العلامات وتنفيذ الإصدارات.
للبناء على نظامي التشغيل Mac وLinux، ما عليك سوى كتابة make
. في FreeBSD وOpenBSD، يلزم وجود gmake
(GNU make) ويمكن تثبيته من الحزم أو المنافذ. بالنسبة لنظام التشغيل Windows يوجد حل Visual Studio في windows/
.
gmake
للبناء.binutils
. اكتب pkg install binutils
للتثبيت./dev/tap0
إلى /dev/tap3
).gmake
للبناء. ستؤدي عملية الكتابة make selftest
إلى بناء اختبار ثنائي ذاتي صفري، حيث تقوم الوحدة باختبار مختلف العناصر الداخلية وإعداد التقارير حول بعض جوانب بيئة البناء. إنها فكرة جيدة أن تجرب ذلك على منصات أو بنيات جديدة.
سيؤدي تشغيل خيار Zerotier-one مع -h
إلى إظهار المساعدة.
في Linux وBSD، إذا قمت بالإنشاء من المصدر، فيمكنك بدء الخدمة باستخدام:
sudo ./zerotier-one -d
في معظم التوزيعات، وmacOS، وWindows، سيبدأ المثبت الخدمة ويقوم بإعدادها لبدء التشغيل.
سيتم تلقائيًا إنشاء مجلد رئيسي لنظامك.
يتم التحكم في الخدمة عبر JSON API، والتي تتوفر بشكل افتراضي على 127.0.0.1:9993
. كما أنه يستمع إلى 0.0.0.0:9993
والذي لا يمكن استخدامه إلا إذا تم تكوين allowManagementFrom
بشكل صحيح في local.conf
. نحن نقوم بتضمين أداة مساعدة لسطر الأوامر Zerotier-cli لإجراء استدعاءات واجهة برمجة التطبيقات (API) للأشياء القياسية مثل الانضمام إلى الشبكات ومغادرتها. يحتوي ملف authtoken.secret الموجود في المجلد الرئيسي على الرمز السري للوصول إلى واجهة برمجة التطبيقات هذه. راجع الخدمة/README.md للحصول على وثائق API.
إليك مكان وجود المجلدات الرئيسية (افتراضيًا) على كل نظام تشغيل:
/var/lib/zerotier-one
/var/db/zerotier-one
/Library/Application Support/ZeroTier/One
ProgramDataZeroTierOne
(هذا هو الإعداد الافتراضي. قد يختلف المجلد الأساسي "بيانات التطبيق المشتركة" إذا تم تثبيت Windows مع تعيين أو تخطيط حرف محرك أقراص غير قياسي.)بالنسبة لمعظم المستخدمين، فإنه يعمل فقط.
إذا كنت تقوم بتشغيل جدار حماية نظام محلي، فنوصي بإضافة قواعد تسمح بالمستوى الصفري. إذا قمت بتثبيت الثنائيات لنظام التشغيل Windows، فيجب أن يتم ذلك تلقائيًا. قد تتطلب الأنظمة الأساسية الأخرى تحريرًا يدويًا لقواعد جدار الحماية المحلي وفقًا للتكوين الخاص بك.
راجع موقع التوثيق لمزيد من المعلومات.
يمكن العثور على جدار حماية Mac ضمن "الأمان" في تفضيلات النظام. لدى Linux مجموعة متنوعة من أنظمة وأدوات تكوين جدار الحماية.
في نظام CentOS، تحقق من /etc/sysconfig/iptables
لمعرفة قواعد IPTables. بالنسبة للتوزيعات الأخرى، راجع وثائق التوزيعة الخاصة بك. سيتعين عليك أيضًا التحقق من واجهات المستخدم أو الوثائق الخاصة بتطبيقات جدار الحماية التجارية التابعة لجهات خارجية مثل Little Snitch (Mac)، وMcAfee Firewall Enterprise (Windows)، وما إلى ذلك، إذا كنت تقوم بتشغيل أي من هذه التطبيقات. قد تحتوي بعض بيئات الشركات على برنامج جدار حماية مُدار مركزيًا، لذا قد يتعين عليك أيضًا الاتصال بقسم تكنولوجيا المعلومات.
سيحدد أقران ZeroTier One موقع بعضهم البعض تلقائيًا ويتواصلون مباشرة عبر شبكة LAN سلكية محلية إذا كان منفذ UDP 9993 الوارد مفتوحًا . إذا تمت تصفية هذا المنفذ، فلن يتمكنوا من رؤية حزم إعلانات LAN الخاصة ببعضهم البعض. إذا كنت تواجه أداءً ضعيفًا بين الأجهزة الموجودة على نفس الشبكة الفعلية، فتحقق من إعدادات جدار الحماية الخاصة بها. يجب على أقرانهم بدون تحديد الموقع التلقائي لشبكة LAN أن يحاولوا اجتياز NAT "الاسترجاعي"، والذي يفشل أحيانًا ويتطلب على أية حال أن تعبر كل حزمة جهاز التوجيه الخارجي الخاص بك مرتين.
قد لا يتمكن المستخدمون الذين يعملون خلف أنواع معينة من جدران الحماية وأجهزة NAT "المتماثلة" من الاتصال بأقرانهم الخارجيين مباشرةً على الإطلاق. يتمتع ZeroTier بدعم محدود للتنبؤ بالمنافذ وسيحاول اجتياز NATs المتماثلة، لكن هذا لا يعمل دائمًا. إذا فشل اتصال P2P، فسترتد حزم UDP من خوادم الترحيل الخاصة بنا مما يؤدي إلى أداء أبطأ. تحتوي بعض أجهزة توجيه NAT على وضع NAT قابل للتكوين، وسيؤدي تعيين هذا على "مخروط كامل" إلى القضاء على هذه المشكلة. إذا قمت بذلك، فقد ترى أيضًا تحسنًا سحريًا لأشياء مثل هواتف VoIP، وSkype، وBitTorrent، وWebRTC، وألعاب معينة، وما إلى ذلك، نظرًا لأن كل هذه التقنيات تستخدم تقنيات اجتياز NAT المشابهة لتقنياتنا.
إذا كان جدار الحماية بينك وبين الإنترنت يحظر حركة مرور UDP الخاصة بـ ZeroTier، فسوف ترجع إلى الملاذ الأخير لنفق TCP إلى الخوادم الجذرية عبر المنفذ 443 (انتحال صفة https). سيعمل هذا في أي مكان تقريبًا ولكنه بطيء جدًا مقارنة بـ UDP أو الاتصال المباشر من نظير إلى نظير.
يمكن العثور على مساعدة إضافية في قاعدة المعرفة لدينا.
تتوفر مقاييس Prometheus عند نقطة نهاية /metrics
API. نقطة النهاية هذه محمية بواسطة مفتاح واجهة برمجة التطبيقات (API) المخزن في metricstoken.secret
لمنع تسرب المعلومات غير المرغوب فيها. تتضمن المعلومات التي يمكن استخلاصها من المقاييس الشبكات والأقران المرتبطة التي يتحدث إليها مثيلك.
يتم التحكم في الوصول عبر واجهة التحكم ZeroTier نفسها و metricstoken.secret
. يمكن إرسال هذا كرمز مصادقة لحامل، عبر حقل رأس X-ZT1-Auth
HTTP، أو إلحاقه بعنوان URL كـ ?auth=<token>
. يمكنك رؤية المقاييس الحالية عبر cURL
باستخدام الأمر التالي:
// Linux
curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics
// macOS
curl -H "X-ZT1-Auth: $(sudo cat /Library/Application Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics
// Windows PowerShell (Admin)
Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:ProgramDataZeroTierOnemetricstoken.secret)"; } -Uri http://localhost:9993/metrics
لتكوين مهمة كشط في Prometheus على الجهاز الذي يعمل عليه ZeroTier، قم بإضافة هذا إلى Prometheus scrape_config
:
- job_name: zerotier-one
honor_labels: true
scrape_interval: 15s
metrics_path: /metrics
static_configs:
- targets:
- 127.0.0.1:9993
labels:
group: zerotier-one
node_id: $YOUR_10_CHARACTER_NODE_ID
authorization:
credentials: $YOUR_METRICS_TOKEN_SECRET
إذا لم تكن أي من هذه الطرق مرغوبة، فمن المحتمل أن يكون من الممكن توزيع المقاييس عبر Prometheus Proxy أو أي أداة أخرى. ملاحظة: لم نختبر هذا داخليًا، ولكن من المحتمل أن نعمل مع التكوين الصحيح.
تتوفر المقاييس أيضًا على القرص في دليل عمل ZeroTier:
// Linux /var/lib/zerotier-one/metrics.prom
// macOS /Library/Application Support/ZeroTier/One/metrics.prom
//Windows C:ProgramDataZeroTierOnemetrics.prom
اسم المقياس | التسميات | النوع المتري | وصف |
---|---|---|---|
zt_packet | نوع الحزمة، الاتجاه | عداد | عدد أنواع حزم ZeroTier |
zt_packet_error | نوع_الخطأ، الاتجاه | عداد | أخطاء الحزمة ZeroTier |
zt_data | البروتوكول، الاتجاه | عداد | عدد البايتات التي أرسلها أو استقبلها ZeroTier |
zt_num_networks | كَيّل | عدد الشبكات التي انضم إليها هذا المثيل | |
zt_network_multicast_groups_subscribed | معرف الشبكة | كَيّل | عدد شبكات مجموعات البث المتعدد المشترك فيها |
zt_network_packets | معرف الشبكة، الاتجاه | عداد | عدد الحزم الواردة/الصادرة لكل شبكة |
zt_peer_latency | معرف_العقدة | الرسم البياني | الكمون النظير (ملي ثانية) |
zt_peer_path_count | معرف العقدة، الحالة | كَيّل | عدد المسارات إلى الأقران |
zt_peer_packets | معرف العقدة، الاتجاه | عداد | عدد الحزم من/إلى النظير |
zt_peer_packet_errors | معرف_العقدة | عداد | عدد أخطاء الحزمة الواردة من النظير |
إذا كانت هناك مقاييس أخرى ترغب في تتبعها، فاطرح علينا مشكلة أو أرسل لنا طلب سحب!
يوجد خادم ملفات http ثابت مناسب لاستضافة تطبيقات الصفحة الواحدة على http://localhost:9993/app/
استخدم zerotier-cli info -j
للعثور على homeDir الخاص بخدمة Zerotier-one
cd $ZT_HOME
sudo mkdir -p app/app1
sudo mkdir -p app/appB
echo ' <html><meta charset=utf-8><title>appA</title><body><h1>hello world A ' | sudo tee app/appA/index.html
echo ' <html><meta charset=utf-8><title>app2</title><body><h1>hello world 2 ' | sudo tee app/app2/index.html
curl -sL http://localhost:9993/app/appA http://localhost:9993/app/app2
ثم قم بزيارة http://localhost:9993/app/app1/ و http://localhost:9993/app/appB/
طلبات المسارات غير موجودة تُرجع ملف Index.html لجذر التطبيق، كما هو معتاد في SPA. إذا أردت، يمكنك كتابة بعض جافا سكريبت التي تتحدث إلى واجهة برمجة تطبيقات الخدمة أو وحدة التحكم.