يتمتع OpenVPN بوقت استجابة طويل وسرعة منخفضة. قم بتسريع OpenVPN مقابل 9.99 دولار* أو قم بدمج Orange Pi One في جهاز التوجيه الخاص بك

18.04.2019

من وقت لآخر، أرى مواضيع في المنتديات حيث يقوم الأشخاص بتوصيل مكاتب متعددة باستخدام OpenVPN ويحصلون على سرعات بطيئة، أقل بكثير من سرعة الارتباط. بالنسبة للبعض قد يكون 20 ميجابت/ثانية مع قناة 100 ميجابت/ثانية على كلا الجانبين، بينما بالنسبة للآخرين بالكاد يحصلون على 400 كيلوبت/ثانية على 2 ميجابت/ثانية ADSL/3G وping مرتفع. في كثير من الأحيان، يُنصح هؤلاء الأشخاص بزيادة وحدة الإرسال الكبرى (MTU) على واجهة VPN إلى قيم عالية للغاية، مثل 48000، أو التلاعب بالمعلمة mssfix. يساعد هذا جزئيًا، لكن السرعة داخل VPN لا تزال بعيدة جدًا عن سرعة القناة. أحيانًا يلوم الجميع حقيقة أن OpenVPN هو أحد حلول مساحة المستخدم، وهذه هي سرعته العادية، مع الأخذ في الاعتبار جميع أنواع التشفير وHMAC، وما إلى ذلك. سخيف!

قليلا من التاريخ

إنه يوليو 2004. تبلغ سرعة الإنترنت المنزلي النموذجية في البلدان المتقدمة 256 كيلوبت في الثانية - 1 ميجابت في الثانية، وفي البلدان الأقل نموًا تبلغ 56 كيلوبت في الثانية. تم إصدار Linux kernel 2.6.7 منذ وقت ليس ببعيد، ولن يتم إصدار 2.6.8، الذي يتم فيه تمكين مقياس نافذة TCP افتراضيًا، إلا بعد مرور شهر. تم تطوير مشروع OpenVPN منذ 3 سنوات، ويتم إعداد الإصدار 2.0 للإصدار.
يضيف أحد المطورين رمزًا يضبط المخزن المؤقت للإرسال والاستقبال الافتراضي على 64 كيلو بايت، ربما لتوحيد حجم المخزن المؤقت بطريقة ما بين الأنظمة الأساسية ولا يعتمد على إعدادات النظام. ومع ذلك، هناك شيء ما معطل في Windows، ويؤدي تحديد حجم المخازن المؤقتة للمقبس إلى مشاكل غريبة في MTU على كافة المحولات في النظام. في النهاية، ينتهي الأمر بالكود التالي في إصدار OpenVPN 2.0-beta8:
#ifndef WIN32 o->rcvbuf = 65536; o->sndbuf = 65536; #إنهاء إذا

بعض المعلومات التقنية

إذا كنت قد استخدمت OpenVPN، فأنت تعلم أنه يمكنه العمل عبر كل من UDP وTCP. إذا قمت بتعيين قيمة مخزن مؤقت صغيرة على مقبس TCP، في حالتنا 64 كيلو بايت، فلن تتمكن خوارزمية ضبط نافذة TCP ببساطة من تجاوز هذه القيمة.
ماذا يعني هذا؟ لنفترض أنك تتصل بخادم في الولايات المتحدة من روسيا عبر OpenVPN باستخدام مخازن مؤقتة للمقابس القياسية. لديك قناة واسعة، مثلاً 50 ميجابت/ثانية، ولكن نظرًا للمسافة، يبلغ معدل الاتصال 100 مللي ثانية. ما هي السرعة القصوى التي تعتقد أنه يمكنك تحقيقها؟ 5.12 ميجابت في الثانية. أنت بحاجة إلى مخزن مؤقت لا يقل عن 640 كيلو بايت لتحميل قناتك ذات 50 ميجابت.
سيعمل OpenVPN عبر UDP بشكل أسرع إلى حد ما نظرًا لتطبيقه الخاص لإعادة توجيه الحزم، ولكنه أيضًا بعيد عن المثالية.

ما يجب القيام به؟

