iranxray/hope

روتبنگ روی سرور تانل برای سایت های ایرانی

xxamr opened this issue · 5 comments

xxamr commented

سلام. ایا امکان ارایه اموزش برای این که بتونیم اگر از تانل استفاده میکنیم، ترافیکی که روی سرور ایران میاد را در صورتی که مقصد سایت ایرانی باشه، نفرستیم به سمت سرور خارج داشته باشبن؟
روتینگ روی سرور تانل به شکلی که ترافیک را تفکیک کنه.
مثلا روی سرور ایران x-ui بر زنیم و با دکمودور، فورواردینگ انجام بدیم. ولی ترافیک ایران را به سمت سرور اصلی نفرسته

سلام سوال منم هس اگه کسی میدونه راهنمایی کنه

@xxamr @iamomid1997

درود دوستان
برای این کار چندین راه حل متفاوت هست ه می‌توانید استفاده کنید
با استفاده کردن از دیتابیس GoIP & GeoSite برای ایران و قوانین iptables یا استفاده کردن از nginx یا تغییرات در JSON فایل پنل X-Ui

IRAN GeoIP & GeoSite
IRAN GeoIP & GeoSite

به عنوان مثال این تغییرات در تنظیمات پنل ایجاد میشه اگر به قوانین دیگه‌ای هم نیاز دارید گید تا اونجایی که میشه راهنمایی می‌کنم.

"routing": {
  "domainStrategy": "AsIs",
  "rules": [
    {
      "domain": [
        "regexp:.*\\.ir$",                  //ترافیک ایران مستقیم
        "regexp:^.+\\.ir$",               //ترافیک ایران مستقیم
        "geosite:category-ir",         //ترافیک ایران مستقیم
      ],
      "outboundTag": "direct",
      "type": "field"
    },
    {
      "ip": [
        "geoip:ir",          //ترافیک ایران مستقیم
        "geoip:private"
      ],
      "outboundTag": "direct",
      "type": "field"
    },
    {
      "outboundTag": "blocked",
      "protocol": [
        "bittorrent"
      ],
      "type": "field"
    }
  ]
}

قوانین nginx

http {
    ...
    geoip_country /path/to/IRgeoip.dat; 
    geosite /path/to/IRgeosite.dat;

    server {
        listen 80;
        server_name example.com;

        # Direct traffic from Iran to local connection
        if ($geoip_country_code == IR) {
            proxy_pass http://127.0.0.1:9200;
            proxy_bind $server_addr;
        } else {
            # Proxy traffic from other countries
            proxy_pass http://your_proxy_server;
        }
    }
}

@Phoenix-999
درود
میشه یکی از روش هارو مرحله به مرحله توضیح بدید؟
من تا حالا با nginix کار نکردم

@iamomid1997

مرحله 1: یک دایرکتوری برای ذخیره فایل های داده GeoIP و GeoSite ایجاد کنید

یک دایرکتوری برای ذخیره فایل های geoip.dat و geosite.dat ایجاد کنید:

sudo mkdir -p /etc/nginx/geoip-data

مرحله 2: فایل های داده GeoIP و GeoSite را دانلود کنید

فایل های geoip.dat و geosite.dat را از لینک های ارائه شده دانلود کنید:

sudo wget https://raw.githubusercontent.com/Chocolate4U/Iran-v2ray-rules/release/geoip.dat -O /etc/nginx/geoip-data/geoip.dat
sudo wget https://raw.githubusercontent.com/Chocolate4U/Iran-v2ray-rules/release/geosite.dat -O /etc/nginx/geoip-data/geosite.dat

مرحله 3: بسته های مورد نیاز را نصب کنید

بسته های مورد نیاز را نصب کنید:

sudo apt update
sudo apt install nginx
sudo apt install libmaxminddb-dev

مرحله 4: Nginx را برای استفاده از داده های GeoIP و GeoSite پیکربندی کنید

یک فایل /etc/nginx/conf.d/geoip.conf با محتوای زیر ایجاد کنید:

sudo nano /etc/nginx/conf.d/geoip.conf

محتوای زیر را در فایل قرار دهید

http {
    geoip_country /etc/nginx/geoip-data/geoip.dat;
    geoip_proxy 0;

    geosite /etc/nginx/geoip-data/geosite.dat;

    # Set a variable to detect if the client is from a forced-direct country/site
    set $force_direct 0;
    if ($geoip_country_code == IR) {
        set $force_direct 1;
    }
    if ($geoip_private) {
        set $force_direct 1;
    }
    if ($geoip_arvancloud) {
        set $force_direct 1;
    }
    if ($geoip_derakcloud) {
        set $force_direct 1;
    }
    if ($geoip_iranserver) {
        set $force_direct 1;
    }
    if ($geoip_parspack) {
        set $force_direct 1;
    }
    if ($geosite_ir) {
        set $force_direct 1;
    }

    # Create a map to force direct connections
    map $force_direct $direct_connection {
        1 1;
        default 0;
    }

    # Set the proxy settings
    upstream proxy {
        server localhost:8080; # your proxy server
    }

    # Create a server block to handle requests
    server {
        listen 80;
        server_name example.com; # your server name

        # Force direct connections for clients from forced-direct countries/sites
        if ($direct_connection = 1) {
            resolver localhost;
            set $proxy_pass "";
        }

        # Proxy requests for all other clients
        location / {
            proxy_pass http://proxy;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

ذخیره و خروج از ویرایشگر متن
و Ctrl+X را برای خروج فشار دهید، سپس Y را فشار دهید تا تغییرات ذخیره شود و در نهایت Enter را فشار دهید تا نام فایل را تأیید کنید.

مرحله 5: Nginx را مجددا راه اندازی کنید

راه اندازی مجدد Nginx:

sudo service nginx restart

توجه: حتماً دستورالعمل server_name را در فایل پیکربندی Nginx به‌روزرسانی کنید تا با نام دامنه یا آدرس IP سرور شما مطابقت داشته باشد.

@Phoenix-999
دمت گرم
الان با انجام اینکار روی سرور ایران بعدش سایت های داخلی از طریق سرور ایران لود میشه و ریکوئست ها به سمت سرور خارج نمیره درسته؟