SagerNet / sing-box

The universal proxy platform
https://sing-box.sagernet.org/
Other
15.5k stars 1.9k forks source link

[Question] Using geoip inside rule_set of DNS #1796

Closed aleskxyz closed 4 weeks ago

aleskxyz commented 1 month ago

Based on the example in https://sing-box.sagernet.org/configuration/dns/rule/ we can use geoip inside "rule_set" of "rules" of "dns":

{
  "dns": {
    "rules": [
      {
        "rule_set": [
          "geoip-cn",  // How can we use IP in a DNS rule before resolving the domain?!
          "geosite-cn"
        ],
        "server": "local"
      }
    ]
  }
}

Does it actually works? If yes, how?

Glide01 commented 1 month ago

This is to match the DNS query results. If it is not true, then it is ignored.

AkramiPro commented 1 month ago

اینا نمیدونم چرا مثل آدم نمیتونن داکیومنت کنن این برداشت من هست از این ویژگی جدید که اضافه کردن تو مثلا 2 تا rule تعریف کردی . رول اول گفتی از 8.8.8.8 استفاده کن توی رول دوم هم میگی از 1.1.1.1 استفاده کن حالا برای رول اول شرط geoip میزاری . یعنی مثلا اگر جوابی که گرفتی توی رنج آیپی چین بود که حله اگر نبود برو از رول بعدی استفاده کن که میشه 1.1.1.1 حالا شاید بگی چقدر مسخره باید درخواست ها رو مثلا 2 بار ارسال کنه برا همین اومدن یه cache هم اضافه کردن که جواب ها رو کش میکنه که دیگه وقتی میخواد رول اول رو چک کنه لازم نباشه حتما ریکوست بده ، جواب رو از قبل توی کش میخونه برای اینکه جواب ها رو کش کنه باید store_rdrc رو true کنی توی experimental

حالا این وسط یه چیز دیگه هم اضافه کردن که خیلی خوب هست به نظر خودم تو فرض کن آیپی ها و سایت های ایران رو direct کردی (یعنی هم درخواست dns و هم خود درخواست اصلی ) این از یه نظر خوبه چون دیگه لازم نیست vpn خاموش کنی از یه نظر بد هست چون dns leak میاره اینجا یه راه حل این هست که بگی برای سایت های ایرانی هم از dns remote استفاده کنه که مشکل dns leak حل بشه ولی یه مشکلی پیش میاد تو فرض کن یه سایت ایرانی از cdn استفاده میکنه مشکل اینه وقتی که درخواست dns میاد سمت cdn اونم نزدیک ترین سرور رو نسبت به آیپی کاربر بهش برگشت میده حالا این وسط وقتی درخواست های dns از المان داره میاد خب این هم یه سرور میده که نزدیک المان هست نتیجه این میشه که تو درخواست سایت ایرانی میدی از تهران ولی وصل یه سرور نزدیک به آلمان میشی حالا چطوری این رو حل کردن ؟ گفتن موقع ارسال درخواست dns بهش بگیم که رنج ایپی ما چی هست که اون cdn بدونه مثلا ما میخوایم از تهران وصل بشیم ولی نمیدونه ایپی ما دقیقا چی هست فقط رنج ایپی رو میدونه برا همین شما میتونی توی بخش server تنظیم جدید client_subnet رو ست کنی و مثلا یه رنج ایپی ایران یا شهر خودت رو بهش بدی

حاجی من خیلی توضیح دادم چون گفتم شاید یکی بیاد اینا رو بخونه که شاید ندونه. وگرنه میدونم شما خودت اینا رو میدونی بیشترش

من یه سالی هست کلا رو sing-box خوابیدم . خیلی جاهاش مجبور شدم سورسش بخونم تا بفهمم چ کردن . خیلی بد توضیح میدن ولی خدایی از همشون بهتر و بهینه تر هست .