كما كنت قد خمنت، لا يزال حجم المخزن المؤقت هذا مستخدمًا في أحدث إصدار من OpenVPN. كيف يمكننا تصحيح الوضع؟ الخيار الصحيح هو منع OpenVPN من تغيير حجم مخازن المقبس المؤقتة.
تحتاج إلى إضافة الأسطر التالية إلى ملفات تكوين الخادم والعميل:
سندبوف 0 ركفبوف 0
في هذه الحالة، سيتم تعيين حجم المخزن المؤقت من خلال إعدادات نظام التشغيل. بالنسبة لنظام التشغيل Linux وTCP، ستتغير هذه القيمة وفقًا للقيم من net.ipv4.tcp_rmem وnet.ipv4.tcp_wmem، وبالنسبة لـ UDP ستكون قيمة ثابتة net.core.rmem_default وnet.core.wmem_default مقسومة على اثنين.

إذا لم يكن من الممكن تغيير ملفات تكوين العميل لسبب ما، فيجب عليك إرسال أحجام مخزن مؤقت كبيرة بما فيه الكفاية من الخادم:
sndbuf 0 rcvbuf 0 ادفع "sndbuf 393216" ادفع "rcvbuf 393216"
يختلف UDP قليلًا عن TCP. ليس له ما يعادل Window Scale ولا يتطلب تأكيدات تسليم الحزم في طبقة النقل، ولكن انخفاض حجم المخزن المؤقت للاستقبال يمكن أن يبطئه إذا امتلأ المخزن المؤقت قبل أن يتمكن OpenVPN من قراءته. إذا كانت السرعة داخل النفق تبدو منخفضة بالنسبة لك حتى مع التغييرات الموضحة أعلاه، فقد يكون من المنطقي إما زيادة حجم المخزن المؤقت للنظام بأكمله عن طريق زيادة net.core.rmem_default وnet.core.wmem_default، أو تحديد دائمًا حجم المخزن المؤقت المحدد في ملف التكوين:
sndbuf 393216 rcvbuf 393216 دفع "sndbuf 393216" دفع "rcvbuf 393216"

ولكن لدي ويندوز!

إذا كان لديك خادم OpenVPN يعمل على جهاز يعمل بنظام Windows، ويتصل جميع العملاء من Windows فقط، فتهانينا - لست بحاجة إلى تغيير أي شيء، يجب أن يعمل كل شيء بسرعة بالنسبة لك على أي حال.

من وقت لآخر، أرى مواضيع في المنتديات حيث يقوم الأشخاص بتوصيل مكاتب متعددة باستخدام OpenVPN ويحصلون على سرعات بطيئة، أقل بكثير من سرعة الارتباط. بالنسبة للبعض قد يكون 20 ميجابت/ثانية مع قناة 100 ميجابت/ثانية على كلا الجانبين، بينما بالنسبة للآخرين بالكاد يحصلون على 400 كيلوبت/ثانية على 2 ميجابت/ثانية ADSL/3G وping عالي. في كثير من الأحيان، يُنصح هؤلاء الأشخاص بزيادة وحدة الإرسال الكبرى (MTU) على واجهة VPN إلى قيم عالية للغاية، مثل 48000، أو التلاعب بالمعلمة mssfix. وهذا يساعد جزئيًا، لكن السرعة داخل VPN لا تزال بعيدة جدًا عن سرعة القناة. أحيانًا يلوم الجميع حقيقة أن OpenVPN هو أحد حلول مساحة المستخدم، وهذه هي سرعته العادية، مع الأخذ في الاعتبار جميع أنواع التشفير وHMAC." سخيف!

قليلا من التاريخ

إنه يوليو 2004. سرعة الإنترنت المنزلية النموذجية في البلدان المتقدمة هي 256 كيلوبت في الثانية - 1 ميجابت في الثانية، وفي الدول الأقل نموًا - 56 كيلوبت في الثانية. تم إصدار Linux kernel 2.6.7 منذ وقت ليس ببعيد، ولن يتم إصدار 2.6.8، الذي يتم فيه تمكين مقياس نافذة TCP افتراضيًا، إلا بعد مرور شهر. تم تطوير مشروع OpenVPN منذ 3 سنوات، ويتم إعداد الإصدار 2.0 للإصدار.
يضيف أحد المطورين رمزًا يضبط المخزن المؤقت للإرسال والاستقبال الافتراضي على 64 كيلو بايت، ربما لتوحيد حجم المخزن المؤقت بطريقة ما بين الأنظمة الأساسية ولا يعتمد على إعدادات النظام. ومع ذلك، هناك شيء ما معطل في Windows، ويؤدي تحديد حجم المخازن المؤقتة للمقبس إلى مشاكل غريبة في MTU على كافة المحولات في النظام. في النهاية، ينتهي الأمر بالكود التالي في إصدار OpenVPN 2.0-beta8:

