در پشت خانهام یک لپتاپ با هدف بسیار خاصی قرار دارد. این لپتاپ کنار تمام تجهیزات رادیویی HAM من قرار دارد، به یک رادیو سافتویِرد متصل است و بهعنوان سرور وب برای برنامه هابی که برای ردیابی سیگنالهای GPS نوشتم، کار میکند.
این لپتاپ بیشتر زمان را در حالت خواب میگذراند، اما گاهی نیاز به روشن کردن آن برای استفاده از برنامه GPS دارم. چون لپتاپ باید در نزدیکی آنتن بماند اما نیازی به روشن بودن ۲۴ ساعت در روز نیست، تصمیم سختی پیش آمد: یا بیرون میرفتم و بهصورت دستی آن را روشن میکردم، یا یک راهحل فنی مهندسی میکردم.
بدیهی است که راهحل دوم را انتخاب کردم و روتر OpenWRT همراه با Tailscale روی آن نصب کردم تا بتوانم لپتاپ را از هرجایی روشن کنم و به آن دسترسی پیدا کنم.
I needed the laptop to stay where it was
Wi‑Fi reached the room, but Wake‑on‑LAN still needed a wired local relay





لپتاپ قدیمی که برای نرمافزار رادیویی هابیام استفاده میکردم، بلافاصله پس از اتصال به آنتن قابل جابهجایی نبود. برنامه GPS سیگنالهای دریافتشده را پردازش میکند و زمان را استخراج میکند، بنابراین جابجایی لپتاپ فقط برای سادهسازی روشن‑کردن، تمام پروژه را خراب میکرد.
Starlink Mini من وای‑فای به اتاق میرساند، اما هیچ شبکه سیمی در دسترس نیست. برای دروازهکردن زیرشبکه ۱۹۲.۱۶۸.۵۵.۰/۲۴ که لپتاپ و دیگر دستگاهها در آن هستند، از یک دستگاه Intel NUC قدیمی با OpenWRT و آداپتورهای Wi‑Fi و Ethernet استفاده کردم تا این زیرشبکه را به بقیه شبکه خانگی وصل کنم.
از آنجایی که OpenWRT امکان نصب Etherwake (ابزار Wake‑on‑LAN کوچک) را میدهد، میتوانستم لپتاپ را از راه دور بیدار کنم. Wake‑on‑LAN با ارسال فریم لایه ۲ شامل شش بایت FF و سپس مکآدرس هدف ۱۶ بار تکرار میشود. این بسته باید از شبکه محلی Ethernet لپتاپ ارسال شود. آدرس CGNAT عمومی Starlink هم مانع دسترسی مستقیم به OpenWRT میشود.
Tailscale راهحل عبور از CGNAT را فراهم کرد. این سرویس یک شبکه خصوصی مبتنی بر WireGuard بین دستگاههای احراز هویتشده ایجاد میکند که از اتصال خروجی استفاده میکند، بنابراین نیازی به باز کردن درگاه UDP ۹ (Discard/Wake‑on‑LAN) یا رابط وب OpenWRT (LuCI) نداریم. وقتی خارج از شبکه بودم، تلفنهوشمندم میتوانست از طریق Tailscale به NUC متصل شود و OpenWRT سپس بسته جادویی را بهصورت محلی در LAN ارسال میکرد.
ابتدا لازم بود Wake‑on‑LAN را در BIOS لپتاپ تنظیم کنم و Wake on Magic Packet را برای آداپتور Ethernet فعال کنم. پس از اتمام، با PowerShell بررسی کردم که دستگاه آماده بیدار شدن باشد:
powercfg /devicequery wake_armed
OpenWRT بهخاطر قابلیتهای پیشرفتهاش میتوانست Tailscale را بهصورت بومی نصب کند؛ اما فضای ریشه فقط ۹۸.۳ مب (دسترسپذیر ۵۲.۲ مب) بود. NUC یک دیسک ۱ TB داشت اما تصویر فلش بهطور کامل از آن استفاده نمیکرد. برای نصب Tailscale ابتدا باید پارتیشن ریشه را گسترش میدادم.
OpenWRT
OpenWrt یک سیستمعامل روتر منبع باز است که firmware پیشفرض را با یک پلتفرم شبکهای انعطافپذیر جایگزین میکند. کنترل عمیقتری روی مسیربندی، قوانین فایروال، DHCP، DNS، شکلدادن ترافیک، VPNها و بستههای نرمافزاری فراهم میکند.
Starlink made ordinary remote access a dead end
Tailscale crossed CGNAT once I gave OpenWrt enough room to install it
نقشه شبکهام منطقی بود. Tailscale یک اتصال خروجی رمزگذاریشده از NUC ایجاد میکرد، تلفنمن را به تیلنت میپیوست، و OpenWRT زیرشبکه ۱۹۲.۱۶۸.۵۵.۰/۲۴ را تبلیغ میکرد. بدین ترتیب Starlink نیازی به پذیرش ارتباط ناخواسته یا آدرس IPv4 عمومی نداشت. اما نرمافزار باید روی روتر نصب میشد و در فضای محدود جا میگرفت.

