استقرار VPN روی سرورهای بدون رابط گرافیکی
FreeGuard CLI به صورت بومی روی سرورهای Linux بدون رابط گرافیکی و بدون نیاز به محیط دسکتاپ اجرا میشود. چه در حال ایمنسازی یک نمونه ابری باشید، چه از یک آزمایشگاه خانگی محافظت کنید، یا ترافیک کانتینر را از طریق VPN مسیریابی کنید، این راهنما نصب، احراز هویت، پیکربندی سرویس و نظارت را برای استقرارهای سرور تولیدی پوشش میدهد.
چرا VPN را روی سرور اجرا کنیم؟
سرورها ترافیک حساسی را مدیریت میکنند: اتصالات پایگاه داده، فراخوانیهای API، انتقال پشتیبانها و ارتباط بین سرویسها. اجرای VPN روی خود سرور تضمین میکند که تمام ترافیک خروجی بدون پیکربندی برنامههای جداگانه رمزگذاری شود.
موارد استفاده رایج:
- نمونههای ابری که به APIهای محدود جغرافیایی دسترسی دارند
- اجراکنندههای CI/CD که به هویت شبکه ثابت نیاز دارند
- سرویسهای خود میزبان که از پوشاندن IP بهرهمند میشوند
- سرورهای توسعه که توسط تیمهای توزیعشده استفاده میشوند
نصب
Ubuntu / Debian
curl -fsSL https://cli.freeguard.com/install.sh | bash
یا از مخزن APT نصب کنید:
curl -fsSL https://cli.freeguard.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/freeguard.gpg
echo "deb [signed-by=/usr/share/keyrings/freeguard.gpg] https://apt.freeguard.com stable main" | sudo tee /etc/apt/sources.list.d/freeguard.list
sudo apt update
sudo apt install freeguard-cli
CentOS / RHEL / Fedora
curl -fsSL https://cli.freeguard.com/install.sh | bash
یا از مخزن RPM استفاده کنید:
sudo rpm --import https://cli.freeguard.com/gpg.key
sudo tee /etc/yum.repos.d/freeguard.repo <<EOF
[freeguard]
name=FreeGuard CLI
baseurl=https://rpm.freeguard.com/stable
gpgcheck=1
gpgkey=https://cli.freeguard.com/gpg.key
EOF
sudo yum install freeguard-cli
Alpine Linux
curl -fsSL https://cli.freeguard.com/install.sh | bash
کاربران Alpine ممکن است ابتدا نیاز به نصب libc6-compat داشته باشند:
apk add libc6-compat
curl -fsSL https://cli.freeguard.com/install.sh | bash
تأیید نصب
freeguard --version
احراز هویت بدون رابط گرافیکی
در سرورهای بدون مرورگر، نمیتوانید از جریان ورود پیشفرض OAuth استفاده کنید. FreeGuard CLI احراز هویت مبتنی بر ایمیل را برای محیطهای بدون رابط گرافیکی فراهم میکند.
ورود با ایمیل
freeguard login --method email
CLI از شما میخواهد ایمیل حساب خود را وارد کنید. یک کد تأیید به آن آدرس ارسال میشود. کد را در ترمینال وارد کنید تا احراز هویت تکمیل شود.
$ freeguard login --method email
Enter your email: [email protected]
Verification code sent. Check your inbox.
Enter code: 483291
Login successful.
ورود مبتنی بر توکن
برای استقرارهای خودکار، از توکن سرویس استفاده کنید:
freeguard login --method token --token YOUR_SERVICE_TOKEN
توکنهای سرویس را از داشبورد حساب خود ایجاد کنید. توکنها میتوانند به سرورهای خاصی محدود شوند و تاریخ انقضای قابل تنظیم داشته باشند.
تأیید احراز هویت
freeguard status --json | jq '.authenticated'
اجرا به عنوان سرویس systemd
برای استقرارهای تولیدی، FreeGuard CLI را به عنوان سرویس systemd اجرا کنید تا هنگام بوت شروع شود و در صورت خرابی مجدداً راهاندازی شود.
ایجاد فایل سرویس
sudo tee /etc/systemd/system/freeguard.service <<EOF
[Unit]
Description=FreeGuard VPN
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/freeguard connect --server us-east --no-color
ExecStop=/usr/local/bin/freeguard disconnect
Restart=on-failure
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
EOF
فعالسازی و شروع
sudo systemctl daemon-reload
sudo systemctl enable freeguard
sudo systemctl start freeguard
بررسی وضعیت سرویس
sudo systemctl status freeguard
مشاهده لاگها
sudo journalctl -u freeguard -f
اسکریپتنویسی با --json و --no-color
اسکریپتهای تولیدی باید خروجی ساختاریافته را تجزیه کنند نه متن قابل خواندن توسط انسان.
خروجی JSON
هر دستور --json را پشتیبانی میکند:
# Connection status
freeguard status --json
خروجی:
{
"connected": true,
"server": "us-east-1",
"server_name": "New York",
"protocol": "hysteria2",
"uptime": 86400,
"bytes_sent": 1048576,
"bytes_received": 5242880
}
حالت بدون رنگ
کدهای رنگ ANSI را برای فایلهای لاگ تمیز حذف کنید:
freeguard status --no-color >> /var/log/freeguard-status.log
مثال اسکریپتنویسی
یک اسکریپت بررسی سلامت که در صورت خرابی مجدداً متصل میشود:
#!/bin/bash
STATUS=$(freeguard status --json 2>/dev/null)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')
if [ "$CONNECTED" != "true" ]; then
echo "$(date): VPN disconnected, reconnecting..." >> /var/log/freeguard-health.log
freeguard connect --server us-east --json >> /var/log/freeguard-health.log 2>&1
fi
آن را به cron برای بررسیهای منظم اضافه کنید:
# Check VPN health every 5 minutes
*/5 * * * * /opt/scripts/freeguard-health.sh
نظارت و بررسیهای سلامت
بررسی سلامت پایه
freeguard status --json | jq -r '.connected'
true یا false برمیگرداند. به اندازه کافی ساده برای هر سیستم نظارتی.
ادغام با ابزارهای نظارت
وضعیت را به Prometheus، Datadog یا هر سیستم نظارتی که بتواند دستورات shell اجرا کند صادر کنید:
#!/bin/bash
# prometheus-exporter.sh
STATUS=$(freeguard status --json)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')
UPTIME=$(echo "$STATUS" | jq -r '.uptime')
if [ "$CONNECTED" = "true" ]; then
echo "freeguard_connected 1"
echo "freeguard_uptime_seconds $UPTIME"
else
echo "freeguard_connected 0"
echo "freeguard_uptime_seconds 0"
fi
هشدارها
بررسی سلامت را با سیستم هشدار خود ترکیب کنید. مثال با یک webhook ساده:
#!/bin/bash
CONNECTED=$(freeguard status --json | jq -r '.connected')
if [ "$CONNECTED" != "true" ]; then
curl -X POST https://hooks.example.com/alert \
-H "Content-Type: application/json" \
-d '{"text": "FreeGuard VPN disconnected on '"$(hostname)"'"}'
fi
ملاحظات امنیتی
- اجرا به عنوان root: تونل VPN به امتیازات root برای تغییر مسیرهای شبکه نیاز دارد. سرویس systemd به طور پیشفرض به عنوان root اجرا میشود.
- ذخیرهسازی توکن: توکنهای سرویس در
~/.config/freeguard/ذخیره میشوند. از مجوزهای فایل مناسب اطمینان حاصل کنید (chmod 600). - قوانین فایروال: اگر از UFW یا iptables استفاده میکنید، مطمئن شوید که رابط تونل VPN مجاز است.
- Kill switch: kill switch را برای مسدود کردن تمام ترافیک در صورت قطع VPN فعال کنید:
freeguard config set kill-switch true.
مراحل بعدی
- FreeGuard CLI — مرجع کامل دستورات
- راهنمای جریان کار توسعهدهنده — VPN را در ابزارهای توسعه خود ادغام کنید
- قیمتگذاری — استقرار سرور با هر طرحی کار میکند
آخرین بهروزرسانی: مارس ۲۰۲۶