#ifndef WIN32 o->rcvbuf = 65536; o->sndbuf = 65536; #إنهاء إذا

بعض المعلومات التقنية

إذا كنت قد استخدمت OpenVPN، فأنت تعلم أنه يمكنه العمل عبر كل من UDP وTCP. إذا قمت بتعيين قيمة مخزن مؤقت صغيرة على مقبس TCP، في حالتنا 64 كيلو بايت، فلن تتمكن خوارزمية ضبط نافذة TCP ببساطة من تجاوز هذه القيمة.
ماذا يعني هذا؟ لنفترض أنك تتصل بخادم في الولايات المتحدة من روسيا عبر OpenVPN باستخدام مخازن مؤقتة للمقابس القياسية. لديك قناة واسعة، مثلاً 50 ميجابت/ثانية، ولكن نظرًا للمسافة، يبلغ معدل الاتصال 100 مللي ثانية. ما هي السرعة القصوى التي تعتقد أنه يمكنك تحقيقها؟ 5.12 ميجابت في الثانية. أنت بحاجة إلى مخزن مؤقت لا يقل عن 640 كيلو بايت لتحميل قناتك ذات 50 ميجابت.
سيعمل OpenVPN عبر UDP بشكل أسرع إلى حد ما نظرًا لتطبيقه الخاص لإعادة توجيه الحزم، ولكنه أيضًا بعيد عن المثالية.

ما يجب القيام به؟

كما كنت قد خمنت، لا يزال حجم المخزن المؤقت هذا مستخدمًا في أحدث إصدار من OpenVPN. كيف يمكننا تصحيح الوضع؟ الخيار الصحيح هو منع OpenVPN من تغيير حجم مخازن المقبس المؤقتة.
تحتاج إلى إضافة الأسطر التالية إلى ملفات تكوين الخادم والعميل:

سندبوف 0 ركفبوف 0

في هذه الحالة، سيتم تعيين حجم المخزن المؤقت من خلال إعدادات نظام التشغيل. بالنسبة لنظام التشغيل Linux وTCP، ستتغير هذه القيمة وفقًا للقيم من net.ipv4.tcp_rmem وnet.ipv4.tcp_wmem، وبالنسبة لـ UDP ستكون قيمة ثابتة net.core.rmem_default وnet.core.wmem_default مقسومة على اثنين.

إذا لم يكن من الممكن تغيير ملفات تكوين العميل لسبب ما، فيجب عليك إرسال أحجام مخزن مؤقت كبيرة بما فيه الكفاية من الخادم:

Sndbuf 0 rcvbuf 0 ادفع "sndbuf 393216" ادفع "rcvbuf 393216"

يختلف UDP قليلًا عن TCP. ليس له ما يعادل Window Scale ولا يتطلب تأكيدات تسليم الحزم في طبقة النقل، ولكن انخفاض حجم المخزن المؤقت للاستقبال يمكن أن يبطئه إذا امتلأ المخزن المؤقت قبل أن يتمكن OpenVPN من قراءته. إذا كانت السرعة داخل النفق تبدو منخفضة بالنسبة لك حتى مع التغييرات الموضحة أعلاه، فقد يكون من المنطقي إما زيادة حجم المخزن المؤقت للنظام بأكمله عن طريق زيادة net.core.rmem_default وnet.core.wmem_default، أو تحديد دائمًا حجم المخزن المؤقت المحدد في ملف التكوين:

Sndbuf 393216 rcvbuf 393216 دفع "sndbuf 393216" دفع "rcvbuf 393216"

ولكن لدي ويندوز!

إذا كان لديك خادم OpenVPN يعمل على جهاز يعمل بنظام Windows، ويتصل جميع العملاء من Windows فقط، فتهانينا - لست بحاجة إلى تغيير أي شيء، يجب أن يعمل كل شيء بسرعة بالنسبة لك على أي حال.

