- آیا میخواهید 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-resolved دارید.
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-confدر سیستمهایی که از systemd-resolved استفاده میکنند، ممکن است نیاز به پیکربندی اضافی داشته باشید.
مثال کامل 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-auth/tls-cryptبرای جلوگیری از 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 برای سرویسهای خاص توصیه میشود.
- AI / رندرینگ: برای انتقال دادههای بزرگ، full-tunnel و سرورهای با bandwidth بالا مناسبتر هستند.
خلاصه و جمعبندی
برای اجرای OpenVPN کلاینت روی لینوکس، معمولاً فایل .ovpn بهعلاوه auth-user-pass و در صورت نیاز route-nopull برای split-tunnel کافی است. برای بایپس برخی IPها هنگام full-tunnel، gateway قبلی را ذخیره و routeهای مناسب را اضافه کنید. برای رفتارهای پیچیدهتر از policy-based routing استفاده کنید.








