پرش به مطلب اصلی

TunDevice

📖 معرفی کلی

ویژگیمقدارتوضیح
نوع نودAdapter (دو‌جهته)ترافیک از هر دو سمت می‌تواند ارسال و دریافت شود؛ بسته به جایگاه آن در زنجیره
لایه شبکهلایه ۳کار با بسته‌ها (Packet) بدون تغییر اندازه آن‌ها
موقعیت در زنجیرهابتدای زنجیره یا انتهای زنجیرهفقط در ابتدای یا انتهای زنجیره قابل استفاده است
وابستگینود قبل/بعدبرای دریافت/ارسال داده ضروری است

این نود، یک دستگاه لایه ۳ سیستم‌عامل است.

برای لینوکس و ویندوز پیاده‌سازی شده است؛ روی اندروید نیز کار می‌کند اما نیاز به دسترسی روت دارد.

هدف اصلی این نود استفاده روی ویندوز و لینوکس است؛ در موبایل این کار به شیوه دیگری انجام می‌شود که خارج از بحث این سند است.

این نود یک دستگاه با نام و محدوده آی‌پی انتخابی می‌سازد که قابلیت ارسال و دریافت بسته به/از سیستم‌عامل را دارد.

توجه

این نود فقط از IPv4 پشتیبانی می‌کند؛ تمام بسته‌هایی که نسخه IP آن‌ها غیر از ۴ باشد رد می‌شوند.

نکات آموزشی تخصصی

وقتی یک دستگاه با این مشخصات بسازید:

10.10.0.1/24

این یعنی خود آی‌پی 10.10.0.1 متعلق به سیستم‌عامل است؛ اگر با این آی‌پی کار کنید یا حتی آن را پینگ بگیرید، واتروال اصلاً متوجه نمی‌شود.

یعنی:

ping 10.10.0.1

مشابه این است که بگویید:

ping 127.0.0.1

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

وقتی مثلاً این را اجرا کنید:

ping 10.10.0.2

بسته‌ای که توسط واتروال دریافت می‌شود دارای آی‌پی مبدأ = 10.10.0.1 و آی‌پی مقصد = 10.10.0.2 است.

سپس می‌توانید در ادامه زنجیره، آی‌پی‌ها را با استفاده از نود IpOverrider تغییر دهید و ترفندهای مختلف را با استفاده از نود IpManipulator اعمال کنید.

این نود یک آداپتر است؛ به زنجیره‌ها معنا می‌دهد. هم می‌تواند شروع‌کننده زنجیره باشد و هم پایان‌دهنده زنجیره.

دقت کنید

این نود هم می‌تواند در ابتدای زنجیره قرار گیرد و هم در انتها.

اگر در شروع زنجیره باشد

بسته‌های دریافتی به سمت راست (upstream) فرستاده می‌شوند و همچنین بسته‌هایی که از راست به چپ دریافت شوند، به سیستم‌عامل تحویل داده می‌شوند.

اگر در پایان زنجیره باشد

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

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

⚙️ راهنمای پیکربندی

این نود به این شکل تنظیم می‌شود:

{
"name": "node_name",
"type": "TunDevice",
"settings": {
"device-name": "wtun0",
"device-ip": "10.10.0.1/24",
"device-mtu": 1500
},
"next": "next_node_name"
}

پارامتر device-name

این پارامتر اجباری است و نام دستگاه را به سیستم‌عامل اعلام می‌کنید. می‌توانید دستگاه ساخته‌شده را با دستور زیر مشاهده کنید:

ip a
توجه

مهم است که این نام با دستگاه دیگری (چه در واتروال و چه در برنامه‌های دیگر سیستم‌عامل) یکی نباشد.

پارامتر device-ip

این پارامتر اجباری است. یک آی‌پی با ساب‌نت ماسک وارد کنید، مثلاً:

10.10.0.1/24
10.20.0.1/24
10.30.0.1/24
توجه

دقت کنید که محدوده آی‌پی‌ها با دستگاه دیگری تداخل نداشته باشد. این نود در حال حاضر فقط از IPv4 پشتیبانی می‌کند.

پارامتر device-mtu

این پارامتر اختیاری است؛ اگر مقداردهی نشود، از مقدار MTU که در فایل core.json داده‌اید استفاده می‌کند. اگر آنجا هم تنظیم نکرده باشید، مقدار پیش‌فرض 1500 است. ممکن است بخواهید این مقدار را کمتر از مقدار فعلی تنظیم کنید اگر پروتکل‌هایی اجرا می‌کنید که سربار بسته اضافه می‌کنند (مثل WireGuard).

نکته مهم

اگر در زنجیره از نود RawDevice استفاده کرده‌اید، به هیچ‌وجه MTU را در این نود تغییر ندهید و آن را برابر با MTU سیستم‌عامل قرار دهید.

یعنی یک‌بار در فایل core.json مقدار MTU کارت شبکه خود را به‌درستی وارد کنید و دیگر در نودهای TunDevice این مقدار را ست نکنید؛ زیرا نود RawDevice بسته‌ها را مستقیماً از کارت شبکه برمی‌دارد که MTU آن ثابت و غیرقابل تغییر است. اگر در اینجا MTU کمتری تعیین کرده باشید، سیستم‌عامل ممکن است بسته‌ها را قبول نکند.

نکته

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