يعد أداء OpenVPN موضوعًا مؤلمًا للعديد من المسؤولين. في كثير من الأحيان، تختلف السرعة داخل النفق عدة مرات عن سرعة القناة إلى الأسفل. لسوء الحظ، تقدم العديد من الموارد عبر الإنترنت نصائح غير صحيحة أو حتى ضارة بشأن هذا الأمر، أو تدعي أن هذا أمر "طبيعي"، مثل التشفير، أو العمل في مساحة المستخدمين، أو النفقات العامة، وما إلى ذلك، وما إلى ذلك. قليل من الناس يحاولون فهم الآليات الحقيقية التي تؤثر على أداء OpenVPN، في حين أن الجزء الآخر يقدم ببساطة توصيات جاهزة، دون توضيح من أين أتت ولماذا يجب أن يتم ذلك بهذه الطريقة.

لنأخذ حالة حقيقية واحدة كمثال. اتصل بنا مسؤول نظام مألوف واشتكى من السرعة المنخفضة عبر OpenVPN في منافذ بيع بالتجزئة جديدة تابعة للمؤسسة، بينما في أماكن أخرى لم تكن هناك مشاكل في أداء القناة.

بدأنا في اكتشاف ذلك معًا واكتشفنا أنه مع سرعة قناة حقيقية تبلغ حوالي 15 ميجابت/ثانية، لا يتسارع OpenVPN أكثر من 3-4 ميجابت/ثانية، وحتى هذه، وفقًا لزميلنا، لا تزال سرعة "جيدة" .

قبل طلب المساعدة، جرب صديقنا الكثير من التوصيات من الإنترنت، لكن لم ينجح أي منها. اتضح أن الوصول إلى نقطتين جديدتين يتم عبر قناة راديو ويكون اختبار ping، اعتمادًا على الظروف الجوية، في حدود 100-200 مللي ثانية، بينما يكون أقل بكثير بالنسبة للفروع المتبقية، حوالي 50 مللي ثانية.

الآن هو الوقت المناسب لتذكر معلمة مثل حجم المخازن المؤقتة للاستقبال والإرسال. دون الخوض في تفاصيل حول كيفية عمل بروتوكولات الشبكة، يحدد حجم المخزن المؤقت الحد الأقصى لكمية البيانات التي يمكن نقلها لكل وحدة زمنية. البروتوكول الأكثر حساسية لحجم المخزن المؤقت هو TCP، حيث أن حجم نافذة TCP، أي. لا يمكن أن يتجاوز عدد الحزم المرسلة في وقت واحد حجم المخزن المؤقت. يعمل بروتوكول UDP بشكل مختلف، ولكن أداءه محدود أيضًا بحجم المخازن المؤقتة.

دعونا نجري تشبيهًا بسيطًا. نحتاج إلى نقل بعض البضائع من النقطة أ إلى النقطتين ب وج؛ يؤدي طريق سريع جيد بمتوسط ​​سرعة 90 كم/ساعة إلى النقطة ب، وطريق ترابي يؤدي إلى النقطة ب، حيث يمكنك التسارع إلى 45 كم/ساعة. ح. من الواضح أنه باستخدام نفس وسيلة النقل في نفس الوقت سيكون من الممكن تسليم ضعف كمية البضائع إلى النقطة B مقارنة بالنقطة C.

في الشبكات، كل شيء يحدث بالمثل. تاريخيًا، يبلغ حجم المخزن المؤقت لـ OpenVPN 64 كيلو بايت، وفي أنظمة Linux يتم تعيين هذه القيمة قسرًا، وفي Windows يبدو أنها تُترك لنظام التشغيل، ولكن في الواقع، لا يزال لدينا في أغلب الأحيان نفس 64 كيلو بايت. من السهل التحقق من ذلك من خلال النظر في السجل:

المخازن المؤقتة للمأخذ: R=S=

