به عنوان یه برنامه‌نویس توی ایران، توی هر استکی هم که کار کنید تحریم‌هایی که شرکت‌های خارجی گذاشتن عذاب‌آوره، یادمه اوایلی که شروع کرده بودم به برنامه‌نویسی گاهی وقتا چندین روز درگیر بیلد Gradle بودم آخرشم به خطا می‌خورد. توی این آموزش کوتاه قراره یه سرویس مثل شکن بالا بیاریم تا مارو از دست این تحریما خلاص کنه.

این سرویس جئولوکیشن شما رو مخفی می‌کنه و باعث میشه تحریم سایت‌های خارجی رو دور بزنید. راه‌اندازی ساده‌ ای داره و سرعت خوبی هم به شما میده.

چرا از شکن و ۴۰۳ و بقیه سرویس‌ها استفاده نمی‌کنم؟ من نه از شکن سرویس قابل قبولی دریافت کردم و نه از ۴۰۳، سرویس قابل قبول چی هست؟ سرویسی که دهنت رو سرویس نکنه، به عبارت دیگه تو داری به اندازه x تلاش میکنی ولی به اندازه یک دهم x بهره‌وری میگیری. از این پترن هرجا که هست دوری کنید!

Something you put more effort on it than you save

چی نیاز داریم؟

یه سرور مجازی خارج از ایران که حداقل ۵۱۲ مگابایت رم داشته باشه و ۲ یا ۳ گیگ حافظه

آموزش راه‌اندازی

آموزش به ۳ مرحله ساده تقسیم شده

  1. نصب داکر
  2. دپلوی سرویس
  3. تست DNS

1. نصب داکر

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

https://docs.docker.com/engine/install/

2. دپلوی سرویس

ابتدا روی سرور این دستور رو وارد کنید تا ریپوزیتوری کلون بشه:

git clone https://github.com/JulyWitch/dns-forwarder.git

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

curl https://ifconfig.co

حالا باید فایل dnsmasq/proxy.conf.template رو تغییر بدید و آدرس سرور خودتون رو داخلش بزارید، در نهایت هم اسمش رو به proxy.conf تغییر بدید. با دستور زیر میتونید این کار رو انجام بدید یا اینکه دستی با تکست ادیتور وارد فایل dnsmasq/proxy.conf.template بشید ایپی رو جایگزین کنید و بعد اسم فایل رو به proxy.conf تغییر بدید.

VPS_IP=آیپی-سرور-شما envsubst < dnsmasq/proxy.conf.template > dnsmasq/proxy.conf

کانفیگ انجام شد، با دستور زیر پروژه رو دپلوی کنید:

docker compose up -d

3. تست DNS

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

/etc/resolv.conf

آیپی سرور رو توی خط زیر جایگزین کنید و به بالای فایل اضافه کنید

nameserver ${VPS_IP}

حالا برای اینکه ببینیم اتصال به درستی برقرار شده از دستور زیر استفاده کنید

dig docker.io

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

نگهداری، مدیریت و عیب‌یابی

چطور میتونیم دامنه جدید اضافه کنیم؟ برای اینکه یه دامنه جدید به سرویس اضافه کنید باید طبق فرمتی که توی فایل dnsmasq/proxy.conf تعریف شده، دامنه جدید رو اضافه کنید.

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

  • توی سرور مجازی وارد پوشه داکر بشید و دستور docker compose logs رو وارد کنید تا اگه سرویس به خطا خورده متوجه بشید.
  • فایل etc/resolv.conf/ سیستم خودتون: ممکنه از یه سرویسی مثل unbound استفاده میکردید که این فایل رو override میکنه
  • فایل dnsmasq/proxy.conf روی سرور مجازی: چک کنید که فرمت فایل درست هست یا نه؟ باید شبیه به این باشه:
address=/.docker.com/1.2.3.4