نصب VPN روی Ubuntu

✅ مراحل نصب و اتصال V2Ray (Xray) روی سرور:

1. نصب Xray روی Ubuntu سرورت:

bash <(curl -Ls https://raw.githubusercontent.com/XTLS/Xray-install/main/install-release.sh)

بعد از نصب، فایل باینری xray میاد تو مسیر /usr/local/bin/xray

2. ساخت فایل کانفیگ کلاینت (/etc/xray/config.json)

با توجه به لینک vless://... که دادی، کانفیگت میشه چیزی شبیه این:

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": {
        "auth": "noauth"
      }
    }
  ],
  "outbounds": [
    {
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "193.151.132.31",
            "port": 48805,
            "users": [
              {
                "id": "1316d4e4-ca39-485d-9ac1-d26be97255f4",
                "encryption": "none",
                "flow": ""
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "none",
        "tcpSettings": {
          "header": {
            "type": "none"
          }
        }
      }
    }
  ]
}

3. اجرای Xray:

sudo systemctl restart xray
sudo systemctl status xray
sudo systemctl restart apache2

💡 استفاده از این پراکسی برای درخواست‌ها

curl --socks5 127.0.0.1:1080 https://www.bbc.com/persian

❌ دلیل اصلی خطا (refused to connect):

👉 سایت BBC اجازه نمی‌ده که درون یک iframe نمایش داده بشه!

این نه ربطی به VPN داره، نه فیلترینگ، نه سرور، نه Xray.

✋ BBC توی هدر HTTP خودش اینو می‌فرسته:

X-Frame-Options: SAMEORIGIN

✅ مرحله ۱: چک کن IP سرورت چیه (آیا عوض شده یا همونه؟)

curl ipinfo.io
curl ifconfig.me

اگر IP نشون داده شده همون آی‌پی ایرانیه (یعنی 87.107.164.201) که خب هیچ تغییری نکرده و xray داره بی‌کار می‌چرخه 😅

بررسی پیکربندی فایل xray

sudo nano /usr/local/etc/xray/config.json

بررسی زنده لاگ های xray

در فایل پیکربندی config.json باید بخش log را به شکل زیر تنظیم کنی:

"log": {
  "loglevel": "info",
  "access": "/var/log/xray/access.log",
  "error": "/var/log/xray/error.log"
}

این بخش باعث می‌شود که لاگ‌های مربوط به درخواست‌های عبوری از پروکسی به فایل‌های مشخص‌شده در مسیر /var/log/xray/access.log و خطاها به /var/log/xray/error.log ذخیره شوند.

ایجاد دایرکتوری برای ذخیره لاگ‌ها:

ممکن است دایرکتوری‌ای که برای لاگ‌ها انتخاب کرده‌ای هنوز وجود نداشته باشد. پس ابتدا باید آن را ایجاد کنی:

sudo mkdir -p /var/log/xray
sudo chown -R xray:xray /var/log/xray

// then restart service
sudo systemctl restart xray

حالا می‌توانی درخواست‌ها را در فایل لاگ مشاهده کنی. برای بررسی لاگ‌ها از دستور زیر استفاده کن:
اگر ترجیح می‌دهید که کاربر xray برای سرویس ایجاد کنید، می‌توانید دستور زیر را اجرا کنید:


sudo useradd -r -s /sbin/nologin xray
sudo chown -R xray:xray /var/log/xray

sudo tail -f /var/log/xray/access.log

این دستور به‌صورت زنده درخواست‌های عبوری را از پروکسی نمایش می‌دهد.

تست TLS دستی با openssl از طریق پروکسی

ببینیم TLS کامل چطوری گیر می‌کنه:

torsocks openssl s_client -connect telegram.org:443

یا اگر torsocks نداری:
(قبلش باید proxychains نصب باشه و فایل کانفیگش هم درست باشه که از 127.0.0.1:1080 استفاده کنه.)

proxychains openssl s_client -connect telegram.org:443

✅ چی می‌گه این خروجی؟

فرمان torsocks openssl s_client -connect telegram.org:443 یه تست TLS انجام می‌ده از طریق SOCKS5 پروکسی.

و الان می‌بینیم که:

  • TLS دست‌دهی کامل انجام شد
  • گواهی دامنه *.telegram.org درست و معتبره ✅
  • اتصال به پورت 443 سرور تلگرام برقرار شده ✅
  • یعنی اتصال از طریق پروکسی به تلگرام موفق بوده 🙌

⛳ چرا curl کار نکرد ولی openssl کار کرد؟

احتمالاً:

  • curl گیر کرده روی IPv6 (که گفتی هم بود تو خروجی: SOCKS5 connect to IPv6 ...)
  • یا curl تو TLS handshake گیر کرده چون بعضی سرورها مثل تلگرام ممکنه روی ALPN یا رفتار خاص TLS حساس باشن

عدد 443 چیه و چرا ازش استفاده می‌کنیم؟

پورت 443 پورت پیش‌فرض برای ارتباطات HTTPS هست. وقتی شما به یه سایت امن (یعنی با آدرس https://...) متصل می‌شی، مرورگر یا ابزارهایی مثل curl یا openssl به‌طور پیش‌فرض سعی می‌کنن با سرور اون سایت از طریق پورت 443 ارتباط برقرار کنن.

پورت‌ها چطور کار می‌کنن؟

  • HTTP (بدون رمزنگاری): روی پورت 80
  • HTTPS (با رمزنگاری SSL/TLS): روی پورت 443

اگه نزنیم چی میشه؟

بیشتر ابزارها (مثل curl, openssl, wget) خودشون تشخیص می‌دن:

  • اگر بنویسی https://telegram.org → خودش پورت 443 رو می‌فهمه.
  • اگر بنویسی http://telegram.org → خودش پورت 80 رو انتخاب می‌کنه.

ولی وقتی با دستوراتی مثل openssl s_client کار می‌کنی، باید مستقیم بگی که به کدوم پورت وصل بشه، چون اون مثل مرورگر هوشمند نیست که خودش بفهمه.