الآن دعونا نسلح أنفسنا بالآلة الحاسبة ونجري العمليات الحسابية. لا يمكن أن يتجاوز حجم البيانات المرسلة أو المستلمة في عملية إرسال واحدة حجم المخزن المؤقت، ويكون عدد عمليات الإرسال لكل وحدة زمنية محدودًا بسرعة الحزم (ping). وبالتالي، مع اختبار ping قدره 50 مللي ثانية يمكننا إجراء 20 عملية إرسال في الثانية، ومع 200 مللي ثانية يمكننا إجراء خمس عمليات إرسال فقط. يمكننا إرسال 64 كيلو بايت في المرة الواحدة، ونعتقد أنه عند 50 مللي ثانية ستكون 1280 كيلو بايت / ثانية (1.25 ميجا بايت / ثانية) أو 10 ميجابت / ثانية. والنتيجة جيدة جدًا، ومع سرعة القناة الإجمالية للفروع التي تتراوح بين 15-20 ميجابت/ثانية، يمكن بسهولة أن يعزى هذا القيد إلى حركة مرور الخدمة، والتشفير، وما إلى ذلك.

مع اختبار ping يبلغ 200 مللي ثانية، يصبح كل شيء أكثر حزنًا، وسنصل إلى سقف 320 كيلو بايت / ثانية أو 2.5 ميجابت / ثانية. وهكذا، ومن خلال حسابات رياضية بسيطة، أجبنا على السؤال الرئيسي: “لماذا تتباطأ سرعة OpenVPN؟” كما نرى، لا علاقة للتشفير ولا "النفقات العامة" بالأمر، المشكلة تكمن في القيود المادية للقناة.

ما يجب القيام به؟ الجواب بسيط - زيادة حجم المخازن المؤقتة. من السهل القيام بذلك، افتح ملف تكوين الخادم وأضف الأسطر هناك:

سندبوف 524288
ار سي في بوف 524288

سيؤدي ذلك إلى ضبط حجم المخزن المؤقت على 512 كيلو بايت والسماح للسرعات عند 50 مللي ثانية بأن تصل إلى 80 ميجابت في الثانية، وعند 200 مللي ثانية إلى 20 ميجابت في الثانية.

تنصح معظم الأدلة بإضافة نفس الأسطر إلى ملف تكوين العميل، ولكن كما تبين عمليًا، فإن هذه الخيارات لا تعمل على جانب العميل، لذا يجب عليك نقل أحجام المخزن المؤقت من جانب الخادم، لذلك سنضيف اثنين آخرين خطوط لتكوين الخادم:

اضغط على "sndbuf 524288"
اضغط على "rcvbuf 524288"

للتأكد من أن الإعدادات تعمل، دعونا نلقي نظرة على السجل الموجود على العميل، حيث يجب أن نجد شيئًا مثل ما يلي:

المخازن المؤقتة للمأخذ: R=S=

أيضًا، يعبر عدد من المصادر عن رأي مفاده أن هذه المشكلة (أحجام المخزن المؤقت) مناسبة فقط لأنظمة Linux، وفي Windows يجب أن يعمل كل شيء بسرعة، ومع ذلك، اكتشفنا مع عميل آخر أنه في أحد الفروع، مع اتصال سلكي، تم تثبيت Windows Server 2008 R2 بأحجام مخزن مؤقت تبلغ 8 كيلو بايت:

المخازن المؤقتة للمأخذ: R=S=

وهذا، حتى مع وجود اختبار جيد يبلغ 50 مللي ثانية، لا يزيد عن 1.25 ميجابت/ثانية، مع سرعة قناة أعلى بعشرات المرات من هذه القيمة.

في حالتنا، سمحت لنا زيادة المخزن المؤقت إلى 512 كيلو بايت بتحقيق سرعات تتراوح بين 11-12 ميجابت/ثانية، وهو ما يتوافق تمامًا مع سرعة القناة الفعلية.

لذلك، ننصحك بعدم الاعتماد على القيم الافتراضية، ولكن أن تتولى زمام الأمور بنفسك، وأن تقوم بتقييم شروط الوصول حقًا، وحساب وتعيين القيم اللازمة للمخازن المؤقتة للاستقبال والإرسال، مما سيسمح لك بالاستفادة الكاملة القناة ولم تعد تطرح السؤال: "لماذا OpenVPN بطيء؟"

المشكلة الموضحة متأصلة فقط في فرع OpenVPN 2.3 في الإصدار 2.4، ولا تتغير أحجام المخزن المؤقت دون طلب المستخدم.

