DNS

تحریم شکن اختصاصی

تحریم شکن اختصاصی با SNI Proxy

تحریم شکن چیست؟

همه‌ی ما چه برنامه‌نویس، چه شبکه کار با مشکل تحریم شدن از سایت های خارجی علیه ایران مواجه هستیم و زمانی‌که قصد استفاده از سرویسی مثل سرویس های گوگل و… را داریم، با “خطای ۴۰۳″ و یا با پیام “کشور شما تحریم شده و امکان استفاده از این سرویس نیست” روبرو میشویم. حال باسرویسی که راه اندازی می‌کنیم این مشکل را حل می‌کنیم یا بهتره بگیم این تحریم رو دور بزنیم. سرویسی که راه اندازی می‌کنیم با استفاده از تکنولوژی دی‌ان‌اس و بدون نیاز به نصب نرم‌افزار، تحریم سایت‌های خارجی علیه ایران را بی‌اثر می‌کند. شما با استفاده از این سرویس می‌توانید به سایت‌های تحریمی (که فیلتر نیستند) را باز کنید.

تفاوت تحریم شکن اختصاصی با سایر پلتفرم ها مثل پلتفرم ۴۰۳ و یا شکن

در تحریم شکن های عمومی مثل پلتفرم ۴۰۳ و یا شکن مشکلاتی وجود دارد که در زیر به برخی از آن‌ها اشاره می‌کنیم :

  • لیمیت بودن سرعت پلن های رایگان نسبت به پلن های پولی
  • امکان بوجود آمدن مشکلات امنیتی بخاطر پراکسی کردن کل ترافیک شبکه
  • امکان بن شدن حساب کاربری شما در سایت هایی که در آن فعالیت می‌کنید
  • پابرجابودن مشکل تحریم و روبرو شدن با خطای ۴۰۳

توضیح : با توجه به اینکه اکثر تحریم شکن ها قصد درآمدزایی از این سرویس را دارند،بنابر این روی پلن های رایگان محدودیت سرعت اعمال می‌کنند که این محدودیت قطعا برای توسعه دهندگان بسیار آزار دهنده هست. و همینطور برای استفاده ازاین سرویس ها باید در فایل resolv.conf و یا دی‌ان‌اس های سیستم خود تغییراتی انجام دهید که این تغییرات بخاطر اینکه کل ترافیک شبکه شما را از این شبکه ها (شبکه تحریم شکن) رد می‌کند ممکن است برای شما مشکلات امنیتی ایجاد کند و یا فکر کنید در سایتی عضو هستید که تحریم هست و مثل شما چند نفر دیگه هم در این سایت ها عضو هستند،وقتی هردو از یک تحریم شکن استفاده می‌کنید سایت یا سرویس دهنده براحتی این دور زدن تحریم را شناسایی کرده و حساب شما را بن می‌کند.وحتی در خیلی مواقع با اینکه از تحریم شکن استفاده می‌کنیم شاهد پابرجا بودن مشکل تحریم هستیم.

پیش نیازها

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

نصب پیش‌نیازها

دستورات زیر را به ترتیب برای نصب پیش‌نیازها اجرا کنید :
yum -y install epel-release;
yum -y install autoconf automake curl gettext gettext-devel libev libev-devel pcre pcre-devel perl pkgconfig rpm-build udns udns-devel devscripts zsh git;
yum -y groupinstall "Development Tools";

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

git clone http://github.com/dlundquist/sniproxy.git;
cd sniproxy && ./autogen.sh && ./configure && make dist;
rpmbuild --define "_sourcedir `pwd`" -ba redhat/sniproxy.spec;
yum -y install /root/rpmbuild/RPMS/x86_64/sniproxy-*.el7.x86_64.rpm;

با دستورات زیر کانفیگ های لازم را برای sniproxy ایجاد می‌کنیم :

touch /etc/sniproxy.conf;
cat << EOF > /etc/sniproxy.conf
    user daemon

pidfile /var/run/sniproxy.pid

resolver {
        nameserver 1.1.1.1
        nameserver 8.8.8.8
        mode ipv4_only
}

#listener 80 {
#       proto http
#}

listener 443 {
        proto tls
}

table {
        .* *
}
EOF

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

touch /usr/lib/systemd/system/sniproxy.service;
cat << EOF > /usr/lib/systemd/system/sniproxy.service
    [Unit]
Description=SNI Proxy Service
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/sniproxy -c /etc/sniproxy.conf

