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، واتروال این موضوع را بهطور کامل در لاگها گزارش میکند هر بار که قرار است بستهای نوشته شود؛ پس خواندن لاگها کمککننده است.