من وقت لآخر، أرى مواضيع في المنتديات حيث يقوم الأشخاص بتوصيل مكاتب متعددة باستخدام OpenVPN ويحصلون على سرعات بطيئة، أقل بكثير من سرعة الارتباط. بالنسبة للبعض قد يكون 20 ميجابت/ثانية مع قناة 100 ميجابت/ثانية على كلا الجانبين، بينما بالنسبة للآخرين بالكاد يحصلون على 400 كيلوبت/ثانية على 2 ميجابت/ثانية ADSL/3G وping عالي. في كثير من الأحيان، يُنصح هؤلاء الأشخاص بزيادة وحدة الإرسال الكبرى (MTU) على واجهة VPN إلى قيم عالية للغاية، مثل 48000، أو التلاعب بالمعلمة mssfix. وهذا يساعد جزئيًا، لكن السرعة داخل VPN لا تزال بعيدة جدًا عن سرعة القناة. أحيانًا يلوم الجميع حقيقة أن OpenVPN هو أحد حلول مساحة المستخدم، وهذه هي سرعته العادية، مع الأخذ في الاعتبار جميع أنواع التشفير وHMAC." سخيف!

قليلا من التاريخ

إنه يوليو 2004. سرعة الإنترنت المنزلية النموذجية في البلدان المتقدمة هي 256 كيلوبت في الثانية - 1 ميجابت في الثانية، وفي الدول الأقل نموًا - 56 كيلوبت في الثانية. تم إصدار Linux kernel 2.6.7 منذ وقت ليس ببعيد، ولن يتم إصدار 2.6.8، الذي يتم فيه تمكين مقياس نافذة TCP افتراضيًا، إلا بعد مرور شهر. تم تطوير مشروع OpenVPN منذ 3 سنوات، ويتم إعداد الإصدار 2.0 للإصدار.
يضيف أحد المطورين رمزًا يضبط المخزن المؤقت للإرسال والاستقبال الافتراضي على 64 كيلو بايت، ربما لتوحيد حجم المخزن المؤقت بطريقة ما بين الأنظمة الأساسية ولا يعتمد على إعدادات النظام. ومع ذلك، هناك شيء ما معطل في Windows، ويؤدي تحديد حجم المخازن المؤقتة للمقبس إلى مشاكل غريبة في MTU على كافة المحولات في النظام. في النهاية، ينتهي الأمر بالكود التالي في إصدار OpenVPN 2.0-beta8:
#ifndef WIN32 o->rcvbuf = 65536; o->sndbuf = 65536; #إنهاء إذا

بعض المعلومات التقنية

إذا كنت قد استخدمت OpenVPN، فأنت تعلم أنه يمكنه العمل عبر كل من UDP وTCP. إذا قمت بتعيين قيمة مخزن مؤقت صغيرة على مقبس TCP، في حالتنا 64 كيلو بايت، فلن تتمكن خوارزمية ضبط نافذة TCP ببساطة من تجاوز هذه القيمة.
ماذا يعني هذا؟ لنفترض أنك تتصل بخادم في الولايات المتحدة من روسيا عبر OpenVPN باستخدام مخازن مؤقتة للمقابس القياسية. لديك قناة واسعة، مثلاً 50 ميجابت/ثانية، ولكن نظرًا للمسافة، يبلغ معدل الاتصال 100 مللي ثانية. ما هي السرعة القصوى التي تعتقد أنه يمكنك تحقيقها؟ 5.12 ميجابت في الثانية. أنت بحاجة إلى مخزن مؤقت لا يقل عن 640 كيلو بايت لتحميل قناتك ذات 50 ميجابت.
سيعمل OpenVPN عبر UDP بشكل أسرع إلى حد ما نظرًا لتطبيقه الخاص لإعادة توجيه الحزم، ولكنه أيضًا بعيد عن المثالية.

ما يجب القيام به؟

