لو الـ web server بيكلّم الـ database server على IP عام بـ postgresql://db.example.com:5432، انت بتدفع تأمين مش لازم تدفعه. WireGuard في 4 ملفات config و8 دقائق بيقفل البورت ده على الـ internet خالص، ويخلّي الـ DB ما تتشافش غير من سيرفراتك بالظبط.
WireGuard: VPN في 4 ملفات config، مش 400 سطر OpenVPN
المشكلة باختصار
السيناريو اللي بنشتغل عليه: 3 سيرفرات على Hetzner — web1, web2 في فرانكفورت، و db في هلسنكي. الـ web servers محتاجين يكلموا الـ DB على PostgreSQL port. الطريقة الشائعة الغلط:
- افتح
5432على الـ public IP بتاع DB. - ضيف
pg_hba.confبـscram-sha-256وفلتر IPs. - عدّل firewall كل ما تضيف سيرفر جديد.
المشكلة: الـ DB بقى يتشاف من كل الـ internet. Shodan بيرصد IPك في 6 ساعات، وبتاخد 4,200 محاولة brute force في اليوم على الـ Postgres password. الحل مش زيادة fail2ban — الحل إنك تشيل الـ DB من الـ internet أصلاً.
تخيل المطار: ممر VIP بدل بوابات الجمهور
تخيل إن عندك 3 مكاتب في مطار القاهرة. المكتب الأول والتاني للموظفين، والتالت فيه الخزينة. لو قعدت تنقّل الفلوس بين المكاتب من خلال صالة الركّاب العامة، أنت معرّض للسرقة كل ثانية حتى لو الشنطة مقفّلة بـ 4 أقفال. الحل العقلاني: افتح ممر VIP خاص بين المكاتب التلاتة، مفيش حد بيدخله غير اللي معاه بصمة محددة سلفًا.
WireGuard هو الممر ده بالظبط. كل سيرفر بياخد مفتاحين: واحد عام (public key) بيوزّعه على بقية السيرفرات، وواحد خاص (private key) ميطلعش من السيرفر أبدًا. السيرفرات بتتعرف على بعض بالمفاتيح دي، ومحدش تاني يقدر يدخل القناة حتى لو عرف الـ IP والـ port.
التعريف العلمي بعد المثال
WireGuard كود في 4,000 سطر Linux kernel module (مقارنةً بـ OpenVPN حوالي 100,000 سطر). بيستخدم Noise Protocol Framework (تصميم Trevor Perrin، 2018) لتبادل المفاتيح، و ChaCha20-Poly1305 للتشفير، و Curve25519 للتوقيع. الفرق العملي:
- OpenVPN: TLS handshake، CA certificates، client/server roles، إعدادات بمئات السطور.
- WireGuard: peers متساوية، مفيش CA، الإعداد في ≤ 12 سطر لكل سيرفر.
الـ kernel module متضمّن داخل Linux منذ الإصدار 5.6 (مارس 2020)، يعني على Ubuntu 22.04 وما فوق مش محتاج تحمّل أي حاجة خارجية.
الخطوات السبع: من 3 سيرفرات معزولة لشبكة خاصة موحّدة
- ثبّت WireGuard على التلات سيرفرات:
apt install wireguard -y. - ولّد المفاتيح على كل سيرفر:
wg genkey | tee privatekey | wg pubkey > publickey.