کلاینت OpenVPN برای کل شبکه محلی روی OpenWrt: ترتیبی که کار میکند
مالکیت رابط، سیاست منطقه، masquerade و جدولهای جداگانه برای هر SSID چهار کار مستقلاند. آنها را به ترتیب انجام دهید تا تونل کل روتر از جنگیدن با شما دست بردارد.
چهار کار مستقل کل شبکه محلی یک روتر را پشت یک تونل میگذارند. دستگاه تونل به یک مالک، یک منطقهٔ دیوار آتش، یک هدف ترجمه به سمت اتصال بالادستی و، اگر بعضی کلاینتها باید بیرون از VPN بمانند، مسیریابی بر اساس آدرس مبدأ نیاز دارد. تونلی که وصل میشود ولی چیزی از آن عبور نمیکند معمولاً یکی از این چهار را ندارد. کار کردن به ترتیب وابستگی یعنی خرابی در پایان به همان گامی تعلق دارد که همین حالا تغییر دادهاید. هر گام زیر با چیزی تمام میشود که میتوانید مشاهده کنید، و همین مانع میشود گام بعدی حدس باشد.
تصمیم بگیرید چه چیزی از تونل مشترک استفاده میکند
روتری که Wi-Fi و DHCP توزیع میکند میتواند خودش کلاینت را اجرا کند. این هر دستگاه متصل را بدون تنظیم جداگانه برای هر دستگاه پشت تونل میگذارد، و همان چیدمانی است که بیشتر سایتهای کوچک میخواهند. این هم همان چیدمانی است با گستردهترین اثر وقتی تونل قطع میشود، چون همهٔ دستگاهها یکجا مسیرشان را از دست میدهند. هیچچیز در شبکه محلی مسیر کاری به بیرون را نگه نمیدارد.
روتر دومی پشت روتر اول که کلاینت را با زیرشبکهٔ خودش اجرا میکند، تونل را به دستگاههای خودش محدود میکند. برداشتنش آسانتر و توضیحش برای کسی که آن را به ارث میبرد آسانتر است. بهایش دسترسی بین دو طرف بدون مسیر یا انتقال پورت است.
در هر حال، زیرشبکههای شبکه محلی را متفاوت کنید. محدودههای یکسان یک طرف را مستقیم متصل نشان میدهند، و سیاهچالهای که از این راه میآید ساعتها شبیه عیب VPN به نظر میرسد.
به تونل یک مالک بدهید
تونل را بهعنوان یک رابط شبکه با نام، دستگاه و بدون پروتکل اختصاصی اعلام کنید. آنگاه سیستم شبکه دستگاه را میسازد و مدیریت میکند، و همهچیز پایینتر به رابط با نام ارجاع میدهد نه با دستگاه. همین چیزی است که به منطقه اجازه میدهد آن را پیدا کند.
همان دستگاه را در دو جا نسازید. یک تونل دستی در کنار یک رابط اعلامشده دستگاهی میسازد که هست ولی در هیچ منطقهای نیست، یا یکی که هنگام بارگذاری دوباره ناپدید میشود. هر دو شبیه شکست کلاینت به نظر میرسند، و هیچکدام خطایی تولید نمیکند که علت واقعی را نام ببرد. مسیر اعلانی را انتخاب کنید و مسیر دستی را حذف کنید.
نام را در پیکربندی شبکه، دیوار آتش و VPN یکسان نگه دارید. منطقه شبکهها را با نام فهرست میکند، پس یک غلط تایپی تونل را بیرون از هر منطقه میگذارد در حالی که خود رابط سالم به نظر میرسد. یک رابط سالم بدون سیاست، سختترین حالتی است که میتوان تشخیص داد.
آن را در یک منطقه بگذارید، سپس به آن رو به جلو عبور دهید
منطقهٔ دیوار آتش جایی است که سیاست در آن زندگی میکند: input، output، forward و masquerade. تونلی که در هیچ منطقهای نیست با پیشفرضهایی اداره میشود که شما انتخاب نکردهاید، و این بهندرت چیزی است که یک کلاینت روتر لازم دارد. بلوکهای زیر رابط را اعلام میکنند، آن را در یک منطقه میگذارند و به ترافیک شبکه محلی اجازهٔ ورود به آن منطقه را میدهند.
config interface 'vpn'
option device 'tun0'
option proto 'none'
config zone
option name 'vpn'
list network 'vpn'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
config forwarding
option src 'lan'
option dest 'vpn'
در نسخههای قدیمیتر از 21.02 همان خط رابط به شکل option ifname نوشته میشود، پس پیش از جایگذاری بررسی کنید فریمور نصبشده کدام شکل را تجزیه میکند. بلوک عبور همان اجازهای است که اصلاً به ترافیک شبکه محلی امکان استفاده از تونل را میدهد. بدون آن دستگاه بالا است، کلاینت متصل است و هیچ میزبان محلی به تونل نمیرسد. این رایجترین گزارش «متصل اما بدون اینترنت» در کلاینتهای روتر است.
masquerade در منطقهٔ VPN هر آدرس شبکه محلی را پیش از خروج بسته در آدرس تونل روتر جمع میکند. این نیاز به مسیر بازگشت به زیرشبکهٔ شما در طرف دور را برمیدارد.
اگر طرف دور از قبل شبکه محلی شما را مسیریابی میکند، خاموش کردن masquerade آدرسهای مبدأ را قابل مشاهده نگه میدارد و گزارشهای هر کلاینت را معنادار میکند. یکی را انتخاب کنید و بنویسید کدام، چون این دو انتخاب بعداً پرسشهای پشتیبانی متفاوتی تولید میکنند. برداشتن عبور پیشفرض از شبکه محلی به WAN تصمیمی جدا با پیامد خودش است. آن را بردارید و دسترسی اینترنت خود روتر هم با آن میرود.
اتصال بالادستی واقعی را در NAT نام ببرید
در فریموری که قاعدهٔ ترجمه دستی نوشته شده، فیلدی که خراب میشود رابط خروجی است. قاعدهای که vlan2 را نام میبرد وقتی نشست روی ppp0 پایان مییابد هیچ کاری نمیکند. قاعدهای کاملاً بدون رابط میتواند ترافیکی را ترجمه کند که باید خصوصی میماند. هیچیک از این دو خطا خود را اعلام نمیکند، چون تونل به کار خود ادامه میدهد.
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
در آن قاعده ppp0 را با رابطی از ip route یا فهرست رابطهای در حال اجرا جایگزین کنید، سپس وقتی یک میزبان محلی صفحهای بار میکند شمارنده را ببینید. روی روتری با یک ارائهدهنده، یک قاعدهٔ masquerade برای اتصال بالادستی معمولاً کافی است. قاعدهٔ دوم برای رابط تونل جایگزین اولی نیست.
سپس گزینههای کلاینت را اضافه کنید که تعیین میکنند چه چیزی وارد تونل میشود. دستور redirect-gateway ترافیک اینترنت کلاینت را از VPN عبور میدهد، و بدون آن تونل فقط مسیرهایی را حمل میکند که سرور هل میدهد. جدول مسیریابی حاصل را پیش از دست زدن به DNS بررسی کنید.
Wi-Fi را با جدول دومی تقسیم کنید
یک جدول مسیریابی نمیتواند دو پیشفرض نگه دارد. پس SSID دومی که باید تونل را دور بزند به زیرشبکهٔ خودش و جدول خودش نیاز دارد. به SSID تونلشده محدودهٔ خودش را بدهید، سپس فقط همان محدوده را با قاعدهای که جدول را انتخاب میکند به تونل بفرستید.
بستههای مسیریابی مبتنی بر سیاست در OpenWrt دقیقاً همین ترکیب را بیان میکنند. دستی هم کار میکند: با یک قاعدهٔ مبدأ و جدولی که پیشفرضش به دستگاه تونل اشاره میکند.
تقسیم را از هر دو شبکه بررسی کنید. کلاینت روی SSID تونلشده باید آدرس خروج VPN را نشان دهد، و کلاینت روی SSID عادی آدرس ارائهدهنده را. وقتی هر دو یکسان به نظر میرسند، قاعده با مبدأ اشتباه تطبیق مییابد یا جدول هرگز پرسیده نمیشود. پس از اتصال دوباره هم آزمایش کنید، چون قاعدهای که به نام رابط وابسته است وقتی دستگاه دوباره شمارهگذاری شود میشکند.
به ساعت و پرچم دستگاه مشکوک شوید
پرچم persist-tun دستگاه تونل را در طول راهاندازیهای دوباره سر جایش نگه میدارد. این به کار سرور میآید و کلاینتی را که وضعیتش باید از صفر ساخته شود گیج میکند. هنگام عیبیابی کلاینت روتر آن را بردارید، چون دستگاهی که از یک مذاکرهٔ ناموفق جان سالم به در میبرد پنهان میکند کدام گام واقعاً شکسته است. وقتی کلاینت بهطور مطمئن وصل شد آن را برگردانید، و نه پیشتر.
ساعت همان خرابی خاموش دیگر است. روتری بدون ساعت باتریدار از مبدأ زمان شروع میکند، یعنی بررسیهای گواهی شکست میخورند تا NTP برسد. مهرهای زمانی گزارش را پیش از دست زدن به گواهی با زمان واقعی مقایسه کنید، چون کلاینتی که یک دقیقه پس از بوت وصل میشود معمولاً منتظر همگامسازی زمان است.