Apache Proxy
الحل: تحويل الجهاز الافتراضي الأول إلى Gateway باستخدام NAT
بما أن الجهاز الأول متصل بالمودم، سنجعل بقية الأجهزة تستخدمه كبوابة (Gateway). إليك الخطوات:
1. تفعيل IP Forwarding على الجهاز الافتراضي الأول
افتح الطرفية (SSH) على الجهاز الأول ونفذ:
sudo nano /etc/sysctl.conf
ابحث عن هذا السطر:
# net.ipv4.ip_forward=1
وقم بإلغاء التعليق عنه ليصبح هكذا:
net.ipv4.ip_forward=1
ثم قم بحفظ الملف وتنفيذ الأمر التالي لتطبيق التغييرات:
sudo sysctl -p
2. إعداد iptables لتوجيه حركة المرور
قم بتنفيذ الأوامر التالية في الجهاز الأول:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
لحفظ القواعد حتى بعد إعادة التشغيل، نفذ:
sudo apt install iptables-persistent
sudo netfilter-persistent save
3. إعداد الأجهزة الافتراضية الأخرى لاستخدام الجهاز الأول كبوابة
على كل جهاز افتراضي آخر، تأكد أن إعداد الشبكة يحتوي على:
Gateway: 192.168.0.1
DNS: 8.8.8.8 (أو أي DNS تفضله)
4. إعداد Apache Proxy Balancer على الجهاز الأول
لتوزيع الطلبات بين الأجهزة، قم بتنفيذ:
sudo apt update && sudo apt install apache2 -y
sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests ssl headers rewrite
sudo systemctl restart apache2
ثم قم بتعديل ملف إعداد الموقع الافتراضي:
sudo nano /etc/apache2/sites-available/000-default.conf
وأضف التكوين التالي:
<VirtualHost *:80>
ServerName yourdomain.com
ProxyPreserveHost On
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://192.168.0.10 retry=5
BalancerMember http://192.168.0.2 retry=5
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
5. دعم WebSocket و RTMP
لضمان عمل WebSocket والبث المباشر عبر RTMP، أضف:
ProxyPass /ws/ ws://192.168.0.10:8080/
ProxyPassReverse /ws/ ws://192.168.0.10:8080/
ProxyPass /wss/ ws://192.168.0.10:8080/
ProxyPassReverse /wss/ ws://192.168.0.10:8080/
وتأكد من توجيه RTMP عبر iptables:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1935 -j DNAT --to-destination 192.168.0.10:1935
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
6. تثبيت شهادة SSL
لضمان أمان الاتصال عبر HTTPS:
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache
7. اختبار الاتصال
للتحقق من الاتصال العام:
curl -I http://yourdomain.com
curl -I https://yourdomain.com
لاختبار WebSocket:
wscat -c wss://yourdomain.com/ws/
واختبار RTMP:
telnet yourdomain.com 1935
ServerName yourdomain.com
ProxyPreserveHost On
ProxyRequests Off
BalancerMember http://192.168.0.10 retry=5
BalancerMember http://192.168.0.2 retry=5
ProxySet lbmethod=byrequests
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
# إعادة توجيه HTTP إلى HTTPS تلقائيًا
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
ServerName yourdomain.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
ProxyPreserveHost On
ProxyRequests Off
BalancerMember http://192.168.0.10 retry=5
BalancerMember http://192.168.0.2 retry=5
ProxySet lbmethod=byrequests
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
# دعم WebSocket
ProxyPass /ws/ ws://192.168.0.10:8080/
ProxyPassReverse /ws/ ws://192.168.0.10:8080/
ProxyPass /wss/ ws://192.168.0.10:8080/
ProxyPassReverse /wss/ ws://192.168.0.10:8080/
🎯 النتيجة النهائية
- ✅ الجهاز الأول يعمل كـ Gateway وProxy Balancer.
- ✅ جميع المنافذ (بما في ذلك 80، 443، 1935) تمر للأجهزة الأخرى.
- ✅ دعم WebSocket و RTMP بدون مشاكل.
- ✅ HTTPS مدعوم، وHTTP يتم تحويله إليه تلقائيًا.
💡 إذا واجهت أي مشاكل، لا تتردد في التواصل! 🚀