در ابتدا فضای مربوط به ریشه OpenWRT /dev/sda1 بود و مهم بود که این پارتیشن سوار نشده باشد. با ابزار parted، بخش ۲ را به فضای خالی گسترش دادم و سیستمفایل EXT4 را بزرگکردم.
parted -f -s /dev/sda resizepart 2 100%
partprobe /dev/sda
resize2fs /dev/sda2
پس از تأیید با df ‑h /، Tailscale نصب شد:

apk update
apk add tailscale
/etc/init.d/tailscale enable
/etc/init.d/tailscale start
tailscale up --accept-dns=false
Tailscale را از DNS جدا نگه داشتم چون حلکننده Starlink قبلاً بهدرستی کار میکرد. دستور یک URL احراز هویت تولید کرد که با حساب Tailscaleام وارد شدم و دستگاه NUC/OpenWRT را بهشبکه اضافه کردم. سپس برای دسترسی به رابط LuCI OpenWRT از طریق CGNAT، لازم بود مسیر ۱۹۲.۱۶۸.۵۵.۰/۲۴ را تبلیغ کنم.
Tailscale یک ابزار دسترسی از راه دور مبتنی بر VPN صفر‑پیکربندی است؛ مبتنی بر پروتکل WireGuard است و اتصال همتا‑به‑همتا بین دستگاهها، صرفنظر از مکان، برقرار میکند.
I had a green dot in Tailscale, but the router was unreachable
The tunnel was alive, but OpenWRT still had some firewall configuration left to do

مسیر دادهای بین برنامه Tailscale موبایل من و روتر OpenWRT وجود داشت و داشتم یک نقطهٔ سبز روی داشبورد Tailscale میدیدم. اما رابط LuCI همچنان زمانسنجی میکرد.
در OpenWRT، Tailscale یک دستگاه جدید به نام tailscale0 ساخت، اما در هیچیک از نواحی فایروال قرار نگرفت. من آن را در LuCI بهعنوان یک اینترفیس بدون مدیریت (unmanaged) اضافه کردم و یک ناحیهٔ فایروال جدید برای Tailscale با تنظیمات زیر ساختیم:
- Input: accept
- Output: accept
- Intra zone forward: reject (except from Tailscale to LAN)
- Forward destination zone: LAN
بعد سرویس Tailscale را دوباره راهاندازی کردم:
/etc/init.d/tailscale restart
سپس زیرشبکهٔ محلی را تبلیغ کردم:
tailscale set --advertise-routes=192.168.55.0/24
در داشبورد مدیریت Tailscale مسیر را تأیید و کلید انقضای مداوم را غیرفعال کردم. در حال حاضر تلفنهوشمند، حتی روی شبکهٔ موبایل، میتوانست LuCI را در ۱۹۲.۱۶۸.۵۵.۱ باز کند و مسیر خصوصی بهدرستی کار میکرد.
The magic packet finally made it all come together
I can wake the RTL‑GPS laptop without leaving it running all day




