راه‌اندازی رزبری‌پای به عنوان روتر-اکسس‌پوینت به زبان ساده!


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

حالا بریم سر اصل مطلب! یکی از مشکلاتی که تو خونه داشتم این بود که برای هرکاری باید vpnمو قطع و وصل می‌کردم؛ یه سایت فیلتره، یه سایت تحریمه یا اینکه یه سایت دسترسی رو از خارج بسته (سایتای دانلود فیلم یا یسری درگاه‌های پرداخت مثال این سایتا هستن). از طرفی هم روشن بودن همیشگی vpn پدر باتری گوشیمو در می‌آورد؛ برای همین به این فکر افتادم که کاشکی یه دیوایسی باشه روش یه بار این تنظیمات رو ران کنم و خودش فازو بگیره برام.

یکمی سرچ کردم و بین خریدن یه روتر که از OpenWRT پشتیبانی کنه و یه رزبری که باهاش کلی کار دیگه هم میشد کرد، رزبری رو انتخاب کردم. طی یه عملیات سورپرایزی، دوستام برام رزبری‌پای خریدن و دیگه بهونه‌ای شد که اینکار رو بکنم!


### پیشنیازها

اول از همه به یه سرور نیاز دارین که روش vpnتونو با پروتکل مورد نظرتون کانفیگ کنین. من خودم از wireguard استفاده می‌کنم. اینجا فرض میکنیم اسم اینترفیسش `wg0` هست و ip سرورتون `10.66.66.1` ه. روی مودم/روتر اصلیتون هم باید کانفیگ کنین که به رزبریتون همیشه آیپی ثابت (در مورد ما `192.168.10.100`) بده و آی‌پی خود مودمتون `192.168.10.1` هست؛ اینکار رو میتونین با وارد کردن mac address رزبری‌پایتون تو تنظیمات dhcp انجام بدین. فرض آخرمون هم اینه که رو رزبری‌پای یا همون دیوایسی که قراره اکسس‌پوینت بشه یه اینترفیس وایرلس هم به اسم `wlan0` دارین که امکان اکسس‌پوینت شدن هم داره. رنج آی‌پی `192.168.1.0/24` هم بازه و تو شبکه کسی کاریش نداره.


### کانفیگ هات‌اسپات

حالا که همه پیشنیازا رو دارین، باید بریم سراغ کانفیگ خود رزبری. پکیجای `dnsmaq` و ‍`hostapd` رو نصب کنین:

sudo apt install dnsmasq hostapd

و بعدش توی فایل `/etc/dhcpcd.conf` به اینترفیس وایرلستون هم آی‌پی ثابت بدین:

interface wlan0
    static ip_address=192.168.1.1/24
    nohook wpa_supplicant

و سرویس dhcpcd رو ریستارت کنین.

مرحله بعدی کانفیگ dnsmasq هست که رزبریتون بتونه به درخواستای dnsتون رسیدگی کنه، برای اینکار فایل ` /etc/dnsmasq.conf` رو باز کنین و این تنظیمات رو انجام بدین:

interface=wlan0 # Listening interface 
dhcp-range=192.168.1.2,192.168.1.25,255.255.255.0,24h 
                # Pool of IP addresses served via DHCP 
domain=wlan     # Local wireless DNS domain 
address=/rpi.wlan/192.168.1.1 
                # Alias for this router 
except-interface=eth0 
except-interface=wg0

داخل خود فایل مشخصه که هر کدوم از فیلدا برای چی هستن. بعد از سیو و خروج از فایل، سرویس dnsmasq رو هم ریستارت کنین.

قدم سوم، کانفیگ hostapd هست که بتونین باهاش دیوایستون رو اکسس‌پوینت کنین و بهش دسترسی داشته باشین. فایل `/etc/hostapd/hostapd.conf` رو باز کنین و این محتوا رو توش وارد کنین:

country_code=IR 
interface=wlan0 
ssid=Routed AP
hw_mode=g 
channel=0
wmm_enabled=0 
macaddr_acl=0 
auth_algs=1 
ignore_broadcast_ssid=0 
wpa=2 
wpa_passphrase=WIFI_PASSWORD 
wpa_key_mgmt=WPA-PSK 
wpa_pairwise=TKIP 
rsn_pairwise=CCMP

خط اول در مورد اینکه تو کدوم کشور هستین به دیوایس وایرلستون اطلاع میده تا قوانین رگولاتوری اون منطقه رو رعایت کنین (دقیقا نمیدونم برای ایران چه حالات خاصی رو شامل میشه)

