برخورد با tun0 و پروتکل VPN به‌عنوان یک چیز واحد، مردم را به گزارش اشتباه می‌فرستد. رابط یک مرز محلی است که برنامه‌ای در فضای کاربر از آن طریق بسته‌های IP را با هسته مبادله می‌کند. پروتکل همان کاری است که آن برنامه پس از دریافت بسته‌ها با آن‌ها می‌کند: انتقال، احراز هویت، رمزگذاری و یک همتا. ساخت دستگاه هیچ‌یک از این‌ها را انتخاب نمی‌کند.

دو مؤلفه، یک مسیر بسته

هسته یک بسته IP را در دستگاه می‌نویسد و برنامه آن را از یک توصیفگر فایل می‌خواند. در جهت دیگر برنامه بسته‌ای را برمی‌گرداند و هسته آن را طوری مسیریابی می‌کند که گویی روی یک رابط واقعی رسیده است. TUN حامل IP است، در حالی که TAP قاب‌های Ethernet را حمل می‌کند. خواندن بسته در آن مرز، قاب‌بندی را نشان می‌دهد و دستگاه دقیقاً برای همین است.

هر چیزی فراتر از آن مرز کار برنامه است. دو برنامه می‌توانند از همان مفهوم رابط استفاده کنند و کارهای کاملاً متفاوتی با بسته‌ها انجام دهند. خود دستگاه هیچ نظری درباره آنچه در ادامه می‌آید ندارد. توصیفگر فایل تنها دستگیره‌ای است که برنامه در سمت هسته دارد.

دستگاه را بسازید و سپس مرز را بپایید

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

sudo ip tuntap add dev tun9 mode tun user alice
ip -d link show tun9

جزئیات پیوند نوع دستگاه و مالک متصل را نشان می‌دهد. اگر هیچ فرایندی آن را باز نگه ندارد، بسته‌هایی که در آن نوشته می‌شوند جایی نمی‌روند. دستگاهی بدون فرایند متصل می‌تواند در فهرست پیوندها سالم به نظر برسد در حالی که چیزی را عبور نمی‌دهد.

آنچه نام رابط نمی‌تواند وعده دهد

نام رابط هیچ چیزی درباره رمزگذاری یا احراز هویت نمی‌گوید. یک برنامه می‌تواند بسته‌ها را در TLS، در پروتکل اختصاصی، در IPsec یا در هیچ‌چیز بپیچد. انتخاب TUN به‌جای TAP قاب‌بندی را در مرز تغییر می‌دهد، نه طراحی امنیتی را. انتخاب قاب‌بندی واقعی است و بسیار کوچک‌تر از پرسش امنیتی است.

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

اصلاح را با مرحله شکست‌خورده تطبیق دهید

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

ip -d link show tun0
journalctl -u openvpn-client@corp --since '10 min ago'

اگر دستگاه وجود دارد و فرایندی آن را نگه می‌دارد، مرز محلی کار می‌کند و مشکل دورتر است. اگر دستگاه نیست، هیچ مقدار بررسی اعتبارنامه کمکی نمی‌کند. مرحله‌ای که می‌توانید نام ببرید، مرحله‌ای است که می‌توانید آزمایش کنید. مستندات TUN/TAP مرز و مدل دستگاه را توصیف می‌کند.

مقالات مرتبط