msasanmh / SecureDNSClient

A DNS Client Supporting DNSCrypt, Anonymized DNSCrypt, DoH, DoT, UDP And TCP.
https://msasanmh.github.io/SecureDNSClient/
GNU General Public License v3.0
815 stars 80 forks source link

آزاد کردن پورت 443 #65

Closed abbaszahiri closed 1 year ago

abbaszahiri commented 1 year ago

عرض ادب ضمن قدردانی از برنامه مفیدتان، من این برنامه را روی بریج نصب کردم. بعد از اینکه برنامه روشن است ، من دیگر نمیتوانم روی پورت 443 به حالت listen باشم! احتمالا این پورت مهم توسط برنامه اشغال شده است. بررسی بفرمایید ببینید میشود بعد از استفاده برنامه از این پورت ، آن را آزاد کند؟

در واقع من برای DNS وی تو ری از این برنامه استفاده میکنم و نیاز دارم که پورت خاص 443 هم برای outbound و هم برای inbound آزاد باشند. کلا به همین پورت فقط نیاز دارم و غیر از این پورت هم به دلایل امنیتی نمیتوانم استفاده کنم.

پیشاپیش از زحمات شما سپاسگزارم

msasanmh commented 1 year ago

پورت 443 فقط در صورتی اشغال میشه که شما سرور DoH لوکال رو روشن کرده باشید که پورت دیفالتش 443 هستش، اگه این پورت رو تغییر بدم اونوقت خیلی از برنامه‌ها مثل کروم دیگه ساپورتش نمیکنن.

میتونید از تنظیمات Working mode رو روی گزینه اول بذارید که برنامه فقط بهتون plain dns بده و بجای اینکه doh رو بروی v2ray ست کنید، plain dns رو بروی ویندوز ست کنید.

اینجوری v2ray از plain dns ست شده بروی ویندوز استفاده میکنه و خود این plain dns هم درنهایت به یه doh وصله. درنتیجه سرورهای لوکال DoH و plain dns درواقع به یک سرور DoH وصل هستن، پس فرقی نداره از کدوم استفاده شه.

abbaszahiri commented 1 year ago