خط سوم اسم اکسس‌پوینتمون رو (همون اسمی که نمایش داده میشه برای ملت) رو تنظیم می‌کنیم. خط پایینیش میگیم رو چه باندی باشیم که اینجا رو g هستیم (اگه بخواین، میتونین دانگل وایرلسی بگیرین که از باند a هم پشتیبانی میکنه و رو فرکانس ۵گیگاهرتز برین که تداخل امواجش کمتره، فقط انگاری بردش هم کمتر میشه) و خط پایینش هم میگی رو چه کانالی باشیم. اینجا کانال رو ۰ گذاشتیم به این معنیه که خود سیستم یه کانال خالی پیدا کنه، ولی شما میتونین یه کانال دیگه ثابت انتخاب کنین. در آخر، خط ۱۱ پسوردمون رو تنظیم می‌کنیم. برای امنیت بیشتر یه پسورد به اندازه کافی طولانی و رندوم بذارین.

حالا کافیه که اجازه‌ی فروارد کردن پکت‌ها رو هم به سیستمتون بدین تا کار این مرحله تموم بشه! با این کامندها این کار انجام میشه:

echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/97-wifi-ap.conf
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE
sudo netfilter-persistent save

با خط آخر تنظیمات فایروالتون هم سیو میشه و با هر ریستارت نمی‌پره. حالا ریستارت کنین و تست کنین که اینترنت داشته باشین (حواستون باشه که رزبری‌پای رو به مودم/روتر وصل کرده باشین.)


### کانفیگ وی‌پی‌ان

کانفیگ کلاینت wireguardتون رو تو مسیر `/etc/wireguard/wg0.conf` سیو کنین و با دستور زیر سرویسشو enable کنین:

sudo systemctl enable wg-quick@wg0

بعدش فایروال رو کانفیگ کنین که بذاره ترافیکتون فروارد بشه:

sudo iptables -A FORWARD -i wlan0 -o wg0 -j ACCEPT
sudo iptables -A FORWARD -i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t nat -A  POSTROUTING -o wg0 -j MASQUERADE
sudo netfilter-persistent save

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

sudo systemctl start wg-quick@wg0

وقتی از درست کار کردن وی‌پی‌ان مطمئن شدین، نوبت اینه که بگیم ترافیک ایران رو از vpn رد نکنه D:

برای اینکار باید لیستی از آی‌پی‌های ایران داشته باشیم و به iproute بگیم که اینا رو مستقیم رد کن. با اسکریپتی که هادی زحمتشو کشیده دوتا فایل دستورات iproute2 بسازین (gateway رو باید آدرس آی‌پی مودم یا همون `192.168.10.1` بذارین).

اول با کامند زیر وایرگارد رو بیارین پایین:

sudo systemctl stop wg-quick@wg0

سپس برای اینکه ترافیک ایران رو مستقیم رد کنین وقتی vpn میاد بالا، توی کانفیگ کلاینت وایرگاردتون زیر بخش Interface این دو خط رو اضافه کنین:

PostUp = ip -force -batch /path/to/route.add.txt; 
PreDown = ip -force -batch /path/to/route.del.txt;

حالا برای تست دوباره وایرگارد رو بیارین بالا:

sudo wg-quick up wg0

(اینسری با خود wg-quick زدم که اگه مشکلی پیش اومد نشون بده)

برای اینکه بتونین تست کنین درست کار میکنه یا نه میتونین با دستور dig آی‌پی‌های یه سایتی مثل ifconfig.io رو پیدا کنین و همه رو به فایلایی که توسط اسکریپته ساختین اضافه کنین (طبیعتا قبلش باید وایرگارد رو بیارین پایین تا روت‌ها پاک بشن و دوباره اپلایشون کنین.) و تو سیستم خودتون که به رزبری وصله دستور زیر رو وارد کنین:

curl ifconfig.io

خروجی باید آی‌پی خودتون باشه، نه آی‌پی سرور.


دیگه همه چی تموم شد و حالا می‌تونین از رزبری‌تون همراه بقیه استفاده‌هایی که می‌کردین، به عنوان یه روتر هم استفاده کنین! اگه از این پست راضی بودین، می‌تونین برای حمایت از من بهم مبلغی رو دونیت کنین https://idpay.ir/mavahedinia


پ.ن: منابعم این دوتا مطلبن: ۱. https://www.raspberrypi.org/documentation/configuration/wireless/access-point-routed.md و ۲. https://blog.stigok.com/2019/03/26/raspberry-pi-wifi-ap-wireguard-port-53.html. اگر در مورد کانفیگ وایرگارد هم سوالی بود تو کامنتا بپرسین یا به توییترم دایرکت بدین یا به mohammadamin در vahedinia.me ایمیل بزنین (هرکاری کردم اسپمرا اسکرپ نکنن =))))) جواب میدم.