- آیا میخواهید OpenVPN را روی لینوکس بهعنوان کلاینت نصب و مسیرهای خاصی را از طریق VPN یا مسیر عادی عبور دهید؟
- المتطلبات الأساسية
- نصب OpenVPN
- راهاندازی پایه (اجرای دستی)
- کنترل مسیر پیشفرض: رفتار پیشفرض سرور
- روش 1 — ارسال فقط برخی IPها از طریق VPN (Split tunnel)
- روش 2 — کل ترافیک از VPN، اما چند IP مشخص از مسیر عادی عبور کنند (Bypass)
- روش 3 — Policy-based Routing (مسیردهی براساس آدرس مبدأ)
- اتصال با systemd (راهاندازی خودکار)
- DNS و مشکل name resolution
- مثال کامل client.ovpn (نمونه)
- نصائح أمنية وتشغيلية
- رفع خطاهای متداول
- مقایسه کاربردها و نکات برای انواع کاربران
- ملخص واستنتاج
آیا میخواهید OpenVPN را روی لینوکس بهعنوان کلاینت نصب و مسیرهای خاصی را از طریق VPN یا مسیر عادی عبور دهید؟
در این راهنمای عملی و فنی قدمبهقدم، نحوهٔ کانفیگ OpenVPN بهعنوان کلاینت روی توزیعهای رایج لینوکس را بررسی میکنیم. هدف ارائهٔ فایلهای نمونه، اسکریپتهای up/down برای مدیریت روتها، روشهای Split-Tunneling و بایپس برخی IPها و نکات مرتبط با احراز هویت با یوزرنیم/پسورد است.
المتطلبات الأساسية
قبل از شروع، مطمئن شوید که موارد زیر را دارید:
- سیستم لینوکس (Ubuntu/Debian/CentOS/Fedora/Alma)
- بسته openvpn نصبشده
- فایل پیکربندی سرور یا فایل .ovpn از ارائهدهندهٔ VPN
- نامکاربری/رمز عبور در صورت احراز هویت ترکیبی (user/pass + cert)
نصب OpenVPN
دستورات نصب برای توزیعهای متداول:
sudo apt update && sudo apt install openvpn
sudo dnf install openvpn
راهاندازی پایه (اجرای دستی)
اگر فایل client.ovpn دارید، برای اجرای فوری از این دستور استفاده کنید:
sudo openvpn --config client.ovpnاگر سرور از یوزرنیم/پسورد استفاده میکند و نمیخواهید هر بار وارد کنید، یک فایل credentials بسازید:
sudo tee /etc/openvpn/credentials <<'EOF'
myuser
mypassword
EOF
sudo chmod 600 /etc/openvpn/credentialsفي الملف .ovpn خط زیر باید وجود داشته باشد یا اضافه شود:
auth-user-pass /etc/openvpn/credentialsنکتهٔ امنیتی: من auth-nocache استفاده کنید تا OpenVPN پسورد را در حافظه کش نکند:
auth-nocachechmod 600 محافظت کنید و از احراز هویت مبتنی بر گواهی (client certificate) و tls-crypt/tls-auth برای افزایش امنیت استفاده کنید.
کنترل مسیر پیشفرض: رفتار پیشفرض سرور
رفتار پیشفرض مسیرها اغلب توسط سرور تعیین میشود:
- اگر سرور
redirect-gateway def1را push کند، کل ترافیک شما از طریق VPN خواهد رفت (Full Tunnel). - برای جلوگیری از پذیرش route پیشفرض از سرور میتوانید از
route-nopullاستفاده کنید و سپس routeهای مورد نیاز را دستی اضافه کنید.
روش 1 — ارسال فقط برخی IPها از طریق VPN (Split tunnel)
اگر میخواهید تنها آدرسهای مشخصی از طریق VPN ارسال شوند، از route-nopull في الملف client.ovpn استفاده کنید و routeهای موردنظر را اضافه نمایید.
client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
route-nopull
route 203.0.113.45 255.255.255.255
route 198.51.100.0 255.255.255.0توضيح: مع route-nopull هیچ routeای از سرور پذیرفته نمیشود و شما با خطوط route مقصدهای مشخص را از طریق VPN هدایت میکنید.
روش 2 — کل ترافیک از VPN، اما چند IP مشخص از مسیر عادی عبور کنند (Bypass)
وقتی سرور redirect-gateway def1 را push میکند و شما میخواهید چند آدرس خاص از مسیر پیشفرض (اینترنت) عبور کنند، باید gateway اصلی را ذخیره و routeهای بایپس را بازنویسی کنید.
الف) ذخیرهٔ gateway اصلی قبل از اتصال
دستورات نمونه برای گرفتن gateway اصلی و device پیشاز اتصال:
GW=$(ip route show default | awk '/default/ {print $3}')
DEV=$(ip route show default | awk '/default/ {print $5}')پس از بالا آمدن tun0، IPهایی که میخواهید بایپس شوند را مجدداً از طریق GW اضافه کنید:
sudo ip route add 203.0.113.0/24 via $GW dev $DEV
sudo ip route add 8.8.8.8/32 via $GW dev $DEVب) اتومات کردن با اسکریپت up/down
في client.ovpn خطوط زیر را اضافه کنید تا اسکریپتها اجرا شوند:
script-security 2
up /etc/openvpn/client-up.sh
down /etc/openvpn/client-down.shمثال /etc/openvpn/client-up.sh:
#!/bin/bash
echo "$(ip route show default | awk '/default/ {print $3, $5}')" > /var/run/openvpn.origgw
GW=$(awk '{print $1}' /var/run/openvpn.origgw)
DEV=$(awk '{print $2}' /var/run/openvpn.origgw)
ip route add 8.8.8.8/32 via $GW dev $DEV
ip route add 203.0.113.45/32 via $GW dev $DEV
exit 0مثال /etc/openvpn/client-down.sh:
#!/bin/bash
GW=$(awk '{print $1}' /var/run/openvpn.origgw)
DEV=$(awk '{print $2}' /var/run/openvpn.origgw)
ip route del 8.8.8.8/32 via $GW dev $DEV || true
ip route del 203.0.113.45/32 via $GW dev $DEV || true
rm -f /var/run/openvpn.origgw
exit 0فراموش نکنید اسکریپتها را اجرایی کنید:
sudo chmod +x /etc/openvpn/client-up.sh /etc/openvpn/client-down.sh
روش 3 — Policy-based Routing (مسیردهی براساس آدرس مبدأ)
برای هدایت ترافیک با منبع خاص از VPN میتوانید از policy-based routing استفاده کنید.
echo "200 vpnroute" | sudo tee -a /etc/iproute2/rt_tables
sudo ip rule add from 10.0.0.5/32 lookup vpnroute
sudo ip route add default dev tun0 table vpnrouteبرای یافتن اطلاعات tun0 و gateway مجازی:
ip -4 addr show dev tun0
ip route show dev tun0
اتصال با systemd (راهاندازی خودکار)
برای فایلهای پیکربندی در مسیر /etc/openvpn/client/ میتوانید واحد systemd را اجرا کنید:
sudo systemctl start openvpn-client@client
sudo systemctl enable openvpn-client@client
sudo journalctl -u openvpn-client@client -f
DNS و مشکل name resolution
اگر DNS توسط سرور push میشود، در برخی توزیعها نیاز به اسکریپت update-resolv-conf یا هماهنگی با تم حلها بواسطة systemd دارید.
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-confدر سیستمهایی که از تم حلها بواسطة systemd استفاده میکنند، ممکن است نیاز به پیکربندی اضافی داشته باشید.
مثال کامل client.ovpn (نمونه)
client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
auth SHA256
auth-user-pass /etc/openvpn/credentials
auth-nocache
route-nopull
route 203.0.113.45 255.255.255.255
route 198.51.100.0 255.255.255.0
script-security 2
up /etc/openvpn/client-up.sh
down /etc/openvpn/client-down.sh
نصائح أمنية وتشغيلية
- فایل credentials را با
chmod 600محافظت کنید. - از client certificate و
مصادقة TLS/تشفير TLSبرای جلوگیری از DoS ساده استفاده کنید. - من auth-nocache استفاده کنید تا رمز در حافظه کش نشود.
- OpenVPN را بهروز نگه دارید و از Cipher/Hash مدرن مثل
AES-256-GCMأوCHACHA20يستخدم. - لاگها را مانیتور کنید و از systemd همراه با logrotate برای چرخش لاگ بهره ببرید.
برای محیطهایی که نیاز به کمترین تاخیر دارند (تریدرها/گیمرها)، از لوکیشنهای نزدیک و یا split-tunnel برای مسیر دادن تنها به سرویسهای مورد نیاز استفاده کنید تا پینگ و پایداری حفظ شود.
رفع خطاهای متداول
- اتصال برقرار نمیشود: پورت و پروتکل را در فایروال (ufw/iptables/security group) بررسی کنید.
- DNS کار نمیکند: از
update-resolv-confیا تنظیم دستی/etc/resolv.confيستخدم. - routeها اضافه نمیشوند: مطمئن شوید
script-security 2فعال است و اسکریپتها اجرایی (executable) هستند. - پس از اتصال اینترنت قطع شد: احتمالاً سرور default route را push کرده؛ از روشهای بایپس یا route-nopull استفاده کنید.
مقایسه کاربردها و نکات برای انواع کاربران
- التجار: نیاز به پینگ و ثبات؛ از لوکیشنهای نزدیک و در صورت امکان split-tunnel فقط برای اتصال به سرور trading استفاده کنید.
- اللاعبون: معمولا ترافیک بازی باید کمترین مسیر را داشته باشد؛ full-tunnel میتواند پینگ را افزایش دهد، لذا تنها سرور بازی را route کنید یا از سرور نزدیک استفاده کنید.
- مدیران سایت/DevOps: اجرای OpenVPN client روی سرورها با systemd و استفاده از policy-based routing برای سرویسهای خاص توصیه میشود.
- الذكاء الاصطناعي/الرسم: برای انتقال دادههای بزرگ، full-tunnel و سرورهای با bandwidth بالا مناسبتر هستند.
ملخص واستنتاج
برای اجرای OpenVPN کلاینت روی لینوکس، معمولاً فایل .ovpn بهعلاوه auth-user-pass و در صورت نیاز route-nopull برای split-tunnel کافی است. برای بایپس برخی IPها هنگام full-tunnel، gateway قبلی را ذخیره و routeهای مناسب را اضافه کنید. برای رفتارهای پیچیدهتر از policy-based routing استفاده کنید.








