نحوه تنظیم OpenVPN روی لینوکس به عنوان کلاینت
این مقاله به شما آموزش می‌دهد که چگونه OpenVPN را روی لینوکس به عنوان کلاینت تنظیم کنید و با استفاده از Routines مناسب، کنترل دقیقی بر ترافیک شبکه خود داشته باشید.

نحوه تنظیم OpenVPN روی لینوکس به عنوان کلاینت

در این مقاله ساختاری و فنی، نحوه تنظیم OpenVPN روی لینوکس به عنوان کلاینت را آموزش خواهیم داد. با استفاده از راهنمایی‌های قدم به قدم و مدیریت روت‌ها، توانایی عبور ترافیک خود را به نحو احسن کنترل کنید. این مقاله شامل نکات امنیتی و رفع خطا برای استفاده بهینه از OpenVPN است.
0 اشتراک گذاری
0
0
0
0

 

آیا می‌خواهید 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-nocache

 

کنترل مسیر پیش‌فرض: رفتار پیش‌فرض سرور

رفتار پیش‌فرض مسیرها اغلب توسط سرور تعیین می‌شود:

  • اگر سرور 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 استفاده کنید.

شاید دوست داشته باشید