برای یک سال (یا دو سال) من انتشار این مقاله را به دلیل اصلی به تعویق انداختم - قبلاً دو مقاله منتشر کرده بودم که در آنها روند ایجاد یک روتر در SOCKS از یک لپ تاپ بسیار معمولی با Debian را شرح دادم.
با این حال، از آن زمان نسخه پایدار دبیان به Buster بهروزرسانی شده است، تعداد کافی از افراد به صورت خصوصی با من تماس گرفتهاند و برای راهاندازی کمک میخواهند، به این معنی که مقالات قبلی من جامع نیستند. خوب، من خودم حدس زدم که روش های ذکر شده در آنها به طور کامل تمام پیچیدگی های راه اندازی لینوکس برای مسیریابی در SOCKS را آشکار نمی کند. علاوه بر این، آنها برای Debian Stretch نوشته شده اند و پس از ارتقاء به Buster، در سیستم systemd init، متوجه تغییرات کوچکی در تعامل سرویس ها شدم. و در خود مقاله ها، من از systemd-networkd استفاده نکردم، اگرچه برای پیکربندی های شبکه پیچیده مناسب تر است.
علاوه بر تغییرات فوق، خدمات زیر به تنظیمات من اضافه شد: hostapd - سرویس مجازی سازی نقطه دسترسی، ntp برای همگام سازی زمان مشتریان شبکه محلی، dnscrypt-proxy برای رمزگذاری اتصالات از طریق DNS و غیرفعال کردن تبلیغات در مشتریان شبکه محلی، و همچنین، همانطور که قبلا ذکر کردم، systemd-networked برای پیکربندی رابط های شبکه
در اینجا یک بلوک دیاگرام ساده از ساختار داخلی چنین روتری آورده شده است.
بنابراین، اجازه دهید به شما یادآوری کنم که اهداف این سری مقالات چیست:
مسیریابی همه اتصالات سیستم عامل به SOCKS و همچنین اتصالات از همه دستگاه های موجود در شبکه مشابه لپ تاپ.
لپ تاپ در کیس من باید کاملاً متحرک بماند. یعنی فرصت استفاده از محیط دسکتاپ و گره نخوردن به مکان فیزیکی را بدهد.
آخرین نکته دلالت بر اتصال و مسیریابی فقط از طریق رابط بی سیم داخلی دارد.
خوب، و البته، ایجاد یک راهنمای جامع، و همچنین تجزیه و تحلیل فن آوری های مربوطه با بهترین دانش من.
آنچه در این مقاله پوشش داده خواهد شد:
دستگاه گوارش - دانلود مخازن پروژه tun2 socksبرای هدایت ترافیک TCP به SOCKS مورد نیاز است ایجاد کنید - یک اسکریپت برای خودکار کردن راه اندازی یک نقطه دسترسی مجازی با استفاده از hostapd.
tun2 socks - ساخت و نصب سرویس systemd روی سیستم.
systemd-networked - پیکربندی رابط های بی سیم و مجازی، جداول مسیریابی استاتیک و تغییر مسیر بسته ها.
ایجاد کنید - سرویس systemd را روی سیستم نصب کنید، یک نقطه دسترسی مجازی را پیکربندی و راه اندازی کنید.
مراحل اختیاری:
ntp - یک سرور را برای همگام سازی زمان در کلاینت های نقطه دسترسی مجازی نصب و پیکربندی کنید.
dnscrypt-proxy - درخواستهای DNS را رمزگذاری میکنیم، آنها را به SOCKS هدایت میکنیم و دامنههای تبلیغاتی را برای شبکه محلی غیرفعال میکنیم.
چرا این همه؟
این یکی از راه های ایمن سازی اتصالات TCP در شبکه محلی است. مزیت اصلی این است که تمام اتصالات در SOCKS انجام می شود، مگر اینکه یک مسیر ثابت برای آنها از طریق دروازه اصلی ساخته شود. این به این معنی است که شما نیازی به تعیین تنظیمات سرور SOCKS برای برنامهها یا کلاینتها در شبکه محلی ندارید - همه آنها به طور پیشفرض به SOCKS میروند، زیرا این دروازه پیشفرض است تا زمانی که خلاف آن را نشان دهیم.
اساساً ما یک روتر رمزگذاری دوم را به عنوان یک لپتاپ در مقابل روتر اصلی اضافه میکنیم و از اتصال اینترنت روتر اصلی برای درخواستهای SOCKS رمزگذاریشده لپتاپ استفاده میکنیم، که به نوبه خود درخواستهای مشتریان LAN را مسیریابی و رمزگذاری میکند.
از دیدگاه ارائه دهنده، ما دائماً به یک سرور با ترافیک رمزگذاری شده متصل هستیم.
بر این اساس، تمام دستگاه ها به نقطه دسترسی مجازی لپ تاپ متصل می شوند.
tun2socks را روی سیستم نصب کنید
تا زمانی که دستگاه شما اینترنت دارد، تمام ابزارهای لازم را دانلود کنید.
apt update
apt install git make cmake
بسته badvpn را دانلود کنید
git clone https://github.com/ambrop72/badvpn
یک پوشه در سیستم شما ظاهر می شود badvpn. یک پوشه جداگانه برای بیلد ایجاد کنید
NetworkManager-wait-online سرویسی است که قبل از اینکه systemd به راهاندازی سرویسهای دیگری که به وجود شبکه بستگی دارد، ادامه دهد، منتظر یک اتصال شبکه فعال است. وقتی به آنالوگ شبکهای systemd تغییر میدهیم، آن را غیرفعال میکنیم.
بیایید فوراً آن را فعال کنیم:
systemctl enable systemd-networkd-wait-online
رابط شبکه بی سیم را تنظیم کنید
یک فایل پیکربندی systemd-networkd برای رابط شبکه بی سیم ایجاد کنید /etc/systemd/network/25-wlp6s0.network.
نام نام رابط بی سیم شما است. با دستور آن را شناسایی کنید ip a.
IPForward - دستورالعملی که امکان هدایت مجدد بسته ها را در یک رابط شبکه فراهم می کند.
نشانی: مسئول اختصاص یک آدرس IP به رابط بی سیم است. ما آن را به صورت استاتیک مشخص می کنیم زیرا با دستورالعمل معادل DHCP=yes، systemd-networkd یک دروازه پیش فرض روی سیستم ایجاد می کند. سپس تمام ترافیک از طریق دروازه اصلی و نه از طریق رابط مجازی آینده در یک زیرشبکه دیگر عبور می کند. با دستور می توانید دروازه پیش فرض فعلی را بررسی کنید ip r
یک مسیر ثابت برای سرور SOCKS راه دور ایجاد کنید
اگر سرور SOCKS شما محلی نیست، بلکه از راه دور است، باید یک مسیر ثابت برای آن ایجاد کنید. برای این کار یک بخش اضافه کنید Route به انتهای فایل پیکربندی رابط بی سیم که با محتوای زیر ایجاد کرده اید:
[Route]
Gateway=192.168.1.1
Destination=0.0.0.0
Gateway - این دروازه پیش فرض یا آدرس نقطه دسترسی اصلی شما است.
Destination - آدرس سرور SOCKS.
wpa_supplicant را برای systemd-networkd پیکربندی کنید
systemd-networkd از wpa_supplicant برای اتصال به یک اکسس پوینت امن استفاده می کند. هنگام تلاش برای "بالا بردن" رابط بی سیم، systemd-networkd سرویس را راه اندازی می کند wpa_supplicant@имяجایی که نام نام رابط بی سیم است. اگر قبلاً از systemd-networkd استفاده نکردهاید، احتمالاً این سرویس در سیستم شما وجود ندارد.
بنابراین آن را با دستور ایجاد کنید:
systemctl enable wpa_supplicant@wlp6s0
من استفاده کردم wlp6s0 به عنوان نام رابط بی سیم آن. ممکن است نام شما متفاوت باشد. با دستور می توانید آن را تشخیص دهید ip l.
اکنون سرویس ایجاد شده است wpa_supplicant@wlp6s0 هنگامی که رابط بی سیم "بالا" راه اندازی می شود، اما، به نوبه خود، تنظیمات SSID و رمز عبور نقطه دسترسی را در فایل جستجو می کند. /etc/wpa_supplicant/wpa_supplicant-wlp6s0. بنابراین، شما باید آن را با استفاده از ابزار ایجاد کنید wpa_passphrase.
جایی که SSID نام نقطه دسترسی شما است، رمز عبور رمز عبور است، و wlp6s0 - نام رابط بی سیم شما.
رابط مجازی را برای tun2socks راه اندازی کنید
یک فایل برای مقداردهی اولیه یک رابط مجازی جدید در سیستم ایجاد کنید/etc/systemd/network/25-tun2socks.netdev
[NetDev]
Name=tun2socks
Kind=tun
نام نامی است که systemd-networkd پس از مقداردهی اولیه به رابط مجازی آینده اختصاص می دهد.
نوع یک نوع رابط مجازی است. از نام سرویس tun2socks می توان حدس زد که از رابطی مانند استفاده می کند tun.
نتدف پسوند فایل هایی است که systemd-networkd برای مقداردهی اولیه رابط های شبکه مجازی استفاده می شود. آدرس و سایر تنظیمات شبکه برای این رابط ها در مشخص شده است .شبکه-فایل ها.
یک فایل مانند این ایجاد کنید /etc/systemd/network/25-tun2socks.network با محتوای زیر:
Name - نام رابط مجازی که در آن مشخص کرده اید نتدف-فایل.
Address - آدرس IP که به رابط مجازی اختصاص داده می شود. باید در همان شبکه با آدرسی که در سرویس tun2socks مشخص کرده اید باشد
Gateway - آدرس IP "روتر" tun2 socks، که هنگام ایجاد سرویس systemd مشخص کردید.
بنابراین رابط tun2 socks آدرس دارد 172.16.1.2، و خدمات tun2 socks - 172.16.1.1، یعنی دروازه تمام اتصالات از رابط مجازی است.
یک نقطه دسترسی مجازی راه اندازی کنید
نصب وابستگی ها:
apt install util-linux procps hostapd iw haveged
مخزن را دانلود کنید create_ap به ماشین شما:
git clone https://github.com/oblique/create_ap
به پوشه مخزن دستگاه خود بروید:
cd create_ap
نصب روی سیستم:
make install
یک پیکربندی روی سیستم شما ظاهر می شود /etc/create_ap.conf. در اینجا گزینه های اصلی ویرایش آمده است:
GATEWAY=10.0.0.1 - بهتر است آن را به یک زیرشبکه رزرو شده جداگانه تبدیل کنید.
NO_DNS=1 - غیر فعال کنید، زیرا این پارامتر توسط رابط مجازی systemd-networkd مدیریت می شود.
NO_DNSMASQ=1 - به همین دلیل آن را خاموش کنید.
WIFI_IFACE=wlp6s0 - رابط بی سیم لپ تاپ.
INTERNET_IFACE=tun2socks - یک رابط مجازی ایجاد شده برای tun2socks.
SSID=hostapd - نام نقطه دسترسی مجازی.
PASSPHRASE=12345678 - کلمه عبور.
فراموش نکنید که سرویس را فعال کنید:
systemctl enable create_ap
سرور DHCP را در systemd-networkd فعال کنید
خدمات create_ap یک رابط مجازی را در سیستم راه اندازی می کند ap0. در تئوری، dnsmasq روی این رابط نصب میشود، اما اگر systemd-networkd حاوی یک سرور داخلی DHCP باشد، چرا سرویسهای اضافی نصب کنیم؟
برای فعال کردن آن، تنظیمات شبکه را برای نقطه مجازی تعریف می کنیم. برای این کار یک فایل ایجاد کنید /etc/systemd/network/25-ap0.network با محتوای زیر:
پس از اینکه سرویس create_ap رابط مجازی را مقداردهی اولیه کرد ap0، systemd-networkd به طور خودکار یک آدرس IP به آن اختصاص می دهد و سرور DHCP را فعال می کند.
رشته های EmitDNS=yes и DNS=10.0.0.1 تنظیمات سرور DNS را به دستگاه های متصل به نقطه دسترسی منتقل کنید.
اگر قصد ندارید از یک سرور DNS محلی استفاده کنید - در مورد من dnscrypt-proxy است - می توانید نصب کنید DNS=10.0.0.1 в DNS=192.168.1.1جایی که 192.168.1.1 - آدرس دروازه اصلی شما. سپس درخواستهای DNS برای میزبان و شبکه محلی شما از طریق سرورهای ارائهدهنده رمزگذاری نشده میشوند.
EmitNTP=yes и NTP=192.168.1.1 تنظیمات NTP را انتقال دهید
در مورد خط هم همینطور NTP=10.0.0.1.
سرور NTP را نصب و پیکربندی کنید
نصب روی سیستم:
apt install ntp
تنظیمات را ویرایش کنید /etc/ntp.conf. آدرس استخرهای استاندارد را بنویسید:
آدرس های سرور عمومی را اضافه کنید، به عنوان مثال Google Public NTP:
server time1.google.com ibrust
server time2.google.com ibrust
server time3.google.com ibrust
server time4.google.com ibrust
دسترسی به سرور را برای مشتریان در شبکه خود فراهم کنید:
restrict 10.0.0.0 mask 255.255.255.0
پخش در شبکه خود را فعال کنید:
broadcast 10.0.0.255
در نهایت آدرس این سرورها را به جدول مسیریابی ثابت اضافه کنید. برای انجام این کار، فایل پیکربندی رابط بی سیم را باز کنید /etc/systemd/network/25-wlp6s0.network و به انتهای بخش اضافه کنید Route.
پس از راه اندازی مجدد یا راه اندازی مجدد، یک نقطه دسترسی دوم خواهید داشت که دستگاه های میزبان و LAN را به SOCKS هدایت می کند.
این همان چیزی است که خروجی به نظر می رسد ip a لپ تاپ معمولی:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: tun2socks: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 500
link/none
inet 172.16.1.2/24 brd 172.16.1.255 scope global tun2socks
valid_lft forever preferred_lft forever
inet6 fe80::122b:260:6590:1b0e/64 scope link stable-privacy
valid_lft forever preferred_lft forever
3: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether e8:11:32:0e:01:50 brd ff:ff:ff:ff:ff:ff
4: wlp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 4c:ed:de:cb:cf:85 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global wlp6s0
valid_lft forever preferred_lft forever
inet6 fe80::4eed:deff:fecb:cf85/64 scope link
valid_lft forever preferred_lft forever
5: ap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 4c:ed:de:cb:cf:86 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.1/24 brd 10.0.0.255 scope global ap0
valid_lft forever preferred_lft forever
inet6 fe80::4eed:deff:fecb:cf86/64 scope link
valid_lft forever preferred_lft forever
به عنوان یک نتیجه،
ارائه دهنده فقط اتصال رمزگذاری شده به سرور SOCKS شما را می بیند، به این معنی که آنها چیزی نمی بینند.
و با این حال درخواست های NTP شما را می بیند، برای جلوگیری از این امر، مسیرهای استاتیک را برای سرورهای NTP حذف کنید. با این حال، مطمئن نیست که سرور SOCKS شما اجازه پروتکل NTP را می دهد.
عصا در Debain 10 مشاهده شد
اگر بخواهید سرویس شبکه را از کنسول مجدد راه اندازی کنید، با خطا مواجه می شود. این به این دلیل است که بخشی از آن در قالب یک رابط مجازی به سرویس tun2socks گره خورده است، یعنی از آن استفاده می شود. برای راه اندازی مجدد سرویس شبکه، ابتدا باید سرویس tun2socks را متوقف کنید. اما، من فکر می کنم، اگر شما تا آخر بخوانید، این قطعا برای شما مشکلی ندارد!