كما كنت قد خمنت، لا يزال حجم المخزن المؤقت هذا مستخدمًا في أحدث إصدار من OpenVPN. كيف يمكننا تصحيح الوضع؟ الخيار الصحيح هو منع OpenVPN من تغيير حجم مخازن المقبس المؤقتة.
تحتاج إلى إضافة الأسطر التالية إلى ملفات تكوين الخادم والعميل:
سندبوف 0 ركفبوف 0
في هذه الحالة، سيتم تعيين حجم المخزن المؤقت من خلال إعدادات نظام التشغيل. بالنسبة لنظام التشغيل Linux وTCP، ستتغير هذه القيمة وفقًا للقيم من net.ipv4.tcp_rmem وnet.ipv4.tcp_wmem، وبالنسبة لـ UDP ستكون قيمة ثابتة net.core.rmem_default وnet.core.wmem_default مقسومة على اثنين.

إذا لم يكن من الممكن تغيير ملفات تكوين العميل لسبب ما، فيجب عليك إرسال أحجام مخزن مؤقت كبيرة بما فيه الكفاية من الخادم:
sndbuf 0 rcvbuf 0 ادفع "sndbuf 393216" ادفع "rcvbuf 393216"
يختلف UDP قليلًا عن TCP. ليس له ما يعادل Window Scale ولا يتطلب تأكيدات تسليم الحزم في طبقة النقل، ولكن انخفاض حجم المخزن المؤقت للاستقبال يمكن أن يبطئه إذا امتلأ المخزن المؤقت قبل أن يتمكن OpenVPN من قراءته. إذا كانت السرعة داخل النفق تبدو منخفضة بالنسبة لك حتى مع التغييرات الموضحة أعلاه، فقد يكون من المنطقي إما زيادة حجم المخزن المؤقت للنظام بأكمله عن طريق زيادة net.core.rmem_default وnet.core.wmem_default، أو تحديد دائمًا حجم المخزن المؤقت المحدد في ملف التكوين:
sndbuf 393216 rcvbuf 393216 دفع "sndbuf 393216" دفع "rcvbuf 393216"

ولكن لدي ويندوز!

إذا كان لديك خادم OpenVPN يعمل على جهاز يعمل بنظام Windows، ويتصل جميع العملاء من Windows فقط، فتهانينا - لست بحاجة إلى تغيير أي شيء، يجب أن يعمل كل شيء بسرعة بالنسبة لك على أي حال.

المشكلة الموضحة متأصلة فقط في فرع OpenVPN 2.3 في الإصدار 2.4، ولا تتغير أحجام المخزن المؤقت دون طلب المستخدم.

من وقت لآخر، أرى مواضيع في المنتديات حيث يقوم الأشخاص بتوصيل مكاتب متعددة باستخدام OpenVPN ويحصلون على سرعات بطيئة، أقل بكثير من سرعة الارتباط. بالنسبة للبعض قد يكون 20 ميجابت/ثانية مع قناة 100 ميجابت/ثانية على كلا الجانبين، بينما بالنسبة للآخرين بالكاد يحصلون على 400 كيلوبت/ثانية على 2 ميجابت/ثانية ADSL/3G وping عالي. في كثير من الأحيان، يُنصح هؤلاء الأشخاص بزيادة وحدة الإرسال الكبرى (MTU) على واجهة VPN إلى قيم عالية للغاية، مثل 48000، أو التلاعب بالمعلمة mssfix. وهذا يساعد جزئيًا، لكن السرعة داخل VPN لا تزال بعيدة جدًا عن سرعة القناة. أحيانًا يلوم الجميع حقيقة أن OpenVPN هو أحد حلول مساحة المستخدم، وهذه هي سرعته العادية، مع الأخذ في الاعتبار جميع أنواع التشفير وHMAC." سخيف!

قليلا من التاريخ

إنه يوليو 2004. سرعة الإنترنت المنزلية النموذجية في البلدان المتقدمة هي 256 كيلوبت في الثانية - 1 ميجابت في الثانية، وفي الدول الأقل نموًا - 56 كيلوبت في الثانية. تم إصدار Linux kernel 2.6.7 منذ وقت ليس ببعيد، ولن يتم إصدار 2.6.8، الذي يتم فيه تمكين مقياس نافذة TCP افتراضيًا، إلا بعد مرور شهر. تم تطوير مشروع OpenVPN منذ 3 سنوات، ويتم إعداد الإصدار 2.0 للإصدار.
يضيف أحد المطورين رمزًا يضبط المخزن المؤقت للإرسال والاستقبال الافتراضي على 64 كيلو بايت، ربما لتوحيد حجم المخزن المؤقت بطريقة ما بين الأنظمة الأساسية ولا يعتمد على إعدادات النظام. ومع ذلك، هناك شيء ما معطل في Windows، ويؤدي تحديد حجم المخازن المؤقتة للمقبس إلى مشاكل غريبة في MTU على كافة المحولات في النظام. في النهاية، ينتهي الأمر بالكود التالي في إصدار OpenVPN 2.0-beta8:
#ifndef WIN32 o->rcvbuf = 65536; o->sndbuf = 65536; #إنهاء إذا