اصلا میخوامش واسه DOH :( این ISP منطقه، DNS های Plain را مانیتور میکنه و اذیت میکنه نماد گریه

abbaszahiri commented 1 year ago

واقعا شرمنده اینکه این همه مزاحم میشم نشون میده دارم استفاده میکنم از کارتون و راضی هستم ازش. بهتر از این واقعا ندیدم.

من چون ترافیک وی پی ان را از بیرون میگیرم مجبورم روی 443 منتظر بمونم. چون بقیه پورت ها رو مانیتور میکنن و اذیت میکنن. شما هم همانطور که گفتید همینجور.

ولی اگر یک گزینه تغییر پورت به Setting برنامه اضافه کنید، من میتونم داخل config.json برنامه در قیمت routing بیام خودم 443 را بخونم و تغییر مسیر بدم به شما که مثلا روی پورت 2500 منتظرش هستید. یعنی بعد از اینکه شما همه کارهای اولیه تون تموم شد و یوتیوب باز شد و من خواستم v2ray را باز کنم، یه گزینه باشه که پورتی که گوش میدید را بشه عوض کنم. بعد دیگه ورودی DOH شما با واسطه v2ray من تامین بشه.

abbaszahiri commented 1 year ago

شاید کار بهتری هم بشه کرد. مسلما شما بهتر میدونید.

abbaszahiri commented 1 year ago

میشه هم کلا اون خروجی search نیم سرور را به من بدید من خودم بذارم داخل فایل config.json قسمت dns

abbaszahiri commented 1 year ago

"dns": { "servers": [ "https://dns.google/dns-query" ] }, "fakedns": [ { "ipPool": "198.18.0.0/15", "poolSize": 10000 } ],

abbaszahiri commented 1 year ago

قسمت dns و fakedns را نمیدونم چی بذارم که درست کار کنه. این رو سرچ کنه بده به من کافیه دیگه. من فقط دیگه نیاز دارم به goodbye DPI

msasanmh commented 1 year ago

اصلا میخوامش واسه DOH :( این ISP منطقه، DNS های Plain را مانیتور میکنه و اذیت میکنه نماد گریه

من که گفتم plain dns لوکال این برنامه به DoH وصل میشه، یعنی مونیتور نمیشه. امنیت plain dns لوکال این برنامه مثل doh می‌مونه.

msasanmh commented 1 year ago

واقعا شرمنده اینکه این همه مزاحم میشم نشون میده دارم استفاده میکنم از کارتون و راضی هستم ازش. بهتر از این واقعا ندیدم.

من چون ترافیک وی پی ان را از بیرون میگیرم مجبورم روی 443 منتظر بمونم. چون بقیه پورت ها رو مانیتور میکنن و اذیت میکنن. شما هم همانطور که گفتید همینجور.

ولی اگر یک گزینه تغییر پورت به Setting برنامه اضافه کنید، من میتونم داخل config.json برنامه در قیمت routing بیام خودم 443 را بخونم و تغییر مسیر بدم به شما که مثلا روی پورت 2500 منتظرش هستید. یعنی بعد از اینکه شما همه کارهای اولیه تون تموم شد و یوتیوب باز شد و من خواستم v2ray را باز کنم، یه گزینه باشه که پورتی که گوش میدید را بشه عوض کنم. بعد دیگه ورودی DOH شما با واسطه v2ray من تامین بشه.

فقط تا اون قسمتی که گفتی تغییر پورت doh رو بذارم توی تنظیمات رو متوجه شدم. گذاشتم اون پورت برام کاری نداره، فقط نگران گیج شدن کاربرا هستم. یه کاریش میکنم.

abbaszahiri commented 1 year ago

میشه تو سی شارپ تو همون دستوری که پورت 443 را باز میکنه یه پارامتری بدید که اون پورت در انحصار برنامه درنیاد و بقیه برنامه ها هم بتونن بازش کنن و بخوننش؟

abbaszahiri commented 1 year ago

shared mode

abbaszahiri commented 1 year ago

مطمین نیستم ولی فکر کنم بدون دستکاری برنامه شما با این لینک کار درست بشه. حالا تست میکنم: https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-enable-the-net-tcp-port-sharing-service

msasanmh commented 1 year ago

میشه تو سی شارپ تو همون دستوری که پورت 443 را باز میکنه یه پارامتری بدید که اون پورت در انحصار برنامه درنیاد و بقیه برنامه ها هم بتونن بازش کنن و بخوننش؟

نه اصلا همچین چیزی کلا ممکن نیست، نه فقط در مورد این برنامه.

abbaszahiri commented 1 year ago

NetTcpBinding portsharingBinding = new NetTcpBinding(); portsharingBinding.PortSharingEnabled = true;

abbaszahiri commented 1 year ago

https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-a-wcf-service-to-use-port-sharing

abbaszahiri commented 1 year ago

یه نگاهی بندازید به اینها ببینید چی میگه

abbaszahiri commented 1 year ago

حیف من سی شارپ بلد نیستم ولی برنامه نویسی سیستم بلدم. اگه برنامه شما بخواد هر کاری با ترافیک بکنه، کند میکنه کارو. بنابراین این کار با یه اشاره گر اضافه توی درایور باید انجام بشه و تا اونجا که میدونم توی سوکت ها هم مثل فایلها با پارامتر shared mode پورت باز میشه. سی شارپ هم به عنوان یه برنامه سطح بالا حتما دستورش را داره. من نمیدونم از چه کتابخونه ای استفاده میکنید. اگر لازم میدونید برم تو کد بخونم. ولی خودتون حتما بهتر میتونید پیداش کنید. کلا یه دونه دستور کافیه که اضافه بشه و تمام! خود درایور همه کارها رو میکنه. اینجوری کد شما هم دست نمیخوره . فقط در حد یه دستور

msasanmh commented 1 year ago

حیف من سی شارپ بلد نیستم ولی برنامه نویسی سیستم بلدم. اگه برنامه شما بخواد هر کاری با ترافیک بکنه، کند میکنه کارو. بنابراین این کار با یه اشاره گر اضافه توی درایور باید انجام بشه و تا اونجا که میدونم توی سوکت ها هم مثل فایلها با پارامتر shared mode پورت باز میشه. سی شارپ هم به عنوان یه برنامه سطح بالا حتما دستورش را داره. من نمیدونم از چه کتابخونه ای استفاده میکنید. اگر لازم میدونید برم تو کد بخونم. ولی خودتون حتما بهتر میتونید پیداش کنید. کلا یه دونه دستور کافیه که اضافه بشه و تمام! خود درایور همه کارها رو میکنه. اینجوری کد شما هم دست نمیخوره . فقط در حد یه دستور

من از هیچ کتابخونه‌ای استفاده نمیکنم، صفر تا صد پراکسی رو خودم نوشتم. و هیچ‌وقت نمیشه یک پورت رو به اشتراک گذاشت، در هیچ زبان برنامه نویسی‌ای نمیشه. وقتی پورت یکسان باشه ویندوز از کجا باید بدونه که اطلاعات رو به کدوم برنامه بفرسته؟ اینم طبق تحقیق: No, two applications can never listen on the same port at the same time, and it's not even related to .Net.

abbaszahiri commented 1 year ago

داداش من که طرف مقابل شما نیستم. من رو در کنار خودت ببین. شما این لینک را که دادم نگاه بندازید. متوجه منظور من میشید.

الان این شکلی عمل کرده که یک سرویس ابتدا اجرا میشه و پورت را میگیره و بقیه برنامه ها با این سرویسه کار میکنند. کافیه شما اون flag را true بدهید. همه چیز ممکنه. شما لینک را نگاه بندازید. مستقیما از خود مایکروسافت هست.

Windows Communication Foundation (WCF) provides a new TCP-based network protocol (net.tcp://) for high-performance communication. WCF also introduces a new system component, the Net.TCP Port Sharing Service that enables net.tcp ports to be shared across multiple user processes.

abbaszahiri commented 1 year ago

خودتونم برنامه نویس هستید میتونید شهودی فکر کنید. یک سرویس میتواند از همان پورت بخواند و در یک بافر چرخشی بریزید که با دو تا اشاره گر و توسط دو برنامه جداگانه که آن حافظه را اشتراکی استفاده میکنند، خوانده شود. حالا واسه اینکه همه اینها را پیدا نکنید میخوام بگم جزو سرویس های خود ویندوز آماده هست . WCF که با پرفورمنس بالا میتونید باهاش کنید چون Native سیستم عامل هست. اگر برنامه را بهم میریزد که هیچی ولی محض اطلاع عمومی هم که شده یه نگاهی به اون لینک بندازید متوجه میشید. run service.msc Net .tcp port sharing service

abbaszahiri commented 1 year ago

اونم که شما میگید غلط نیست. قدیم همونطور بود. و ما مجبور بودیم که خودمون ترافیک را بگیریم و تو یه حافظه مشترک بریزیم و به بقیه بدهیم. ولی الان به شکل سطح پایین نزدیک به درایور پیاده شده و آماده هست.

abbaszahiri commented 1 year ago

اگر برنامه بهم میریزه که نه . اذیت نمیخوام بشید که. اگه فقط به من لطف کنی یه جوری برسونی که چجوری اون گزارش را تبدیل کنم به آدرس واقعی کافیه: مثلا: [Latency: 493 ms] [Protocol: DNS-Over-HTTPS] [Company: Hetzner Online GmbH]

آدرس هتزنری که الان پیدا کرده چیه؟

msasanmh commented 1 year ago

اونم که شما میگید غلط نیست. قدیم همونطور بود. و ما مجبور بودیم که خودمون ترافیک را بگیریم و تو یه حافظه مشترک بریزیم و به بقیه بدهیم. ولی الان به شکل سطح پایین نزدیک به درایور پیاده شده و آماده هست.

منم دهه شصتی هستم، قدیمی‌ام. اون مبحث رو سر فرصت مطالعه میکنم.

msasanmh commented 1 year ago

اگر برنامه بهم میریزه که نه . اذیت نمیخوام بشید که. اگه فقط به من لطف کنی یه جوری برسونی که چجوری اون گزارش را تبدیل کنم به آدرس واقعی کافیه: مثلا: [Latency: 493 ms] [Protocol: DNS-Over-HTTPS] [Company: Hetzner Online GmbH]

آدرس هتزنری که الان پیدا کرده چیه؟

من مجبورم اون سرورها رو مخفی نگه دارم با اینکه خیلی‌ها بدون توجه به عواقب فیلتر شدنش هی اینور اونور به اشتراک میذارن. من امکان تغییر پورت رو اضافه می‌کنم و این مشکل شما حل میشه.

abbaszahiri commented 1 year ago

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

abbaszahiri commented 1 year ago

شایدم کافی باشه که هر چی میاد را روی یه پورت دیگه کپی کنی. هم آسونتره هم کدت بهم نمیریزه

abbaszahiri commented 1 year ago

ولی سربار داره میترسم درد سر بشه. ولش کن. بی خیال. دمت گرم. کافیه یکم سنگین بشه تا کاراییش بیفته. خودم میگردم یه خاکی بر سرم میریزم

msasanmh commented 1 year ago

ولی سربار داره میترسم درد سر بشه. ولش کن. بی خیال. دمت گرم. کافیه یکم سنگین بشه تا کاراییش بیفته. خودم میگردم یه خاکی بر سرم میریزم

مگه تغییر پورت مشکلت رو حل نمیکنه؟

abbaszahiri commented 1 year ago

چرا حل میکنه ولی میترسم برنامه شما را دچار مشکل کنه

msasanmh commented 1 year ago

چرا حل میکنه ولی میترسم برنامه شما را دچار مشکل کنه

انجامش دادم، ورژن بعد اعمال میشه. هیچ مشکلی هم ایجاد نمی‌کنه.

abbaszahiri commented 1 year ago

فدای شما

abbaszahiri commented 1 year ago

دم شما گرم برم تست کنم ببینم چی میشه