مرحلهٔ نهایی سادهترین بود. Tailscale را روی گوشی اندروید نصب کردم، با همان حساب وارد شدم و ارتباط را از طریق دادههای موبایل تست کردم. LuCI بهخوبی در ۱۹۲.۱۶۸.۵۵.۱ نمایش داده شد و مسیر خصوصی بهدرستی کار میکرد.
حالا OpenWRT فقط به دو بسته apk دیگر نیاز داشت: etherwake و luci‑app‑wol.
apk add etherwake luci-app-wol
این گزینه Wake‑on‑LAN را در منوی Services LuCI اضافه کرد. یک ورودی جدید برای br‑lan (اتصال سیمی لپتاپ) ساختیم و آدرس MAC آداپتور Ethernet را وارد کردیم. این آدرس را با PowerShell در لپتاپ هدف بهدست آوردم:
Get-NetAdapter -Physical | Format-Table Name, MacAddress, Status
سپس زمان آزمون فرا رسید. لپتاپ را کاملاً خاموش کردم، حدود ۲۰ ثانیه صبر کردم و دکمهٔ Wake را در Services > Wake on LAN فشار دادم. لپتاپ تقریباً بلافاصله روشن شد.
اکنون میتوانستم بدون رفتن به پشت ملک یا نگه داشتن لپتاپ روشن، به آن و برنامههایش دسترسی پیدا کنم، که به صرفهجویی در هزینهٔ انرژی منجر شد. این کار را دوباره از طریق اتصال موبایلم انجام دادم و موفق شدم.
این موفقیت بسیار سادهتر از استفاده از یک سرور دائم برای ارسال بسته Wake‑on‑LAN بود. چون Etherwake یک فریم Ethernet لایه ۲ میفرستد، مسیربر عبور از روترهای معمولی امکانپذیر نیست؛ اما Tailscale حالت IP لایه ۳ را فراهم میکند.
میتوانستم پیکربندی subnet‑directed broadcast را انجام دهم یا حتی یک رله Wake‑on‑LAN راهاندازی کنم، اما این کار قوانین بیشتری اضافه میکرد. OpenWRT این کار را بهخوبی انجام میدهد، همیشه روشن میماند و دقیقاً در همان زیرشبکه است.
My router was the right place to solve it
The supporting hardware must stay powered, but the SDR laptop no longer has to

اگرچه نام بستهٔ Wake‑on‑LAN به «جادویی» اشاره دارد، اما واقعاً هیچ جادویی وجود ندارد. دستگاه NUC، سوییچ، Starlink و شارژر لپتاپ باید همگی روشن بمانند. یک کابل قطعشده یا قطعی طولانی برق کافی است تا این کارکرد از بین برود.
با این حال در نصب من این مصالحهها معنا داشت. NUC از قبل بهعنوان روتر شبکهٔ رادیویی کار میکرد، بنابراین جای مناسبی برای راهاندازی زیرساخت Wake‑on‑LAN بود.
دقیقاً همین انعطافپذیری است که OpenWRT را فوقالعاده میکند. یک روتر تجاری تنها به اشتراکگذاری Starlink بسنده میکرد، اما OpenWRT به شبکهٔ Tailscale پیوست، زیرشبکهٔ ایزولهٔ من را تبلیغ کرد، درخواستها را از گوشی هوشمند پذیرفت و فریمهای محلی Ethernet را تولید کرد تا لپتاپ بیدار شود.
Etherwake فقط آخرین بستهٔ جادویی کوچک را ارسال میکند، اما OpenWRT تمام گامهای قبلی را ممکن ساخت. این دقیقاً دلیلی است که همیشه کارهای جدیدی برای این روتر فوقالعاده پیدا میکنم.
پنج دقیقهٔ کار با Tailscale نظر مرا عوض کرد.
- Router
- Remote Access
منبع: این مطلب یک بازنویسی و بومیسازی تحریریهٔ بر اساس مقالهٔ MakeUseOf نوشته Gregory Gibson است: مشاهده مقاله اصلی.