پیکربندیکننده SOCKS5 برای لینوکس: proxychains، redsocks و مسیریابی هر برنامه
لینوکس یک سوئیچ واحد SOCKS5 ندارد، اما میتوانید با proxychains هر برنامه را جداگانه مسیریابی کنید، با redsocks بهصورت شفاف، یا از طریق متغیرهای محیطی. در ادامه نحوه پیکربندی هرکدام، بررسی DNS و جلوگیری از نشتیها را میبینید.
جستوجو برای «پیکربندیکننده SOCKS5» در لینوکس اغلب باعث سردرگمی میشود: در GNOME یا KDE هیچ کلید سراسری SOCKS5 مانند پروکسیهای HTTP وجود ندارد. در عوض، لینوکس بلوکهای ساختمانی انعطافپذیری در اختیار شما میگذارد. این راهنما روشهای عملی مسیریابی ترافیک از طریق پروکسی SOCKS5 در لینوکس را پوشش میدهد — برای هر برنامه، بهصورت شفاف، و برای ابزارهای خط فرمان خاص — همراه با کدی که میتوانید آن را تطبیق دهید.
SOCKS5 در لینوکس چگونه کار میکند (و چرا DNS اهمیت دارد)
SOCKS5 یک پروتکل پروکسی عمومی است که میتواند اتصالات TCP را مدیریت کند (و با برخی افزونهها UDP را نیز، اما بیشتر پیادهسازیها به TCP پایبند میمانند). در لینوکس، تمایز کلیدی بین socks5 و socks5h است:
socks5://DNS را بهصورت محلی روی دستگاه شما resolve میکند، سپس IP را به پروکسی میفرستد.socks5h://نام میزبان را به پروکسی میفرستد و پروکسی آن را از راه دور resolve میکند.
برای محتوای محدودشده جغرافیایی یا جلوگیری از نشت DNS، معمولاً socks5h انتخاب درستی است. اگر ارائهدهنده پروکسی شما یک endpoint SOCKS5 میدهد، اغلب میتوانید با استفاده از نوع h یا تنظیمی مانند «Proxy DNS when using SOCKS v5» در فایرفاکس، DNS راه دور را اجباری کنید.
مسیریابی هر برنامه با proxychains
proxychains-ng فورک نگهداریشده ابزار کلاسیک proxychains است. این ابزار از LD_PRELOAD برای رهگیری فراخوانیهای شبکه از برنامههای پویا-لینکشده استفاده میکند و آنها را از طریق پروکسی شما مسیریابی میکند. نزدیکترین معادل لینوکسی برای Proxifier در ویندوز یا macOS است، هرچند در پشت صحنه متفاوت کار میکند.
نصب آن روی Debian/Ubuntu:
sudo apt install proxychains4
روی Arch:
sudo pacman -S proxychains-ng
فایل پیکربندی را ویرایش کنید (معمولاً /etc/proxychains4.conf یا ~/.proxychains/proxychains.conf). در انتها، پروکسی خود را تعریف کنید:
[ProxyList]
socks5 127.0.0.1 1080
اگر پروکسی شما نیاز به احراز هویت دارد:
socks5 203.0.113.10 1080 username password
برای مسیریابی DNS از طریق پروکسی، خط proxy_dns را در پیکربندی بدون کامنت نگه دارید. این باعث میشود proxychains از DNS راه دور استفاده کند، مشابه socks5h.
هر دستوری را از طریق پروکسی اجرا کنید:
proxychains4 curl https://ifconfig.me
proxychains4 firefox
توجه: proxychains با باینریهای استاتیک-لینکشده، باینریهای setuid، یا برنامههایی که فراخوانیهای خام سوکت انجام میدهند کار نمیکند. همچنین بهطور پیشفرض ترافیک UDP را پروکسی نمیکند. برای این موارد، رویکرد پروکسی شفاف در ادامه را در نظر بگیرید.
پروکسی شفاف با redsocks
اگر میخواهید همه ترافیک TCP (یا پورتهای خاص) را بدون پیکربندی هر برنامه از طریق یک پروکسی SOCKS5 مسیریابی کنید، redsocks میتواند اتصالات را در سطح هسته تغییر مسیر دهد. این کار پیچیدهتر است و در صورت پیکربندی نادرست میتواند شبکه شما را خراب کند، پس با احتیاط ادامه دهید.
نصب redsocks:
sudo apt install redsocks
یک فایل پیکربندی بسازید، برای مثال /etc/redsocks.conf:
redsocks {
local_ip = 127.0.0.1;
local_port = 12345;
ip = 203.0.113.10;
port = 1080;
type = socks5;
login = "username";
password = "password";
}
سپس از iptables برای تغییر مسیر ترافیک TCP خروجی به پورت محلی redsocks استفاده کنید. برای مثال، برای تغییر مسیر همه ترافیک TCP بهجز شبکههای محلی:
sudo iptables -t nat -N REDSOCKS
sudo iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
این تنظیمات ترافیک TCP خروجی از دستگاه محلی را تغییر مسیر میدهد. قوانین را مطابق نیاز خود تنظیم کنید (مثلاً کاربران یا مقصدهای خاصی را کنار بگذارید). به یاد داشته باشید که DNS اغلب UDP است؛ redsocks میتواند DNS مبتنی بر TCP را مدیریت کند، اما ممکن است برای UDP به پیکربندی بیشتری نیاز داشته باشید. بسیاری از کاربران redsocks را با یک resolver محلی DNS مانند dnscrypt-proxy یا unbound ترکیب میکنند تا از نشت جلوگیری کنند.
متغیرهای محیطی و ابزارهای خط فرمان
بسیاری از ابزارهای خط فرمان به متغیرهای محیطی مانند http_proxy، https_proxy و all_proxy احترام میگذارند. برای SOCKS5، قابلاعتمادترین گزینه all_proxy با طرح socks5h است:
export all_proxy=socks5h://127.0.0.1:1080
curl https://ifconfig.me
بعضی ابزارها همچنین http_proxy و https_proxy را با URLی از نوع socks5:// میپذیرند، اما میزان پشتیبانی متفاوت است. برای ابزارهای خاص، آنها را مستقیماً پیکربندی کنید:
- curl: از
--socks5-hostname 127.0.0.1:1080استفاده کنید (معادلsocks5h). - git:
git config --global http.proxy socks5h://127.0.0.1:1080 - SSH: از dynamic forwarding برای ساخت یک پروکسی SOCKS محلی استفاده کنید:
ssh -D 1080 -N user@remote-host. سپس سایر ابزارها را به127.0.0.1:1080اشاره دهید.
پیکربندی مرورگر در لینوکس
فایرفاکس پشتیبانی عالی از SOCKS5 دارد. به Settings → Network Settings → Manual proxy configuration بروید، SOCKS Host را روی 127.0.0.1 و Port را روی 1080 تنظیم کنید، SOCKS v5 را انتخاب کنید و «Proxy DNS when using SOCKS v5» را تیک بزنید. این باعث میشود فایرفاکس از DNS راه دور استفاده کند.
کروم و کرومیوم در لینوکس را میتوان با یک فلگ پروکسی اجرا کرد:
google-chrome --proxy-server="socks5://127.0.0.1:1080"
با این حال، این کار بهطور پیشفرض DNS را پروکسی نمیکند. کروم نامهای میزبان را بهصورت محلی resolve میکند، که میتواند باعث نشت DNS شود. برای اجباری کردن DNS راه دور، میتوانید از --host-resolver-rules یا یک افزونه پروکسی که SOCKS5 را با DNS راه دور مدیریت میکند استفاده کنید. در غیر این صورت، از یک پروکسی شفاف سراسری مانند redsocks استفاده کنید تا از فلگهای هر مرورگر اجتناب کنید.
بررسی تنظیمات و کنترل نشت
پس از پیکربندی، همیشه بررسی کنید که ترافیک از طریق پروکسی عبور میکند و DNS نشت نمیکند. بررسیهای سریع:
- IP ظاهری:
curl https://ifconfig.meیاcurl https://ipinfo.io/ip. (اگر از proxychains استفاده میکنید، باproxychains4پیشوند بزنید.) - آزمون نشت DNS: در مرورگر از سایتی مانند
dnsleaktest.comبازدید کنید و بررسی کنید که سرورهای DNS به ISP شما تعلق دارند یا به ارائهدهنده پروکسی. - نشت WebRTC: در مرورگرها، WebRTC میتواند IP واقعی شما را افشا کند. در صورت نیاز WebRTC را غیرفعال کنید یا از افزونهای برای مسدود کردن آن استفاده کنید.
- بررسی DNS در ترمینال:
dig +short example.comاز resolver سیستم شما استفاده میکند مگر اینکه proxychains یا یک forwarder محلی DNS را پیکربندی کرده باشید. برای دیدن اینکه DNS از پروکسی عبور میکند، نتایج را با و بدون پروکسی مقایسه کنید.
دامهای رایج و نحوه اجتناب از آنها
- استفاده از
socks5://وقتی بهsocks5h://نیاز دارید: این رایجترین علت نشت DNS است. اگر ابزار شما پشتیبانی میکند، همیشه از نوعhاستفاده کنید. - این فرض که همه برنامهها proxychains را رعایت میکنند: باینریهای استاتیک-لینکشده و برخی برنامههای sandboxed
LD_PRELOADرا دور میزنند. هر برنامهای را که نیاز دارید تست کنید. - فراموش کردن UDP و QUIC: پروکسیهای SOCKS5 معمولاً فقط TCP را مدیریت میکنند. QUIC (که در HTTP/3 استفاده میشود) روی UDP اجرا میشود و ممکن است پروکسی شما را دور بزند. اگر به یکدستی مطلق نیاز دارید، QUIC را در مرورگر خود غیرفعال کنید.
- نشت IPv6: اگر پروکسی شما فقط از IPv4 پشتیبانی میکند، ترافیک IPv6 ممکن است مستقیماً خارج شود. IPv6 را غیرفعال کنید یا در صورت پشتیبانی آن را از طریق پروکسی مسیریابی کنید.
- حلقههای پروکسی شفاف: با redsocks، مراقب باشید ترافیکی را تغییر مسیر ندهید که خود پروکسی به آن نیاز دارد (مثلاً ترافیک به IP سرور پروکسی). از قوانین استثنا استفاده کنید.
نتیجه نهایی
لینوکس یک پیکربندیکننده SOCKS5 یککلیکی ارائه نمیدهد، اما این یک ویژگی است، نه اشکال. میتوانید مسیریابی هر برنامه با proxychains، تغییر مسیر شفاف با redsocks، یا متغیرهای محیطی ساده برای ابزارهای خط فرمان را انتخاب کنید. روشی را انتخاب کنید که با گردش کار شما همخوانی دارد، سپس DNS و نشت را بررسی کنید و بعد آن را برای ترافیک حساس قابل اعتماد بدانید.