جهاز توجيه UDP سيئ لعام 2020 وما بعده.
لذا فأنا ألعب مع رون ولدي هذه الشبكة المنزلية المعقدة التي تجعل رون يدور في حلقة مفرغة. لقد بدأت في تصحيح الأخطاء واتضح أن Roon يرسل رسائل بث إلى UDP/9003. لن يقوم جدار الحماية/جهاز التوجيه الخاص بي بإعادة توجيه هذه الرسائل بالطبع، لأن هذا هو الشيء الصحيح الذي ينبغي عمله.
لسوء الحظ، أريد حقًا إعادة توجيه رسائل البث هذه إلى شبكات VLAN/شبكات فرعية أخرى على شبكتي المحلية. لقد بدأت باستخدام udp-proxy-relay-redux الذي كان يعمل بشكل رائع في البداية.
لكنني أيضًا أحب حقًا إعادة توجيه هذه الرسائل عبر اتصالات OpenVPN الخاصة بي والتي تستخدم برنامج التشغيل tun
وهو عبارة عن واجهة من نقطة إلى نقطة ولا يدعم البث بشكل صريح . لم يعمل هذا بشكل جيد مع udp-proxy-relay-redux لأن Roon يتصرف بشكل سيئ ولا يزال يحاول إرسال "البث" إلى العنوان .255 والذي يتم إسقاطه بعد ذلك على الأرض لأن خادم VPN الخاص بي لا يحتوي على العنوان xxx255. في الأساس، على واجهة نقطة إلى نقطة، تم التعامل مع هذه "عمليات البث" على أنها حزمة متجهة إلى مضيف آخر وتم تجاهلها بشكل صحيح.
بدلاً من استخدام مقبس UDP عادي للاستماع إلى رسائل البث، يستخدم udp-proxy-2020
libpcap "لرصد" رسائل بث UDP. هذا يعني أنه يمكن أن يكون أكثر مرونة فيما يتعلق بالحزم التي "يراها" حتى يتمكن بعد ذلك من إرسالها عبر حقن libpcap/packet إلى جميع الواجهات الأخرى التي تم تكوينها. إذا كان هذا يجعلك تشعر بالذهول، حسنًا، مرحبًا بك في عام 2020.
أنا أكتب هذا في GoLang لذا على الأقل يعد التجميع المتقاطع على جهاز التوجيه/جدار الحماية Linux/FreeBSD العشوائي الخاص بك أمرًا سهلاً إلى حد معقول. لا يوجد توافق قبيح لـ C أو محاولة تثبيت Python/Ruby ومجموعة من المكتبات.
وأيضا : ههههههههههههههههههههههههههههههههههههههههههههههههههههههه لا شيء من ذلك صحيح! إن الحاجة إلى استخدام libpcap تعني أنني يجب أن أقوم بالتجميع باستخدام CGO لأن gopacket/pcapgo يدعم Linux فقط للقراءة والكتابة على واجهات الشبكة (إيثرنت؟).
يتم دعم أي نظام يشبه Unix إلى حد كبير لأن قائمة التبعيات هي libpcap
و golang
فقط. أقوم بالتطوير على MacOS وأستهدف على وجه التحديد pfSense/FreeBSD وUbiquiti USG وEdgeRouter وDreamMachine/Pro، حيث إنها شائعة جدًا بين مجتمع مستخدمي Roon.
إذا كنت تستخدم توزيعة Linux RedHat أو Debian، فإن أسهل طريقة للتثبيت هي الحصول على ملف .rpm
أو .deb
المناسب وتثبيته باستخدام مدير الحزم لديك. ثم قم بتحرير /etc/udp-proxy-2020.conf
وابدأ عبر: systemctl start udp-proxy-2020
.
توجد أيضًا صورة عامل إرساء متاحة لنظام التشغيل Linux على AMD64 وARM64 (مثل Ubiquiti UDM).
لاحظ أنه بالنسبة لعمليات نشر Docker، يجب أن تستخدم شبكة مضيفة.
أقوم بإصدار ثنائيات لنظام التشغيل Linux وFreeBSD (pfSense) وMacOS لأجهزة Intel وARM وMIPS.
تتوفر الآن تعليمات وبرامج نصية لبدء التشغيل في دليل البرامج النصية لبدء التشغيل. إذا اكتشفت كيفية إضافة دعم لمنصة أخرى، من فضلك أرسل لي طلب سحب!
قم بتشغيل udp-proxy-2020 --help
للحصول على القائمة الحالية لخيارات سطر الأوامر.
يرجى أيضًا ملاحظة أنه في العديد من أنظمة التشغيل ستحتاج إلى تشغيله كمستخدم root
. يمكن لأنظمة Linux منح إمكانية CAP_NET_RAW
بشكل اختياري.
لا يوجد حاليًا سوى عدد قليل من العلامات التي ربما تحتاج إلى القلق بشأنها:
--interface
-- حدد واجهتين أو أكثر من واجهات الشبكة للاستماع إليها.--port
- حدد منفذ UDP واحدًا أو أكثر للمراقبة.--level
-- حدد مستوى السجل: [تتبع|تصحيح|تحذير|معلومات|خطأ]الخيارات المتقدمة:
--fixed-ip
-- رمز ثابت @ لإرسال حركة المرور إليه دائمًا. مفيد لأشياء مثل OpenVPN في وضع موقع إلى موقع.--timeout
- عدد مللي ثانية لقيمة مهلة PCAP. (الافتراضي هو 250 مللي ثانية)--cache-ttl
-- عدد الدقائق للتخزين المؤقت لعناوين IP. (الافتراضي هو 180 دقيقة / 3 ساعات) قد تحتاج هذه القيمة إلى الزيادة إذا كنت تواجه مشكلات في تمرير حركة المرور إلى العملاء على أنفاق OpenVPN إذا لم تتمكن من استخدام --fixed-ip
لأن العملاء ليس لديهم عنوان IP ثابت.--no-listen
-- لا تستمع إلى منفذ (منافذ) UDP المحددة لتجنب التعارضات--deliver-local
- تسليم الحزم محليًا على واجهة الاسترجاع هناك علامات أخرى بالطبع، قم بتشغيل ./udp-proxy-2020 --help
للحصول على القائمة الكاملة.
مثال:
udp-proxy-2020 --port 9003 --interface eth0,eth0.100,eth1,tun0 --cache-ttl 300
سيتم إعادة توجيه حزم udp/9003 على أربع واجهات: eth0 وeth1 وVLAN100 على eth0 وtun0. سيتم تذكر عناوين IP الخاصة بالعميل على tun0 لمدة 5 دقائق بمجرد التعرف عليها.
ملاحظة: يتطلب "التعلم" من العميل إرسال رسالة udp/9003 أولاً! إذا كان التطبيق الخاص بك يتطلب إرسال رسالة إلى العميل أولاً، فستحتاج إلى تحديد --fixed-ip=1.2.3.4@tun0
حيث 1.2.3.4
هو عنوان IP الخاص بالعميل على tun0.
لقد اختبرت تكوينات VPN "محارب الطريق" مع عميل Roon الذي يعمل على الكمبيوتر المحمول الخاص بي ويتصل مرة أخرى بجدار الحماية المنزلي عبر OpenVPN وWireguard. أنا شخصياً أستخدم Wireguard بدلاً من OpenVPN لأنه أكثر أمانًا وأداء أفضل.
لقد اختبرت أيضًا Site-to-Site VPN باستخدام Wireguard + pfSense. لقد اتبعت توجيهات Wireguard VPN من موقع pfSense وقمت بتثبيت udp-proxy-2020
على كلا جداري الحماية. يجب عليك تكوين خيار --interface
ليشمل واجهات شبكة LAN وWireguard.
إذا كنت تقوم بالإنشاء لنفس النظام الأساسي الذي تنوي تشغيله udp-proxy-2020
، فأنت بحاجة فقط إلى التأكد من أن لديك libpcap
والرؤوس الضرورية (قد تحتاج إلى حزمة -dev
لذلك) وتشغيل make
أو gmake
حسب الاقتضاء ( نحن بحاجة إلى GNU Make، وليس BSD Make).
إذا كنت بحاجة إلى إنشاء منصة مشتركة، فقد يساعدك أحد الأهداف التالية:
make linux-amd64
عبر Dockermake linux-mips64
(Linux/MIPS64 big-endian لـ Ubiquiti USG/EdgeRouter) عبر Dockermake linux-arm
عبر Docker:make freebsd
(pfSense 2.6) عبر Vagrant وVirtualBoxmake docker
يمكنك الحصول على قائمة كاملة بأهداف التصنيع والمعلومات الأساسية عنها عن طريق تشغيل: make help
.
بدءًا من الإصدار 0.0.11، يقوم udp-proxy-2020
الآن افتراضيًا بإنشاء مقبس استماع UDP على منفذ (منافذ) --port
المحدد. يمنع هذا نظام التشغيل الأساسي من إصدار رسائل يتعذر الوصول إلى منفذ ICMP والتي يمكن أن تؤدي إلى كسر عملاء معينين (لا سيما عميل Roon iOS).
المرة الوحيدة التي يجب أن تحتاج فيها إلى استخدام علامة --no-listen
هي إذا كان هناك برنامج آخر يعمل على نفس المضيف مثل udp-proxy-2020
.
اعتبارًا من الإصدار 0.1.0، نعم. تحتاج إلى تحديد خيارات --deliver-local
و --no-listen
بحيث تقوم بتسليم الحزم عبر واجهة الاسترجاع.
هذه العلامات مخصصة لتصحيح الأخطاء في udp-proxy-2020
. يجب عليك استخدام هذه العلامات عندما أطلب منك القيام بذلك كجزء من التذكرة التي فتحتها لـ udp-proxy-2020
.
من صفحة الإصدارات على جيثب.
لا، إنه ليس وكيلاً. إنه أشبه بجهاز التوجيه. لا تحتاج إلى إجراء أي تغييرات بخلاف تشغيله على جهاز التوجيه/جدار الحماية المنزلي الخاص بك.
بصراحة، لم أفكر كثيرًا في الاسم وكان هذا أول ما تبادر إلى ذهني. كما أن التسمية صعبة.
tun
، مثل تلك التي يستخدمها OpenVPNraw
، مثل تلك التي يستخدمها Wireguardvti
لـ IPSec من موقع إلى موقعلاحظ أن أنفاق L2TP VPN على Linux غير متوافقة مع udp-proxy-2020 لأن Linux kernel يعرض تلك الواجهات على أنها Linux SLL والتي لا توفر فك تشفير دقيق للحزم.
لذلك لم أفعل هذا بنفسي، لكن بارت فيرهوفن في منتديات مجتمع رون كتب هذا بالتفصيل عن كيفية القيام بذلك.
تم تصميم udp-proxy-2020 لأنظمة تشغيل وأنظمة تشغيل متعددة:
darwin-amd64
linux-amd64
linux-arm64
(RasPi 2 V1.2 وما فوق، Ubiquiti UniFi Dream Machine)linux-armv7
(RasPi 2 V1.1 والإصدارات الأقدم)linux-armv6
linux-armv5
linux-mips64
(Ubiquiti USG/EdgeRouter)freebsd-amd64
(يعمل مع pfSense على x86)freebsd-arm64
(Netgate SG-1100 وSG-2100)freebsd-armv7
(Netgate SG-3100)بصراحة، فقط أرسل لي رسالة بالبريد الإلكتروني تقول فيها شكرًا أو "نجمة" هذا المشروع في GitHub يكفي شكرًا.
في بعض الأحيان، يسألني شخص ما عن إعطائي بضعة دولارات، لكنني حقًا لا أحتاج إلى أي أموال. إذا كنت لا تزال ترغب في إنفاق بضعة دولارات في طريقي، فأنا أفضل أن تتبرع لبنك Second Harvest Food Bank وهو محلي بالنسبة لي ويمكنه وضع أموالك في عمل أفضل مما كنت سأفعل.