بعض المعلومات التقنية

إذا كنت قد استخدمت OpenVPN، فأنت تعلم أنه يمكنه العمل عبر كل من UDP وTCP. إذا قمت بتعيين قيمة مخزن مؤقت صغيرة على مقبس TCP، في حالتنا 64 كيلو بايت، فلن تتمكن خوارزمية ضبط نافذة TCP ببساطة من تجاوز هذه القيمة.
ماذا يعني هذا؟ لنفترض أنك تتصل بخادم في الولايات المتحدة من روسيا عبر OpenVPN باستخدام مخازن مؤقتة للمقابس القياسية. لديك قناة واسعة، مثلاً 50 ميجابت/ثانية، ولكن نظرًا للمسافة، يبلغ معدل الاتصال 100 مللي ثانية. ما هي السرعة القصوى التي تعتقد أنه يمكنك تحقيقها؟ 5.12 ميجابت في الثانية. أنت بحاجة إلى مخزن مؤقت لا يقل عن 640 كيلو بايت لتحميل قناتك ذات 50 ميجابت.
سيعمل OpenVPN عبر UDP بشكل أسرع إلى حد ما نظرًا لتطبيقه الخاص لإعادة توجيه الحزم، ولكنه أيضًا بعيد عن المثالية.

ما يجب القيام به؟

كما كنت قد خمنت، لا يزال حجم المخزن المؤقت هذا مستخدمًا في أحدث إصدار من OpenVPN. كيف يمكننا تصحيح الوضع؟ الخيار الصحيح هو منع OpenVPN من تغيير حجم مخازن المقبس المؤقتة.
تحتاج إلى إضافة الأسطر التالية إلى ملفات تكوين الخادم والعميل:
سندبوف 0 ركفبوف 0
في هذه الحالة، سيتم تعيين حجم المخزن المؤقت من خلال إعدادات نظام التشغيل. بالنسبة لنظام التشغيل Linux وTCP، ستتغير هذه القيمة وفقًا للقيم من net.ipv4.tcp_rmem وnet.ipv4.tcp_wmem، وبالنسبة لـ UDP ستكون قيمة ثابتة net.core.rmem_default وnet.core.wmem_default مقسومة على اثنين.

إذا لم يكن من الممكن تغيير ملفات تكوين العميل لسبب ما، فيجب عليك إرسال أحجام مخزن مؤقت كبيرة بما فيه الكفاية من الخادم:
sndbuf 0 rcvbuf 0 ادفع "sndbuf 393216" ادفع "rcvbuf 393216"
يختلف UDP قليلًا عن TCP. ليس له ما يعادل Window Scale ولا يتطلب تأكيدات تسليم الحزم في طبقة النقل، ولكن انخفاض حجم المخزن المؤقت للاستقبال يمكن أن يبطئه إذا امتلأ المخزن المؤقت قبل أن يتمكن OpenVPN من قراءته. إذا كانت السرعة داخل النفق تبدو منخفضة بالنسبة لك حتى مع التغييرات الموضحة أعلاه، فقد يكون من المنطقي إما زيادة حجم المخزن المؤقت للنظام بأكمله عن طريق زيادة net.core.rmem_default وnet.core.wmem_default، أو تحديد دائمًا حجم المخزن المؤقت المحدد في ملف التكوين:
sndbuf 393216 rcvbuf 393216 دفع "sndbuf 393216" دفع "rcvbuf 393216"

ولكن لدي ويندوز!

إذا كان لديك خادم OpenVPN يعمل على جهاز يعمل بنظام Windows، ويتصل جميع العملاء من Windows فقط، فتهانينا - لست بحاجة إلى تغيير أي شيء، يجب أن يعمل كل شيء بسرعة بالنسبة لك على أي حال.