[Install]
WantedBy=multi-user.target
EOF

چون سرویس تحریم شکن روی بستر DNS هست سرویس dnsmasq را نیز نصب می‌کنیم:

yum -y install dnsmasq

فایل کانفیگ را به شکل زیر ایجاد می‌کنیم :

echo "" > /etc/dnsmasq.conf;
cat << EOF > /etc/dnsmasq.conf
    conf-dir=/etc/dnsmasq.d/,*.conf
cache-size=100000
no-resolv
server=1.1.1.1
server=8.8.8.8
interface=eth0
interface=lo
EOF

توجه: بخش interface=eth0 باید جایگزین شود،برای اینکه نام interface را پیدا کنید دستور ip a را اجرا کنید و نام interaface را تغییر دهید :

interface=NAME

برای اینکه proxy کردن درخواست ها لازم است NGINX نیز نصب و کانفیگ شود :

yum -y install nginx;
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak;
echo "" > /etc/nginx/nginx.conf;
cat << EOF > /etc/nginx/nginx.conf
    user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

        include /etc/nginx/conf.d/*.conf;

    server {
                listen       80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        include /etc/nginx/default.d/*.conf;

        location / {
            rewrite ^ $http_x_forwarded_proto://$host$request_uri permanent;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}
EOF

برای اجرای اتوماتیک سرویس ها در مواقع ریبوت زدن دستور زیر را اجرا می‌گیریم :

systemctl enable sniproxy && systemctl enable dnsmasq && systemctl enable nginx;
systemctl start sniproxy && systemctl start dnsmasq && systemctl start nginx;

نصب سرویس تمام شد.

تعریف دامنه تحریم شده برای تحریم شکن

برای اینکه دامنه مد نظر از فیلتر خارج شود لازم است در مسیر /etc/dnsmasq.d/ یک فایلی با اسم sni.conf ایجاد شود و طبق فرمت زیر دامنه اضافه شود :

address=/.domaion.com/ipserver

بجای domain.com آدرس دامنه تحریم شده و بجای ipserver آیپی سرور خود را وارد کنید.(برای دریافت ip سرور خود از دستور ip a استفاده کنید.)

پیدا کردن لیست دامنه های تحریم شده

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

wget https://behineserver.com/scripts/tahrimshecan/sni.conf;
mv sni.conf /etc/dnsmasq.d/sni.conf;

نکته : 

  • لازم است فایل با ویرایش گری مثل nano ویرایش شده و عبارت ipserver با آی‌پی سرور جایگزین شود.
  • اگر قصد دارید دامنه ای را بصورت دستی تعریف نکنید و همه دامنه ها توسط تحریم شکن پراکسی شود کافیست مراحل زیر را انجام دهید : 
echo "" > /etc/dnsmasq.d/sni.conf;
cat << EOF > /etc/dnsmasq.d/sni.conf
    address=/#/ipserver
EOF

بجای ipserver باید آی‌پی سرور جایگزین شود.

نصب اتوماتیک تحریم شکن اختصاصی با اسکریپت آماده شده

برای نصب اتومایتک کافیست اسکریپت آماده شده را نصب دانلود کنید :

wget https://behineserver.com/scripts/tahrimshecan/installer.sh

و سپس با دستور زیر permission اجرا تنظیم کنید :

chmod +x ./installer.sh

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

./installer.sh

نصب تمام شد.

تنظیمات کلاینت

بعد از نصب سرویس تحریم شکن لازم است سمت کلاینت(سیستم شخصی یا سرور) تغییراتی اعمال شود.

سیستم های ویندوزی : از مسیر C:\Windows\System32\drivers\etc فایل hosts را ویرایش کرده و با فرمت زیر دامنه را اضافه کنید :

ipserver       indexing.google.com

بجای ipserver باید آی‌پی سرور تحریم شکن جایگزین شود.و بجای indexing.google.com آدرس دامنه تحریم شده.

سیستم های لینوکسی و یا مک :  فایل hosts از مسیر /etc/ باید ویرایش شده و با فرمت زیر دامنه اضافه شود :

ipserver indexing.google.com

بجای ipserver باید آی‌پی سرور تحریم شکن جایگزین شود.و بجای indexing.google.com آدرس دامنه تحریم شده.

موفق باشید

سعید یاوری

فعال در حوزه شبکه و امنیت DevSecOps

یک دیدگاه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا