قم بإعداد VPN بسيط باستخدام WireGuard و Raspberry Pi كخادم

نظرًا لأن WireGuard ستكون جزءًا من مستقبل Linux 5.6 kernel ، فقد قررت أن أرى أفضل طريقة لدمج شبكة VPN هذه مع جهاز توجيه / نقطة وصول LTE على Raspberry Pi .

معدات


  • Raspberry Pi 3 مع وحدة LTE وعنوان IP العام. سيكون هناك خادم VPN (يشار إليه فيما يلي باسم edgewalker )
  • هاتف Android يجب أن يستخدم VPN لجميع الاتصالات
  • كمبيوتر محمول يعمل بنظام Linux والذي يجب أن يستخدم VPN فقط داخل الشبكة

يجب أن يكون كل جهاز يتصل بشبكة VPN قادرًا على الاتصال بجميع الأجهزة الأخرى. على سبيل المثال ، يجب أن يكون الهاتف قادرًا على الاتصال بخادم الويب على جهاز كمبيوتر محمول إذا كان كلا الجهازين جزءًا من VPN. إذا كان الإعداد بسيطًا جدًا ، فيمكنك التفكير في الاتصال بشبكة VPN وكمبيوتر سطح مكتب (عبر Ethernet).

وبالنظر إلى أن السلكية والاتصالات اللاسلكية أصبحت أقل وأقل أمنا على مر الزمن ( الهجمات المستهدفة ، هجوم كراك على WPA2 القرصنة و الهجوم Dragonblood ضد WPA3 )، والنظر بجدية في إمكانية استخدام WireGuard لجميع الأجهزة بلدي، بغض النظر عن البيئة التي يعملون فيها.

تثبيت البرامج


يوفر WireGuard حزمًا مُجمَّعة مسبقًا لمعظم توزيعات Linux و Windows و macOS. يتم تسليم تطبيقات Android و iOS من خلال أدلة التطبيق.

لدي أحدث إصدار من Fedora Linux 31 ، وقبل التثبيت ، كنت كسولًا جدًا لقراءة الدليل. لقد عثرت للتو على الحزم wireguard-tools، وقمت بتثبيتها ، ثم لم أتمكن من فهم سبب عدم عمل أي شيء. أظهر مزيد من البحث أنه لم يكن لدي حزمة مثبتة wireguard-dkms(مع برنامج تشغيل شبكة) ، ولم تكن في مستودع توزيع بلدي.

إذا قرأت التعليمات ، فسأقوم بالخطوات الصحيحة:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

لدي مجموعة توزيع Raspbian Buster مثبتة على Raspberry Pi ، هناك بالفعل حزمة هناك wireguard، قم بتثبيتها:

$ sudo apt install wireguard

على هاتف Android ، قمت بتثبيت تطبيق WireGuard VPN من دليل Google App Store الرسمي.

تثبيت المفتاح


لمصادقة المضيف ، يستخدم Wireguard مخطط مفتاح خاص / عام بسيط لمصادقة مضيفي VPN. يمكنك بسهولة إنشاء مفاتيح VPN باستخدام الأمر التالي:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

هذا يعطينا ثلاثة أزواج رئيسية (ستة ملفات). لن نشير إلى الملفات الموجودة في التكوينات ، ولكننا ننسخ المحتويات هنا: كل مفتاح هو سطر واحد في base64.

إنشاء ملف تكوين لخادم VPN (Raspberry Pi)


التكوين بسيط جدًا ، لقد أنشأت الملف التالي /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

زوجان من التعليقات:

  • في الأماكن المناسبة ، تحتاج إلى إدراج خطوط من الملفات التي تحتوي على مفاتيح
  • يستخدم VPN الخاص بي نطاقًا داخليًا 10.200.200.0/24
  • للأوامر PostUp/ PostDownلدي واجهة شبكة خارجية wwan0 ، قد يكون لديك واحد آخر (على سبيل المثال ، eth0)

يتم رفع شبكة VPN بسهولة من خلال الأمر التالي:

$ sudo wg-quick up wg0

أحد التفاصيل الصغيرة: كخادم DNS الذي استخدمته dnsmasqمع الربط بواجهة الشبكة br0، أضفت أيضًا الأجهزة wg0إلى قائمة الأجهزة المسموح بها. في dnsmasq ، يتم ذلك عن طريق إضافة سطر جديد بواجهة شبكة إلى ملف التكوين /etc/dnsmasq.conf، على سبيل المثال:

interface=br0
interface=wg0

بالإضافة إلى ذلك ، أضفت قاعدة iptable للسماح بحركة المرور إلى منفذ UDP للاستماع (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

الآن بعد أن عمل كل شيء ، يمكننا ضبط نفق VPN ليبدأ تلقائيًا:

$ sudo systemctl enable wg-quick@wg0.service

تكوين العميل على الكمبيوتر المحمول


على الكمبيوتر المحمول ، قم بإنشاء ملف تكوين /etc/wireguard/wg0.confبنفس الإعدادات:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

ملاحظات:

  • بدلاً من edgewalker ، تحتاج إلى تحديد IP العام أو مضيف خادم VPN
  • من خلال الضبط AllowedIPsعلى 10.200.200.0/24، نستخدم VPN فقط للوصول إلى الشبكة الداخلية. ستستمر حركة المرور إلى جميع عناوين / خوادم IP الأخرى في المرور عبر القنوات المفتوحة "العادية". سيتم أيضًا استخدام خادم DNS تم تكوينه مسبقًا على الكمبيوتر المحمول.

للاختبار والبدء التلقائي ، نستخدم نفس الأوامر wg-quickو systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

إعداد عميل على هاتف Android


بالنسبة لهاتف Android ، قم بإنشاء ملف تكوين مشابه جدًا (لنطلق عليه mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

على عكس التكوين على الكمبيوتر المحمول ، يجب على الهاتف استخدام خادم VPN الخاص بنا كخادم DNS (سلسلة DNS) ، وكذلك تمرير جميع حركة المرور عبر نفق VPN ( AllowedIPs = 0.0.0.0/0).

بدلاً من نسخ الملف إلى جهازك المحمول ، يمكنك تحويله إلى رمز QR:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

سيتم إخراج رمز الاستجابة السريعة إلى وحدة التحكم مثل ASCII. يمكنك مسحه ضوئيًا من تطبيق Android VPN وتكوين نفق VPN تلقائيًا.

استنتاج


إعداد WireGuard أمر سحري فقط مقارنة بـ OpenVPN.

Source: https://habr.com/ru/post/undefined/


All Articles