.\" SPDX-License-Identifier: GPL-2.0-or-later .\" Copyright (c) 2020-2022 Red Hat GmbH .\" Author: Stefano Brivio .TH passt 1 .SH "نام (NAME)" .B passt \- اتصال شبکه‌ای حالت کاربری بدون امتیاز برای ماشین‌های مجازی .br .B pasta \- اتصال شبکه‌ای حالت کاربری بدون امتیاز برای فضاهای نام شبکه .SH "خلاصه دستور (SYNOPSIS)" .B passt [\fIگزینه\fR]... .br .B pasta [\fIگزینه\fR]... [\fIدستور\fR [\fIآرگومان\fR]...] .br .B pasta [\fIگزینه\fR]... \fIPID\fR .br .B pasta [\fIگزینه\fR]... \fB--netns\fR [\fIمسیر\fR|\fIنام\fR] .SH "توضیحات (DESCRIPTION)" .SS passt .B passt (\fIP\fRlug \fIA\fR \fIS\fRimple \fIS\fRocket \fIT\fRransport) اتصال شبکه‌ای کامل و شبه‌محلی را برای ماشین‌های مجازی در حالت کاربری (user-mode) و بدون نیاز به هیچ‌گونه قابلیت ویژه یا امتیازات دسترسی، فراهم می‌کند. صفحه داده (data plane) یک لایه ترجمه میان رابط شبکه مجازی لایه ۲ و سوکت‌های محلی لایه ۴ (TCP، UDP، ping) روی میزبان پیاده‌سازی می‌کند؛ به‌طوری که از دیدگاه شبکه، این تصور ایجاد می‌شود که فرآیندهای برنامه‌های موجود در ماشین مهمان مستقیماً روی میزبان محلی در حال اجرا هستند. پیاده‌سازی‌های داخلی ARP، DHCP، NDP و DHCPv6 به‌گونه‌ای طراحی شده‌اند که پیکربندی شبکه‌ای متناسب و کاملاً شبیه به پیکربندی بومی میزبان را در اختیار مهمان قرار دهند. با گزینه‌های پیش‌فرض، ماشین مهمان و میزبان آدرس‌های IP، مسیرها و پیوندهای درگاه (port bindings) را به اشتراک می‌گذارند. هدایت درگاه (Port forwarding) و ترجمه به سرویس‌های شبکه در حال اجرا در ماشین مهمان اجازه می‌دهد تا هم از میزبان‌های محلی و هم از راه دور در دسترس باشند. برخلاف \fBslirp4netns\fR(1)، ابزار \fBpasst\fR پشته کامل TCP را پیاده‌سازی نمی‌کند: لایه ترجمه TCP هیچ بافر داده باحفظ‌وضعیت (stateful) ندارد و با بازتاب دادن پارامترهای مشاهده‌شده یکی از طرفین (اندازه پنجره ازدحام، داده‌های تایید شده و غیره) به طرف مقابل عمل می‌کند. در حال حاضر تنها هایپروایزر پشتیبانی‌شده \fBqemu\fR(1) است که از طریق یک سوکت دامنه یونیکس (UNIX domain socket) به \fBpasst\fR متصل می‌شود. این قابلیت از نسخه 7.2 qemu به بعد پشتیبانی می‌شود. برای نسخه‌های قدیمی‌تر qemu، بسته کمکی \fBqrap\fR(1) را ببینید. .SS pasta .B pasta (\fIP\fRack \fIA\fR \fIS\fRubtle \fIT\fRap \fIA\fRbstraction) کارکردی معادل با فضاهای نام شبکه (network namespaces) را فراهم می‌کند، مشابه آنچه \fBpasst\fR برای ماشین‌های مجازی ارائه می‌دهد. اگر PID یا --netns مشخص شده باشد، \fBpasta\fR به یک فضای نام کاربر و شبکه موجود متصل می‌شود. در غیر این صورت، \fBpasta\fR یک فضای نام کاربر و شبکه جدید ایجاد کرده و دستور داده‌شده یا یک پوسته (shell) پیش‌فرض را در این بستر اجرا می‌کند. یک دستگاه \fItap\fR درون فضای نام شبکه ایجاد می‌شود تا اتصال شبکه را برقرار سازد. تنها برای ترافیک محلی TCP و UDP، ابزار \fBpasta\fR به دلایل کارایی و سرعت، یک مسیر میان‌بر (bypass path) پیاده‌سازی می‌کند که سوکت‌های لایه ۴ را مستقیماً میان فضاهای نام \fIinit\fR و هدف نگاشت می‌نماید. .SH "گزینه‌ها (OPTIONS)" مگر در مواردی که در ادامه قید شده باشد، \fBاگر گزینه‌های متناقض یا متعددی داده شوند، آخرین گزینه اعمال می‌شود.\fR .TP .BR \-d ", " \-\-debug خروجی با جزئیات کامل، عدم ثبت لاگ در ثبت‌کننده رویدادهای سیستم (system logger). .TP .BR \-\-trace خروجی با جزئیات فوق‌العاده بالا، نمایش تک‌تک بسته‌ها. گزینه \fB--debug\fR را نیز فعال می‌کند. .TP .BR \-\-stats " " \fIDELAY\fR نمایش آمار رویدادها با حداقل فاصله زمانی \fIDELAY\fR ثانیه میان به‌روزرسانی‌ها. اگر هیچ رویدادی رخ ندهد، آماری نمایش داده نمی‌شود. .TP .BR \-q ", " \-\-quiet پیام‌های اطلاعاتی چاپ نشوند. .TP .BR \-f ", " \-\-foreground عدم اجرا در پس‌زمینه. این بدان معناست که فرآیند پس از شروع به یک فضای نام PID مجزا منتقل نمی‌شود، زیرا خود PID نمی‌تواند تغییر کند. حالت پیش‌فرض، انشعاب به پس‌زمینه است. .TP .BR \-e ", " \-\-stderr " " (منسوخ‌شده) این گزینه هیچ تاثیری ندارد و صرفاً برای سازگاری با نسخه‌های پیشین حفظ شده است. توجه داشته باشید که این گزینه پیکربندی \fBمنسوخ شده\fR است و در نسخه‌های آینده حذف خواهد شد. .TP .BR \-l ", " \-\-log-file " " \fIPATH\fR ثبت گزارش‌ها در فایل \fIPATH\fR، و عدم ارسال به ثبات رویدادهای سیستم. مشخص کردن چندباره این گزینه منجر به ایجاد چندین فایل لاگ \fIنمی‌شود\fR: آخرین گزینه مشخص‌شده اعمال خواهد شد. .TP .BR \-\-log-size " " \fISIZE\fR محدود کردن اندازه فایل لاگ به \fISIZE\fR بایت. هنگامی که فایل لاگ پر شود، با حذف ورودی‌های قدیمی در ابتدای فایل، برای ورودی‌های جدید جا باز می‌شود. این محدودیت الزامی است. مقدار پیش‌فرض برابر با ۱۰۴۸۵۷۶ (۱ مگابایت) است. .TP .BR \-\-runas " " \fIUID\fR|\fIUID:GID\fR|\fILOGIN\fR|\fILOGIN:GROUP\fR تلاش برای تغییر هویت به UID داده‌شده و گروه متناظر (اگر UID داده شود)، یا به UID و GID داده‌شده در صورت تعیین هر دو. به عنوان جایگزین، می‌توان نام کاربری (login)، یا نام کاربری و نام گروه را ارسال کرد. این کار برای اجرا به امتیازات ویژه (یا UID موثر اولیه 0 یا قابلیت CAP_SETUID) نیاز دارد. در صورت اجرا به عنوان کاربر ریشه، پیش‌فرض تغییر به کاربر \fInobody\fR است. .TP .BR \-c ", " \-\-conf-path " " \fIpath " " (آزمایشی) مسیر سوکت کنترل و پیکربندی که توسط \fBpesto\fR(1) برای به‌روزرسانی پویای پیکربندی passt یا pasta استفاده می‌شود. .TP .BR \-h ", " \-\-help نمایش پیام راهنما و خروج. .TP .BR \-\-version نمایش نسخه و خروج. .TP .BR \-p ", " \-\-pcap " " \fIfile ضبط بسته‌های شبکه متصل به tap (یعنی سمت ماشین مهمان یا سمت فضای نام) در فایل \fIfile\fR با فرمت \fBpcap\fR. مشخص کردن چندباره این گزینه منجر به ایجاد چندین فایل ضبط بسته \fIنمی‌شود\fR: آخرین گزینه مشخص‌شده اعمال خواهد شد. .TP .BR \-P ", " \-\-pid " " \fIfile نوشتن PID خود در فایل \fIfile\fR پس از پایان مقداردهی اولیه، قبل از انشعاب به پس‌زمینه (در صورتی که برای چنین کاری تنظیم شده باشد). .TP .BR \-m ", " \-\-mtu " " \fImtu اختصاص مقدار \fImtu\fR از طریق DHCP (گزینه 26) و NDP (گزینه نوع 5). مقدار صفر اختصاص MTU را غیرفعال می‌کند. به‌طور پیش‌فرض، MTU اعلان‌شده برابر با ۶۵۵۲۰ بایت است، یعنی حداکثر MTU در 802.3 منهای طول هدر 802.3، گرد شده به ۳۲ بیت (کلمات IPv4). .TP .BR \-a ", " \-\-address " " \fIaddr\fR[/\fIprefix_len\fR] اختصاص \fIaddr\fR برای IPv4 از طریق DHCP (\fByiaddr\fR)، یا \fIaddr\fR از طریق DHCPv6 (گزینه 5) و یک پیشوند مبتنی بر \fIaddr\fR از طریق اعلان روتر NDP (گزینه نوع 3) برای یک \fIaddr\fR در IPv6. یک پیشوند اختیاری /\fIprefix_len\fR (۰-۳۲ برای IPv4، ۰-۱۲۸ برای IPv6) می‌تواند با نمادگذاری CIDR الحاق شود (مثلاً 192.0.2.1/24). این روش جایگزینی برای استفاده از گزینه \fB-n\fR، \fB--netmask\fR است. ترکیب نمادگذاری CIDR با \fB-n\fR منجر به خطا می‌شود. اگر با این روش به یک آدرس IPv6 طول پیشوند اختصاص داده شود، در نسخه فعلی کد با مقدار پیش‌فرض ۶۴ بازنویسی می‌شود. این گزینه می‌تواند از صفر (برای مقادیر پیش‌فرض) تا دو بار (یک‌بار برای IPv4، یک‌بار برای IPv6) مشخص شود. به‌طور پیش‌فرض، آدرس‌های اختصاص‌یافته IPv4 و IPv6 از رابط‌های میزبانی که دارای اولین مسیر پیش‌فرض برای نسخه IP مربوطه هستند گرفته می‌شوند. اگر مسیر پیش‌فرضی موجود نباشد و رابطی با هر مسیری برای نسخه IP مشخص وجود داشته باشد، اولین رابط از میان آن‌ها انتخاب خواهد شد. در صورتی که چنین رابطی برای نسخه IP مشخص وجود نداشته باشد، آدرس محلی پیوند (link-local) به نشانی 169.254.2.1 برای IPv4 اختصاص داده می‌شود و هیچ آدرس دیگری برای IPv6 تخصیص نخواهد یافت. .TP .BR \-n ", " \-\-netmask " " \fImask اختصاص ماسک شبکه IPv4 با مقدار \fImask\fR، بیان‌شده به‌صورت دهدهی نقطه‌دار یا تعداد بیت‌ها، از طریق DHCP (گزینه 1). همچنین می‌توان طول پیشوند را با استفاده از نمادگذاری CIDR همراه با گزینه \fB-a\fR، \fB--address\fR مشخص کرد (مثلاً \fB-a\fR 192.0.2.1/24). ترکیب \fB-n\fR با نمادگذاری CIDR منجر به خطا خواهد شد. اگر هیچ آدرسی مشخص نشده باشد، ماسک شبکه مرتبط با آدرس پذیرفته‌شده میزبان، در صورت وجود، استفاده می‌شود. اگر آدرسی مشخص شده باشد ولی بدون طول پیشوند باشد، ماسک شبکه بر اساس کلاس شبکه متناظر تعیین می‌گردد. در تمام موارد دیگر، ماسک شبکه با استفاده از طول پیشوند مشخص‌شده تعیین می‌شود. .TP .BR \-M ", " \-\-mac-addr " " \fIaddr استفاده از آدرس MAC مبدأ \fIaddr\fR هنگام برقراری ارتباط با ماشین مهمان یا فضای نام هدف. مقدار پیش‌فرض، آدرس MAC مدیریت‌شده محلی 9a:55:9a:55:9a:55 است. .TP .BR \-g ", " \-\-gateway " " \fIaddr اختصاص \fIaddr\fR برای IPv4 به عنوان دروازه پیش‌فرض (default gateway) از طریق DHCP (گزینه 3)، یا \fIaddr\fR برای IPv6 به عنوان مبدأ برای پیام‌های اعلان روتر NDP و DHCPv6. این گزینه می‌تواند از صفر (برای مقادیر پیش‌فرض) تا دو بار (یک‌بار برای IPv4، یک‌بار برای IPv6) مشخص شود. به‌طور پیش‌فرض، دروازه‌های IPv4 و IPv6 از رابط میزبانی که دارای اولین مسیر پیش‌فرض برای نسخه IP مربوطه است گرفته می‌شوند. اگر مسیر پیش‌فرض از نوع چندمسیره (multipath) باشد، دروازه اولین روتر گام‌بعدی (nexthop) بازگردانده‌شده توسط هسته خواهد بود که بیشترین وزن را در مجموعه مسیرها دارد. اگر هیچ مسیر پیش‌فرضی موجود نباشد و تنها یک رابط با هر نوع مسیری وجود داشته باشد، آن رابط انتخاب خواهد شد. در صورتی که چنین رابطی برای نسخه IP مشخص وجود نداشته باشد، آدرس محلی پیوند 169.254.2.2 برای IPv4 و آدرس محلی پیوند fe80::1 برای IPv6 استفاده خواهد شد. نکته: این آدرس‌ها همچنین به عنوان آدرس مبدأ برای بسته‌های ارسالی به ماشین مهمان یا فضای نام هدف که دارای آدرس مبدأ محلی یا loopback هستند استفاده می‌شوند، تا نگاشت ترافیک محلی به مهمان و فضای نام هدف امکان‌پذیر باشد. برای جزئیات بیشتر درباره این سازوکار، بخش \fBنکات (NOTES)\fR را در ادامه ببینید. .TP .BR \-i ", " \-\-interface " " \fIname استفاده از رابط میزبان \fIname\fR برای استخراج آدرس‌ها و مسیرها. حالت پیش‌فرض استفاده از رابط‌های مشخص‌شده با \fB--outbound-if4\fR و \fB--outbound-if6\fR، به ترتیب برای آدرس‌ها و مسیرهای IPv4 و IPv6 است. اگر رابطی مشخص نشود، رابط دارای اولین مسیرهای پیش‌فرض برای هر نسخه IP انتخاب می‌شود. اگر هیچ مسیر پیش‌فرضی موجود نباشد و فقط یک رابط با هر مسیری وجود داشته باشد، آن رابط انتخاب خواهد شد. در صورتی که چنین رابطی وجود نداشته باشد، رابط‌های میزبان برای اهداف تخصیص آدرس‌ها و مسیرها نادیده گرفته شده و در عوض از آدرس‌های محلی پیوند استفاده می‌شود. .TP .BR \-o ", " \-\-outbound " " \fIaddr استفاده از یک آدرس IPv4 \fIaddr\fR به عنوان آدرس مبدأ برای اتصالات خروجی TCP، جریان‌های UDP و درخواست‌های ICMP در IPv4، یا یک آدرس IPv6 \fIaddr\fR برای ارتباطات IPv6، از طریق متصل کردن سوکت‌های خروجی به آن. این گزینه می‌تواند از صفر (برای مقادیر پیش‌فرض) تا دو بار (یک‌بار برای IPv4، یک‌بار برای IPv6) مشخص شود. به‌طور پیش‌فرض، آدرس مبدأ توسط جدول‌های مسیریابی انتخاب می‌شود. .TP .BR \-\-outbound-if4 " " \fIname متصل کردن سوکت‌های خروجی IPv4 به رابط میزبان \fIname\fR، و استفاده از این رابط برای استخراج آدرس‌ها و مسیرهای IPv4 (مگر اینکه رابط دیگری از طریق \fB-i\fR، \fB--interface\fR مشخص شده باشد). به‌طور پیش‌فرض، رابط تعیین‌شده توسط مسیر پیش‌فرض انتخاب می‌شود. اگر هیچ مسیر پیش‌فرضی موجود نباشد و فقط یک رابط با هر مسیری وجود داشته باشد، آن رابط انتخاب خواهد شد. در صورت عدم وجود چنین رابطی، سوکت‌های خروجی به رابط خاصی متصل نخواهند شد. .TP .BR \-\-outbound-if6 " " \fIname متصل کردن سوکت‌های خروجی IPv6 به رابط میزبان \fIname\fR، و استفاده از این رابط برای استخراج آدرس‌ها و مسیرهای IPv6 (مگر اینکه رابط دیگری از طریق \fB-i\fR، \fB--interface\fR مشخص شده باشد). به‌طور پیش‌فرض، رابط تعیین‌شده توسط مسیر پیش‌فرض انتخاب می‌شود. اگر هیچ مسیر پیش‌فرضی موجود نباشد و فقط یک رابط با هر مسیری وجود داشته باشد، آن رابط انتخاب خواهد شد. در صورت عدم وجود چنین رابطی، سوکت‌های خروجی به رابط خاصی متصل نخواهند شد. .TP .BR \-D ", " \-\-dns " " \fIaddr دستور دادن به ماشین مهمان (از طریق DHCP، DHCPv6 یا NDP) برای استفاده از \fIaddr\fR (IPv4 یا IPv6) به عنوان کارساز نام (nameserver)، طبق پیکربندی (گزینه‌های \fB--no-dhcp-dns\fR و \fB--dhcp-dns\fR را ببینید)، به جای خواندن آدرس‌ها از \fI/etc/resolv.conf\fR. این گزینه می‌تواند چندین بار مشخص شود. تعیین \fB-D none\fR استفاده از آدرس‌های DNS را به‌طور کلی غیرفعال می‌کند. برخلاف آدرس‌های برگرفته از \fI/etc/resolv.conf\fR، آدرس \fIaddr\fR بدون بازنگاشت به مهمان داده می‌شود. به عنوان مثال \fB--dns 127.0.0.1\fR به مهمان دستور می‌دهد که از خود به عنوان کارساز نام استفاده کند، نه از میزبان. .TP .BR \-\-dns-forward " " \fIaddr نگاشت آدرس \fIaddr\fR (IPv4 یا IPv6) آن‌گونه که از سمت مهمان یا فضای نام دیده می‌شود، به کارساز نام (با نسخه IP مربوطه) که توسط گزینه \fB\-\-dns-host\fR تعیین شده است. تنها ترافیک UDP و TCP به پورت ۵۳ یا پورت ۸۵۳ نگاشت می‌شود. پاسخ‌ها با یک نگاشت معکوس بازگردانده می‌شوند. این گزینه می‌تواند از صفر تا دو بار (یک‌بار برای IPv4، یک‌بار برای IPv6) مشخص گردد. .TP .BR \-\-dns-host " " \fIaddr پیکربندی کارساز نام میزبان که پرس‌وجوهای ارسالی از مهمان یا فضای نام به آدرس \fB\-\-dns-forward\fR به آن هدایت خواهند شد. این گزینه می‌تواند از صفر تا دو بار (یک‌بار برای IPv4، یک‌بار برای IPv6) مشخص شود. به‌طور پیش‌فرض، اولین کارساز نام برگرفته از \fI/etc/resolv.conf\fR در میزبان است. .TP .BR \-S ", " \-\-search " " \fIlist استفاده از فهرست جداشده با فاصله \fIlist\fR برای مقاصد DHCP، DHCPv6 و NDP، به جای خواندن ورودی‌ها از \fI/etc/resolv.conf\fR. گزینه‌های \fB--no-dhcp-search\fR و \fB--dhcp-search\fR را ببینید. گزینه \fB--search none\fR فهرست جستجوی دامنه DNS را به‌طور کامل غیرفعال می‌کند (اگر نیاز دارید دامنه‌ای با نام "none" را جستجو کنید می‌توانید از \fB--search none.\fR استفاده کنید). .TP .BR \-\-no-dhcp-dns در حالت \fIpasst\fR، آدرس‌های IPv4 از طریق DHCP (گزینه 23) یا آدرس‌های IPv6 از طریق اعلان روتر NDP (گزینه نوع 25) و DHCPv6 (گزینه 23) به عنوان تحلیل‌گرهای DNS اختصاص داده نشوند. به‌طور پیش‌فرض، تمام آدرس‌های پیکربندی‌شده ارسال می‌شوند. .TP .BR \-\-dhcp-dns در حالت \fIpasta\fR، اختصاص آدرس‌های IPv4 از طریق DHCP (گزینه 23) یا آدرس‌های IPv6 از طریق اعلان روتر NDP (گزینه نوع 25) و DHCPv6 (گزینه 23) به عنوان تحلیل‌گرهای DNS. به‌طور پیش‌فرض، آدرس‌های پیکربندی‌شده، در صورت وجود، ارسال نمی‌شوند. .TP .BR \-\-no-dhcp-search در حالت \fIpasst\fR، آدرس‌های فهرست جستجوی دامنه DNS از طریق DHCP (گزینه 119)، از طریق اعلان روتر NDP (گزینه نوع 31) و DHCPv6 (گزینه 24) ارسال نشوند. به‌طور پیش‌فرض، فهرست جستجوی دامنه DNS حاصل از پیکربندی ارسال می‌شود. .TP .BR \-\-dhcp-search در حالت \fIpasta\fR، ارسال آدرس‌های فهرست جستجوی دامنه DNS از طریق DHCP (گزینه 119)، از طریق اعلان روتر NDP (گزینه نوع 31) و DHCPv6 (گزینه 24). به‌طور پیش‌فرض، فهرست جستجوی دامنه DNS حاصل از پیکربندی ارسال نمی‌شود. .TP .BR \-\-no-tcp غیرفعال کردن گرداننده پروتکل TCP. هیچ اتصال TCP در سمت میزبان پذیرفته نخواهد شد و بسته‌های TCP دریافتی از ماشین مهمان یا فضای نام هدف بدون هیچ هشداری دور ریخته می‌شوند. .TP .BR \-\-no-udp غیرفعال کردن گرداننده پروتکل UDP. هیچ ترافیک UDP از سمت میزبان هدایت نخواهد شد و بسته‌های UDP دریافتی از ماشین مهمان یا فضای نام هدف بدون هیچ هشداری دور ریخته می‌شوند. .TP .BR \-\-no-icmp غیرفعال کردن گرداننده پروتکل ICMP/ICMPv6. درخواست‌های ICMP و ICMPv6 دریافتی از ماشین مهمان یا فضای نام هدف بدون هیچ هشداری دور ریخته می‌شوند. گزینه \fB--no-ndp\fR را نیز در بر می‌گیرد. .TP .BR \-\-no-dhcp غیرفعال کردن کارساز DHCP. درخواست‌های کلاینت DHCP دریافتی از ماشین مهمان یا فضای نام هدف نادیده گرفته می‌شوند. در صورتی که هیچ دروازه‌ای روی مسیر پیش‌فرض IPv4 انتخاب‌شده وجود نداشته باشد، این گزینه به صورت ضمنی اعمال می‌شود. .TP .BR \-\-no-ndp غیرفعال کردن کشف همسایه (Neighbor Discovery). پیام‌های NDP دریافتی از مهمان یا فضای نام هدف نادیده گرفته می‌شوند. هیچ پیام NDP اولیه‌ای ارسال نخواهد شد. .TP .BR \-\-no-dhcpv6 غیرفعال کردن کارساز DHCPv6. درخواست‌های کلاینت DHCPv6 دریافتی از ماشین مهمان یا فضای نام هدف نادیده گرفته می‌شوند. .TP .BR \-\-no-ra غیرفعال کردن اعلان‌های روتر (Router Advertisements). تقاضاهای روتر (Router Solicitations) دریافتی از ماشین مهمان یا فضای نام هدف نادیده گرفته می‌شوند. .TP .BR \-\-freebind اجازه به مشخص کردن هر آدرس اتصال (binding address) برای گزینه‌های \fB-t\fR و \fB-u\fR. معمولاً آدرس‌های اتصال باید آدرس‌هایی باشند که در حال حاضر روی میزبان پیکربندی شده‌اند. با \fB\-\-freebind\fR، گزینه سوکت \fBIP_FREEBIND\fR یا \fBIPV6_FREEBIND\fR فعال شده و امکان استفاده از هر آدرسی را فراهم می‌کند. این گزینه معمولاً برای پیوند دادن آدرس‌هایی استفاده می‌شود که ممکن است در آینده روی میزبان پیکربندی شوند و در آن لحظه هدایت ترافیک بلافاصله شروع به کار خواهد کرد. .TP .BR \-\-map-host-loopback " " \fIaddr ترجمه \fIaddr\fR برای ارجاع به میزبان. بسته‌های ارسالی از مهمان به \fIaddr\fR به میزبان هدایت خواهند شد. در میزبان، چنین بسته‌هایی طوری به نظر می‌رسند که هم مبدأ و هم مقصد آن‌ها 127.0.0.1 یا ::1 است. اگر \fIaddr\fR برابر با 'none' باشد، هیچ آدرسی نگاشت نمی‌شود (این به معنی \fB--no-map-gw\fR است). تنها یک آدرس IPv4 و یک آدرس IPv6 می‌تواند ترجمه شود؛ اگر این گزینه چند بار مشخص شود، آخرین مورد اعمال می‌گردد. حالت پیش‌فرض، ترجمه آدرس دروازه پیش‌فرض مهمان است، مگر اینکه \fB--no-map-gw\fR مشخص شده باشد که در این صورت هیچ آدرسی نگاشت نمی‌شود. .TP .BR \-\-no-map-gw اتصالات TCP و ترافیک ردیابی‌نشده UDP که مقصد آن‌ها آدرس دروازه است، به میزبان بازنگاشت نشوند. در صورتی که هیچ دروازه‌ای روی مسیر پیش‌فرض انتخاب‌شده وجود نداشته باشد، یا برای هر یک از خانواده‌های آدرس فعال مسیر پیش‌فرضی موجود نباشد، این گزینه به صورت ضمنی اعمال می‌شود. .TP .BR \-\-chroot-fallback فعال کردن بازگشت به chroot() در صورتی که pivot_root() (که برای جابجایی به یک فایل‌سیستم خالی به منظور جداسازی دقیق‌تر استفاده می‌شود) با خطا مواجه شود. این گزینه برای یکپارچه‌سازی‌هایی که از tmpfs یا initramfs به عنوان فایل‌سیستم ریشه استفاده می‌کنند و pivot_root() در آن‌ها به دلیل خطای شناسه نامعتبر (EINVAL) قابل استفاده نیست، کاربرد دارد. به‌طور پیش‌فرض، قابلیت بازگشت غیرفعال است. اگر pivot_root() ناموفق باشد، کل فرآیند ایزوله‌سازی و sandbox با شکست مواجه می‌شود. .TP .BR \-\-map-guest-addr " " \fIaddr ترجمه \fIaddr\fR در مهمان به آدرسی برابر با آدرس اختصاص‌یافته به مهمان در میزبان. به این معنا که بسته‌های مهمان به \fIaddr\fR به آدرس اختصاص‌یافته به مهمان با \fB-a\fR، یا به طور پیش‌فرض به آدرس سراسری (global) میزبان هدایت خواهند شد. این کار به مهمان اجازه می‌دهد به سرویس‌های موجود روی آدرس سراسری میزبان دسترسی داشته باشد، حتی اگر آدرس خود مهمان آدرس میزبان را بپوشاند (shadow کند). اگر \fIaddr\fR برابر با 'none' باشد، هیچ آدرسی نگاشت نمی‌شود. تنها یک آدرس IPv4 و یک آدرس IPv6 قابل ترجمه هستند و اگر این گزینه چند بار مشخص شود، آخرین مورد برای هر نوع آدرس اعمال خواهد شد. به‌طور پیش‌فرض، نگاشت همان‌طور که برای گزینه \-\-map-host-loopback توضیح داده شد انجام می‌شود. .TP .BR \-4 ", " \-\-ipv4-only فعال کردن عملکرد فقط IPv4. ترافیک IPv6 نادیده گرفته خواهد شد. به‌طور پیش‌فرض، عملکرد IPv6 تا زمانی که حداقل یک مسیر IPv6 و یک آدرس رابط روی یک رابط میزبان مشخص پیکربندی شده باشد، فعال است. .TP .BR \-6 ", " \-\-ipv6-only فعال کردن عملکرد فقط IPv6. ترافیک IPv4 نادیده گرفته خواهد شد. به‌طور پیش‌فرض، عملکرد IPv4 تا زمانی که حداقل یک مسیر IPv4 و یک آدرس رابط روی یک رابط میزبان مشخص پیکربندی شده باشد، فعال است. .TP .BR \-H ", " \-\-hostname " " \fIname نام میزبان (hostname) برای پیکربندی روی کلاینت. ارسال \fIname\fR به عنوان گزینه 12 در DHCP (hostname). .TP .BR \-\-fqdn " " \fIname نام کامل دامنه (FQDN) برای پیکربندی روی کلاینت. ارسال \fIname\fR به عنوان Client FQDN: گزینه 81 در DHCP و گزینه 39 در DHCPv6. .TP .BR \-t ", " \-\-tcp-ports " " \fIspec پیکربندی هدایت درگاه TCP به مهمان یا فضای نام. \fIspec\fR می‌تواند یکی از موارد زیر باشد: .RS .TP .BR none عدم هدایت هیچ درگاهی یا .TP [\fIaddress\fR[\fB%\fR\fIinterface\fR]\fB/\fR]\fIports\fR ... درگاه‌ها برای هدایت. به‌صورت اختیاری، یک آدرس شنود مشخص و نام رابط (از لینوکس 5.7 به بعد) می‌تواند تعیین شود. .RE \fIports\fR فهرستی از ورودی‌ها است که با کاما از هم جدا شده‌اند و می‌تواند هر یک از موارد زیر باشد: .TP \fIfirst\fR[\fB-\fR\fIlast\fR][\fB:\fR[\fItoaddr\fR\fB/\fR]\fItofirst\fR[\fB-\fR\fItolast\fR]] .TP \fIfirst\fR[\fB-\fR\fIlast\fR][\fB:\fR\fItoaddr\fR] بازه شمول (Include range). هدایت شماره پورت‌های میان \fIfirst\fR و \fIlast\fR (شامل هر دو) به پورت‌های میان \fItofirst\fR و \fItolast\fR روی آدرس \fItoaddr\fR. اگر \fItoaddr\fR حذف شود، آدرس مهمان یا فضای نام به‌طور خودکار تعیین می‌شود. اگر \fItofirst\fR و \fItolast\fR حذف شوند، برابر با همان مقادیر \fIfirst\fR و \fIlast\fR فرض می‌شوند. اگر \fIlast\fR حذف شود، برابر با \fIfirst\fR در نظر گرفته می‌شود. .TP \fB~\fR\fIfirst\fR[\fB-\fR\fIlast\fR] بازه عدم شمول (Exclude range). عدم هدایت شماره پورت‌های بین \fIfirst\fR و \fIlast\fR. این گزینه بر بازه‌های شمول اولویت دارد. .TP .BR all\fR[\fB:\fItoaddr\fR] هدایت تمام پورت‌های متصل‌نشده و غیرموقت (non-ephemeral) که تحت پوشش بازه‌های عدم شمول فوق نیستند، بر اساس مجوزها و قابلیت‌های فعلی، به پورت‌های متناظر روی آدرس \fItoaddr\fR. اگر \fItoaddr\fR حذف شود، آدرس مهمان یا فضای نام به‌طور خودکار تعیین می‌شود. برای پورت‌های پایین (کمتر از ۱۰۲۴)، بخش \fBنکات (NOTES)\fR را ببینید. برای پورت‌های غیرقابل‌دسترس هیچ خطایی گزارش نمی‌شود، مگر اینکه هیچ پورتی اصلاً امکان هدایت نداشته باشد. .TP .BR auto تنها برای \fBpasta\fR. تنها پورت‌هایی از مجموعه مشخص‌شده را هدایت کن که پورت‌های هدف در فضای نام متصل (bound) شده باشند. فهرست پورت‌ها به صورت دوره‌ای (هر یک ثانیه) از سوکت‌های شنود ارائه‌شده توسط \fI/proc/net/tcp\fR و \fI/proc/net/tcp6\fR استخراج می‌شود، \fBproc\fR(5) را ببینید. .RE مشخص کردن بازه‌های عدم شمول به تنهایی به این معناست که تمام پورت‌های غیرموقت دیگر هدایت می‌شوند. تعیین نکردن هیچ بازه‌ای معادل با '\fBall\fR' است. در این حالت، برای پورت‌های غیرقابل دسترس هیچ خطایی گزارش نمی‌شود، مگر اینکه هیچ پورتی قابل هدایت نباشد. مثال‌ها: .RS .TP -t all هدایت تمام پورت‌های متصل‌نشده و غیرموقت طبق قابلیت‌های فعلی به پورت متناظر در ماشین مهمان یا فضای نام .TP -t ::1/all برای آدرس محلی ::1، هدایت تمام پورت‌های متصل‌نشده و غیرموقت بر اساس قابلیت‌های فعلی .TP -t 22 هدایت پورت محلی 22 به پورت 22 در ماشین مهمان یا فضای نام .TP -t 22:23 هدایت پورت محلی 22 به پورت 23 در ماشین مهمان یا فضای نام .TP -t 22,25 هدایت پورت‌های محلی 22 و 25 به پورت‌های 22 و 25 در ماشین مهمان یا فضای نام .TP -t 22-80 هدایت پورت‌های محلی بین 22 و 80 به پورت‌های متناظر در ماشین مهمان یا فضای نام .TP -t 22-80:32-90 هدایت پورت‌های محلی بین 22 و 80 به پورت‌های بین 32 و 90 در ماشین مهمان یا فضای نام .TP -t 192.0.2.1/22 هدایت پورت محلی 22، متصل به 192.0.2.1، به پورت 22 در ماشین مهمان یا فضای نام .TP -t 192.0.2.1%eth0/22 هدایت پورت محلی 22، متصل به 192.0.2.1 و رابط eth0، به پورت 22 .TP -t %eth0/22 هدایت پورت محلی 22، متصل به هر آدرسی روی رابط eth0، به پورت 22 .TP -t 0.0.0.0/5000:192.0.2.5/6000 هدایت پورت محلی 5000، متصل به هر آدرس IPv4، به پورت 6000 روی آدرس 192.0.2.5. .TP -t 127.0.0.6/all:192.0.2.6 برای آدرس محلی 127.0.0.6، هدایت تمام پورت‌های متصل‌نشده و غیرموقت طبق قابلیت‌های فعلی به پورت متناظر روی 192.0.2.6. .TP -t 2000-5000,~3000-3010 هدایت پورت‌های محلی بین 2000 و 5000، به‌جز پورت‌های بین 3000 و 3010 .TP -t 192.0.2.1/20-30,~25 برای آدرس محلی 192.0.2.1، هدایت پورت‌های بین 20 و 24 و همچنین بین 26 و 30 .TP -t ~20000-20010 هدایت تمام پورت‌ها به ماشین مهمان، به‌جز بازه 20000 تا 20010 .TP -t auto هدایت خودکار هر پورتی که در فضای نام متصل شده باشد .TP -t ::1/auto هدایت خودکار هر پورتی که در فضای نام متصل شده باشد، با شنود فقط روی آدرس محلی ::1 .TP -t 8000-8010,auto هدایت پورت‌ها در بازه 8000-8010 تنها در صورتی که در فضای نام متصل شده باشند .RE حالت پیش‌فرض برای \fBpasst\fR برابر با \fBnone\fR و برای \fBpasta\fR برابر با \fBauto\fR است. .RE .TP .BR \-u ", " \-\-udp-ports " " \fIspec پیکربندی هدایت پورت UDP به ماشین مهمان. پارامتر \fIspec\fR همانند آنچه برای TCP در بالا توضیح داده شد عمل می‌کند. نکته: مگر در صورتی که بازنویسی شود، پورت‌های UDP با شماره‌های متناظر با پورت‌های هدایت‌شده TCP نیز بدون هیچ‌گونه ترجمه پورتی هدایت می‌شوند. پورت‌های متصل به IPv6 نیز برای IPv4 هدایت خواهند شد. حالت پیش‌فرض برای \fBpasst\fR برابر با \fBnone\fR و برای \fBpasta\fR برابر با \fBauto\fR است. .SS گزینه‌های اختصاصی \fBpasst\fR .TP .BR \-s ", " \-\-socket-path ", " \-\-socket " " \fIpath مسیر سوکت دامنه یونیکس (UNIX domain socket) مورداستفاده توسط \fBqemu\fR(1) برای اتصال به \fBpasst\fR. حالت پیش‌فرض، بررسی یک سوکت آزاد، بدون پذیرش اتصالات، از \fI/tmp/passt_1.socket\fR تا \fI/tmp/passt_64.socket\fR است. .TP .BR \-\-vhost-user فعال‌سازی vhost-user. سوکت دستور vhost-user توسط \fB--socket\fR فراهم می‌شود. .TP .BR \-\-print-capabilities چاپ قابلیت‌های back-end در قالب فرمت JSON، تنها برای حالت vhost-user معنی‌دار است. .TP .BR \-\-repair-path " " \fIpath مسیر سوکت دامنه یونیکس مورداستفاده توسط ابزار کمکی \fBpasst-repair\fR(1) برای اتصال به \fBpasst\fR به منظور تنظیم یا پاک کردن گزینه TCP_REPAIR روی سوکت‌ها، در حین مهاجرت (migration). گزینه \fB--repair-path none\fR این رابط را غیرفعال می‌کند (اگر نیاز دارید یک مسیر سوکت به نام "none" تعیین کنید، می‌توانید پیشوند \fI./\fR را به مسیر اضافه کنید). حالت پیش‌فرض، فقط برای حالت \-\-vhost-user، افزودن پسوند \fI.repair\fR به مسیر انتخاب‌شده برای سوکت دامنه یونیکس هایپروایزر است. اگر در حالت \-\-vhost-user نباشد هیچ سوکتی ایجاد نمی‌شود. .TP .BR \-\-migrate-exit " " (منسوخ‌شده) خروج پس از اتمام مهاجرت به عنوان مبدأ. به‌طور پیش‌فرض، \fBpasst\fR در حال اجرا باقی می‌ماند و ماشین مهمان مهاجرت‌کرده می‌تواند به استفاده از اتصال خود ادامه دهد، یا یک مهمان جدید متصل شود. توجه داشته باشید که این گزینه پیکربندی \fBمنسوخ شده\fR است و در نسخه بعدی حذف خواهد شد. انتظار نمی‌رود هیچ کاربردی داشته باشد و صرفاً نشان‌دهنده یک رفتار قدیمی است. اگر کاربردی برای این گزینه دارید، به بخش \fBگزارش باگ‌ها (REPORTING BUGS)\fR در ادامه مراجعه فرمایید. .TP .BR \-\-migrate-no-linger " " (منسوخ‌شده) بستن سوکت‌های TCP روی نمونه مبدأ به محض اتمام مهاجرت. به‌طور پیش‌فرض، سوکت‌ها باز نگه داشته می‌شوند و رویدادهای روی سوکت‌های داده نادیده گرفته می‌شوند تا هرگونه پیام دیگری که پس از مهاجرت مبدأ به سوکت‌ها می‌رسد نادیده گرفته شود تا در صورت دریافت داده پس از مهاجرت، از بازنشانی اتصال (connection resets) جلوگیری شود. توجه داشته باشید که این گزینه پیکربندی \fBمنسوخ شده\fR است و در نسخه بعدی حذف خواهد شد. انتظار نمی‌رود هیچ کاربردی داشته باشد و صرفاً نشان‌دهنده یک رفتار قدیمی است. اگر کاربردی برای این گزینه دارید، به بخش \fBگزارش باگ‌ها (REPORTING BUGS)\fR در ادامه مراجعه فرمایید. .TP .BR \-F ", " \-\-fd " " \fIFD ارسال یک سوکت از قبل بازشده و متصل به \fBpasst\fR. معمولاً سوکت در فرآیند والد باز می‌شود و \fBpasst\fR هنگام اجرا به عنوان فرآیند فرزند، آن را به ارث می‌برد. این امکان به فرآیند والد اجازه می‌دهد سوکت‌ها را با استفاده از یک خانواده آدرس دیگر یا نیازمند به امتیازات ویژه باز کند. این گزینه پس از بسته شدن سوکت، رفتاری مشابه گزینه \-\-one-off را به همراه دارد. .TP .BR \-1 ", " \-\-one-off خروج پس از مدیریت یک اتصال تک‌کلاینت؛ به محض اینکه کلاینت سوکت را ببندد، یا به محض اینکه با خطای سوکت مواجه شویم. \fBنکته\fR: این گزینه پس از اتمام مهاجرت \fBpasst\fR به عنوان مبدأ هیچ تاثیری ندارد، زیرا در آن صورت، خروج سوکت‌ها را برای اتصالات فعال خواهد بست که به نوبه خود در صورت دریافت هرگونه داده بعدی باعث بازنشانی اتصال می‌شود. توضیحات گزینه \fI\-\-migrate-no-linger\fR را نیز ببینید. .SS گزینه‌های اختصاصی \fBpasta\fR .TP .BR \-I ", " \-\-ns-ifname " " \fIname نام رابط tap که باید در فضای نام هدف ایجاد شود. به‌طور پیش‌فرض، نام رابط همانند نام رابط خارجی و قابل مسیریابی استفاده می‌شود. اگر چنین رابطی وجود نداشته باشد، از نام \fItap0\fR استفاده خواهد شد. .TP .BR \-T ", " \-\-tcp-ns " " \fIspec پیکربندی هدایت درگاه TCP از فضای نام هدف به فضای نام init. پارامتر \fIspec\fR همانند آنچه در بالا برای TCP توضیح داده شد تعریف می‌شود. مقدار پیش‌فرض \fBauto\fR است. .TP .BR \-U ", " \-\-udp-ns " " \fIspec پیکربندی هدایت درگاه UDP از فضای نام هدف به فضای نام init. پارامتر \fIspec\fR همانند آنچه در بالا برای UDP توضیح داده شد تعریف می‌شود. مقدار پیش‌فرض \fBauto\fR است. .TP .BR \-\-host-lo-to-ns-lo در صورت تعیین، اتصالاتی که با \fB\-t\fR یا \fB\-u\fR به یک آدرس loopback میزبان هدایت می‌شوند، به همان آدرس loopback در فضای نام تحویل داده خواهند شد. بدون این گزینه، چنین اتصالاتی به آدرس عمومی فضای نام هدایت می‌شوند. این گزینه با \fB--no-splice\fR ناسازگار است. .TP .BR \-\-userns " " \fIspec فضای نام کاربری هدف برای پیوستن، به صورت یک مسیر. اگر PID داده شود بدون این گزینه، فضای نام کاربری متناظر با همان فرآیند استفاده خواهد شد. .TP .BR \-\-netns " " \fIspec فضای نام شبکه هدف برای پیوستن، به صورت یک مسیر یا یک نام. یک نام مشابه با \fBip-netns(8)\fR به عنوان معادل مسیری در \fI/run/netns\fR در نظر گرفته می‌شود. این گزینه نمی‌تواند همراه با یک PID مشخص شود. .TP .BR \-\-netns-only فقط به یک فضای نام شبکه هدف بپیوند، نه یک فضای نام کاربری، و برای اهداف ایزوله‌سازی (sandboxing) نیز فضای نام کاربری جدید ایجاد نکن. در صورتی که PATH یا NAME بدون \-\-userns داده شوند، این گزینه به صورت ضمنی فعال است. .TP .BR \-\-no-netns-quit پس از حذف مرجع فضای نام هدف، از برنامه خارج نشو. بدون این گزینه، اگر فضای نام شبکه هدف به سیستم‌فایل متصل (bound) باشد و مسیر داده‌شده حذف شود، یا اگر فضای نام شبکه هدف با یک ورودی procfs نشان داده شده باشد و آن ورودی حذف گردد (که نشان‌دهنده پایان فرآیند با PID داده‌شده است)، \fBpasta\fR خاتمه خواهد یافت. .TP .BR \-\-config-net پیکربندی شبکه در فضای نام: تنظیم آدرس‌ها و مسیرها طبق پیکربندی یا برگرفته از میزبان، و فعال‌سازی رابط tap. .TP .BR \-\-no-copy-routes " " (منسوخ‌شده) همراه با \-\-config-net، از کپی کردن تمام مسیرهای مرتبط با رابطی که آدرس‌ها و مسیرها را از آن می‌گیریم خودداری کن: فقط دروازه پیش‌فرض را تنظیم کن. به صورت ضمنی توسط -g, \-\-gateway، فقط برای نسخه IP مربوطه فعال می‌شود. حالت پیش‌فرض، کپی کردن تمامی ورودی‌های مسیریابی از رابط موجود در فضای نام بیرونی به فضای نام هدف، با تبدیل ویژگی رابط خروجی به رابط خروجی درون فضای نام است. توجه داشته باشید که این گزینه پیکربندی \fBمنسوخ شده\fR است و در نسخه بعدی حذف خواهد شد. انتظار نمی‌رود هیچ کاربردی داشته باشد و صرفاً نشان‌دهنده یک رفتار قدیمی است. اگر کاربردی برای این گزینه دارید، به بخش \fBگزارش باگ‌ها (REPORTING BUGS)\fR در ادامه مراجعه فرمایید. .TP .BR \-\-no-copy-addrs " " (منسوخ‌شده) همراه با \-\-config-net، از کپی کردن تمام آدرس‌های مرتبط با رابطی که آدرس‌ها و مسیرها را از آن می‌گیریم خودداری کن: تنها یک آدرس را تنظیم کن. به صورت ضمنی توسط \-a, \-\-address، فقط برای نسخه IP مربوطه فعال می‌شود. حالت پیش‌فرض، کپی کردن تمام آدرس‌ها (به‌جز آدرس‌های link-local) از رابط فضای نام بیرونی به فضای نام هدف است. توجه داشته باشید که این گزینه پیکربندی \fBمنسوخ شده\fR است و در نسخه بعدی حذف خواهد شد. انتظار نمی‌رود هیچ کاربردی داشته باشد و صرفاً نشان‌دهنده یک رفتار قدیمی است. اگر کاربردی برای این گزینه دارید، به بخش \fBگزارش باگ‌ها (REPORTING BUGS)\fR در ادامه مراجعه فرمایید. .TP .BR \-\-ns-mac-addr " " \fIaddr پیکربندی آدرس MAC با مقدار \fIaddr\fR روی رابط tap در فضای نام. حالت پیش‌فرض واگذاری به درایور tap است تا یک آدرس سخت‌افزاری شبه‌تصادفی بسازد. .TP .BR \-\-no-splice غیرفعال کردن مسیر میان‌بر برای ترافیک ورودی و محلی. برای جزئیات بیشتر، بخش \fBمدیریت ترافیک محلی در pasta\fR را در \fBنکات (NOTES)\fR ببینید. .TP .BR \-\-splice-only هیچ دستگاه tap در فضای نام ایجاد نکن. در این حالت، \fIpasta\fR فقط ترافیک loopback را میان فضاهای نام هدایت می‌کند. .SH "مثال‌ها (EXAMPLES)" .SS \fBpasta .BR "ایجاد و استفاده از یک فضای نام کاربر و شبکه جدید و متصل" .RS .nf $ iperf3 -s -D $ pasta --config-net # ip address show 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host proto kernel_lo valid_lft forever preferred_lft forever 2: enp9s0: mtu 65520 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether be:16:49:5a:65:dc brd ff:ff:ff:ff:ff:ff inet 88.198.0.164/27 brd 88.198.0.191 scope global noprefixroute enp9s0 valid_lft forever preferred_lft forever inet6 2a01:4f8:222:904::2/64 scope global nodad valid_lft forever preferred_lft forever inet6 fe80::bc16:49ff:fe5a:65dc/64 scope link nodad proto kernel_ll valid_lft forever preferred_lft forever # ip route show default via 88.198.0.161 dev enp9s0 proto dhcp metric 1002 88.198.0.160/27 dev enp9s0 proto dhcp scope link metric 1002 # ip -6 route show 2a01:4f8:222:904::/64 dev enp9s0 proto kernel metric 256 pref medium fe80::/64 dev enp9s0 proto kernel metric 256 pref medium default via fe80::1 dev enp9s0 metric 1024 onlink pref medium # iperf3 -c 127.0.0.1 -t1 Connecting to host 127.0.0.1, port 5201 [ 5] local 127.0.0.1 port 59112 connected to 127.0.0.1 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 3.89 GBytes 33.4 Gbits/sec 0 2.62 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-1.00 sec 3.89 GBytes 33.4 Gbits/sec 0 sender [ 5] 0.00-1.00 sec 3.89 GBytes 33.4 Gbits/sec receiver iperf Done. # iperf3 -c ::1 -t1 Connecting to host ::1, port 5201 [ 5] local ::1 port 49138 connected to ::1 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 4.32 GBytes 37.0 Gbits/sec 0 1.06 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-1.00 sec 4.32 GBytes 37.0 Gbits/sec 0 sender [ 5] 0.00-1.00 sec 4.32 GBytes 37.0 Gbits/sec receiver iperf Done. # ping -nc1 -4 spaghetti.pizza PING spaghetti.pizza (5.161.47.86) 56(84) bytes of data. 64 bytes from 5.161.47.86: icmp_seq=1 ttl=255 time=99.4 ms --- spaghetti.pizza ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 99.433/99.433/99.433/0.000 ms # ping -nc1 -6 spaghetti.pizza PING spaghetti.pizza (2a01:4f8:1c1e:d6f1::1) 56 data bytes 64 bytes from 2a01:4f8:1c1e:d6f1::1: icmp_seq=1 ttl=255 time=3.11 ms --- spaghetti.pizza ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 3.110/3.110/3.110/0.000 ms .fi .RE .BR "اتصال به یک فضای نام کاربر و شبکه موجود" .RS .nf $ unshare -rUn # echo $$ 1295969 .fi .BR "[از یک ترمینال دیگر]" .nf $ pasta --config-net 1295969 Template interface: enp9s0 (IPv4), enp9s0 (IPv6) Namespace interface: enp9s0 MAC: host: 9a:55:9a:55:9a:55 NAT to host 127.0.0.1: 88.198.0.161 DHCP: assign: 88.198.0.164 mask: 255.255.255.224 router: 88.198.0.161 DNS: 185.12.64.1 185.12.64.2 NAT to host ::1: fe80::1 NDP/DHCPv6: assign: 2a01:4f8:222:904::2 router: fe80::1 our link-local: fe80::1 Inbound forwarding rules (HOST): TCP [*]:1-32767 => 1-32767 (best effort) (auto-scan) TCP [*]:61000-65535 => 61000-65535 (best effort) (auto-scan) UDP [*]:1-32767 => 1-32767 (best effort) (auto-scan) UDP [*]:61000-65535 => 61000-65535 (best effort) (auto-scan) Outbound forwarding rules (SPLICE): TCP [*]%lo:1-32767 => 1-32767 (best effort) (auto-scan) TCP [*]%lo:61000-65535 => 61000-65535 (best effort) (auto-scan) UDP [*]%lo:1-32767 => 1-32767 (best effort) (auto-scan) UDP [*]%lo:61000-65535 => 61000-65535 (best effort) (auto-scan) .fi .BR "[بازگشت به ترمینال اصلی]" .nf # ip address show 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host proto kernel_lo valid_lft forever preferred_lft forever 2: enp9s0: mtu 65520 qdisc fq_codel state UNKNOWN group default qlen 1000 link/ether 9a:44:5e:54:d3:2c brd ff:ff:ff:ff:ff:ff inet 88.198.0.164/27 brd 88.198.0.191 scope global noprefixroute enp9s0 valid_lft forever preferred_lft forever inet6 2a01:4f8:222:904::2/64 scope global nodad valid_lft forever preferred_lft forever inet6 fe80::9844:5eff:fe54:d32c/64 scope link nodad proto kernel_ll valid_lft forever preferred_lft forever .fi .RE .SS \fBpasst .BR "راه‌اندازی و اتصال ماشین مهمان با هدایت پایه درگاه" .RS .nf $ passt -f -t 2222:22 UNIX domain socket bound at /tmp/passt_1.socket No IPv6 nameserver available for NDP/DHCPv6 Template interface: enp9s0 (IPv4), enp9s0 (IPv6) MAC: host: 9a:55:9a:55:9a:55 NAT to host 127.0.0.1: 88.198.0.161 DHCP: assign: 88.198.0.164 mask: 255.255.255.224 router: 88.198.0.161 DNS: 185.12.64.1 185.12.64.2 NAT to host ::1: fe80::1 NDP/DHCPv6: assign: 2a01:4f8:222:904::2 router: fe80::1 our link-local: fe80::1 Inbound forwarding rules (HOST): TCP [*]:2222 => 22 You can now start qemu (>= 7.2, with commit 13c6be96618c): kvm ... -device virtio-net-pci,netdev=s -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket .fi .BR "[از یک ترمینال دیگر]" .nf $ qemu-system-x86_64 -m 128 test.qcow2 -display none -nodefaults -nographic -device virtio-net-pci,netdev=s -netdev stream,id=s,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket .fi .BR "[بازگشت به ترمینال اصلی]" .nf accepted connection from PID 1301736 New guest MAC address observed: 52:54:00:12:34:56 DHCP: offer to discover from 52:54:00:12:34:56 DHCP: ack to request from 52:54:00:12:34:56 NDP: received RS, sending RA .fi .BR "[از یک ترمینال دیگر]" .nf $ ssh -p 2222 root@localhost root@localhost's password: .fi .BR "[...]" .nf # ip address show 1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff inet 88.198.0.164/27 scope global eth0 valid_lft forever preferred_lft forever inet6 2a01:4f8:222:904:5054:ff:fe12:3456/64 scope global dynamic flags 100 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe12:3456/64 scope link valid_lft forever preferred_lft forever .fi .RE .SH "نکات (NOTES)" .SS مدیریت ترافیک با آدرس‌های مبدأ و مقصد Loopback هر دو ابزار \fBpasst\fR و \fBpasta\fR بسته به پیکربندی می‌توانند روی پورت‌هایی با آدرس loopback (شامل 127.0.0.0/8 یا ::1) متصل شوند. آدرس‌های مبدأ یا مقصد loopback باید پیش از تحویل بسته‌ها به ماشین مهمان یا فضای نام هدف تغییر داده شوند: اکثر سیستم‌عامل‌ها بسته‌های دریافتی با آدرس‌های loopback روی رابط‌های غیر-loopback را دور می‌ریزند، و همچنین برای مهمان یا فضای نام هدف غیرممکن خواهد بود که پاسخ‌ها را به عقب بازگردانند. برای سهولت، آدرس مبدأ روی این بسته‌ها به آدرس مشخص‌شده توسط گزینه \fB\-\-map-host-loopback\fR ترجمه می‌شود (با برخی استثناها در حالت pasta، بخش بعدی را ببینید). اگر این گزینه مشخص نشده باشد، این مقدار به صورت پیش‌فرض به آدرس دروازه پیش‌فرض IPv4 یا IPv6 (در صورت وجود) نسبت داده می‌شود -- چرا که مشخص است این آدرس یک آدرس معتبر و موجود روی همان زیرشبکه (subnet) است. اگر \fB\-\-no-map-gw\fR یا \fB\-\-map-host-loopback none\fR مشخص شده باشند، این ترجمه غیرفعال شده و بسته‌های حاوی آدرس loopback به سادگی دور ریخته می‌شوند. آدرس‌های مقصد loopback به آدرس خارجی مشاهده‌شده ماشین مهمان یا فضای نام هدف ترجمه می‌شوند. برای IPv6، اگر آدرس مبدأ ترجمه‌شده یک آدرس link-local باشد، از آدرس link-local مشاهده‌شده استفاده می‌شود، در غیر این صورت از آدرس سراسری مشاهده‌شده استفاده خواهد شد. هم برای IPv4 و هم برای IPv6، اگر هنوز هیچ آدرسی مشاهده نشده باشد، آدرس‌های پیکربندی‌شده در عوض استفاده خواهند شد. به عنوان مثال، اگر \fBpasst\fR یا \fBpasta\fR اتصالی از 127.0.0.1 با مقصد 127.0.0.10 دریافت کنند، و دروازه پیش‌فرض IPv4 برابر با 192.0.2.1 باشد، در حالی که آخرین آدرس مبدأ مشاهده‌شده از مهمان یا فضای نام 192.0.2.2 باشد، این ارتباط به اتصالی از 192.0.2.1 به 192.0.2.2 ترجمه خواهد شد. به همین ترتیب، برای ترافیکی که از مهمان یا فضای نام می‌آید، بسته‌هایی که آدرس مقصد آن‌ها با آدرس \fB\-\-map-host-loopback\fR مطابقت دارد، آدرس مقصدشان به یک آدرس loopback ترجمه خواهد شد. به عنوان یک استثنا، ترافیک شناسایی‌شده به عنوان DNS که ابتدا به آدرس \fB\-\-map-host-loopback\fR ارسال شده باشد، در صورتی که این آدرس با آدرس تحلیل‌گر روی میزبان مطابقت داشته باشد، به loopback ترجمه \fBنمی‌شود\fR، بلکه همانند حالتی مدیریت می‌شود که به عنوان آدرس \-\-dns-forward مشخص شده باشد (اگر چنین گزینه‌ای داده نشده باشد). در حالت رایجی که دروازه میزبان به عنوان تحلیل‌گر نیز عمل می‌کند، این کار مانع از آن می‌شود که نگاشت میزبان خود دروازه/تحلیل‌گر را بپوشاند. .SS مدیریت ترافیک محلی در pasta بسته به پیکربندی، ابزار \fBpasta\fR می‌تواند به پورت‌های محلی در فضای نام init، در فضای نام هدف یا هر دو متصل شود و اتصالات و بسته‌ها را به پورت‌های متناظر در فضای نام دیگر هدایت کند. برای جلوگیری از سربار غیرضروری، این اتصالات و بسته‌ها از طریق دستگاه tap متصل‌کننده فضاهای نام هدایت نمی‌شوند: \fBpasta\fR یک سوکت در فضای نام مقصد، با پروتکل لایه ۴ منطبق، ایجاد می‌کند و از آن برای هدایت داده‌های محلی استفاده می‌نماید. برای TCP، داده‌ها بین سوکت مبدأ و سوکت جدید با استفاده از فراخوان سیستمی \fBsplice\fR(2) هدایت می‌شوند و برای UDP، یک جفت فراخوان سیستمی \fBrecvmmsg\fR(2) و \fBsendmmsg\fR(2) انتقال بسته‌ها را انجام می‌دهند. از آنجا که اتصال سوکت‌ها به آدرس‌های خارجی ممکن نیست، این مسیر میان‌بر تنها برای اتصالات و ترافیک محلی کاربرد دارد. این موضوع همچنین به این معنی است که ترجمه آدرس اندکی با حالت passt تفاوت دارد. اتصالات از loopback به loopback روی میزبان، طوری به نظر می‌رسند که گویی از آدرس عمومی فضای نام هدف در ماشین مهمان می‌آیند، مگر اینکه \fB\-\-host-lo-to-ns-lo\fR مشخص شده باشد که در آن صورت به نظر می‌رسد از loopback درون فضای نام نیز می‌آیند. این رفتار اخیر پیش‌تر رفتار پیش‌فرض بود، اما معمولاً نامطلوب است، زیرا می‌تواند ناخواسته سرویس‌های محلی فضای نام را در معرض دید میزبان قرار دهد. .SS اتصال به پورت‌های با شماره پایین (پورت‌های شناخته‌شده یا سیستمی، تا ۱۰۲۳) اگر پیکربندی هدایت درگاه نیازمند اتصال به پورت‌هایی با شماره کمتر از ۱۰۲۴ باشد، ابزارهای \fBpasst\fR و \fBpasta\fR تلاش می‌کنند به آن‌ها متصل شوند، اما این کار با شکست مواجه خواهد شد، مگر اینکه یکی از موارد زیر برقرار باشد: .IP \(bu 2 پارامتر sysctl مربوط به \fIsys.net.ipv4.ip_unprivileged_port_start\fR روی شماره پایین‌ترین پورتی که \fBpasst\fR و \fBpasta\fR نیاز دارند تنظیم شود. به عنوان مثال، با کاربر root: .nf sysctl -w net.ipv4.ip_unprivileged_port_start=443 .fi \fBنکته\fR: این روش توصیه‌شده برای فعال‌سازی اتصال \fBpasst\fR و \fBpasta\fR به پورت‌های زیر ۱۰۲۴ است. .IP \(bu یا قابلیت \fICAP_NET_BIND_SERVICE\fR در لینوکس اعطا شود، \fBservices\fR(5) و \fBcapabilities\fR(7) را ببینید. این روش به طور کلی \fBتوصیه نمی‌شود\fR، زیرا \fBpasst\fR و \fBpasta\fR ممکن است به عنوان برداری برای استفاده موثر از این قابلیت توسط فرآیند دیگری مورد استفاده قرار گیرند. با این حال، اگر محیط شما به اندازه کافی توسط یک LSM (ماژول امنیت لینوکس) مانند \fIAppArmor\fR، \fISELinux\fR، \fISmack\fR یا \fITOMOYO\fR کنترل می‌شود، و هیچ فرآیند دیگری نمی‌تواند به واسطه این قابلیت با آن‌ها تعامل داشته باشد، اعطای این قابلیت تنها به \fBpasst\fR و \fBpasta\fR می‌تواند به طور موثری مانع از بهره‌برداری سایر فرآیندها از آن شود. توجه داشته باشید که این روش برای تشخیص و هدایت خودکار درگاه‌ها با \fBpasta\fR کار نخواهد کرد، زیرا \fBpasta\fR در زمان اجرا این قابلیت را واگذار (رها) می‌کند. برای اعطای این قابلیت، می‌توانید به عنوان کاربر root دستور زیر را اجرا کنید: .nf for p in $(which passt passt.avx2); do setcap 'cap_net_bind_service=+ep' "${p}" done .fi .RE .SS سوکت‌های اکو ICMP/ICMPv6 درخواست‌های اکو (Echo requests) پروتکل‌های ICMP و ICMPv6 ارسالی از مهمان یا فضای نام هدف با استفاده از به اصطلاح سوکت‌های "ping" که در لینوکس 2.6.30 معرفی شدند مدیریت می‌شوند. برای حفظ شناسه اصلی (به RFC 792، صفحه 14 برای ICMP، و RFC 4443، بخش 4.1 برای ICMPv6 مراجعه کنید)، \fBpasst\fR و \fBpasta\fR تلاش می‌کنند این سوکت‌ها را با استفاده از شناسه مبدأ مشاهده‌شده به عنوان "port" متصل کنند -- که با شناسه‌های Echo برای سوکت‌های "ping" مطابقت دارد. از آنجا که خطاهای \fBbind\fR(2) با سیاست‌های امنیتی به شدت محدودکننده SELinux دیده شده است، یک سازوکار جایگزین شناسه‌های مختلف را به سوکت‌های مختلف نگاشت می‌کند، و شناسه‌ها در پاسخ‌ها به شناسه اصلی درخواست بازگردانده می‌شوند. با این حال، اگر \fBbind\fR(2) با شکست مواجه شود و سازوکار جایگزین استفاده شود، درخواست‌های اکو با شناسه‌های متفاوت، هرچند یکتا، هدایت خواهند شد. برای کارکرد درخواست‌های اکو ICMP و ICMPv6، پارامتر \fIping_group_range\fR باید شامل PID مربوط به \fBpasst\fR یا \fBpasta\fR باشد، \fBicmp\fR(7) را ببینید. .SS رابط loopback و pasta هنگامی که \fBpasta\fR به یک فضای نام موجود متصل می‌شود، یا زمانی که یک فضای نام جدید ایجاد می‌کند، اطمینان حاصل خواهد کرد که رابط loopback به نام \fIlo\fR نیز بالا بیاید (UP شود). این کار برای اتصال پورت‌ها با استفاده از آدرس loopback در فضای نام الزامی است. .SS پنجره ارسال TCP و \fITCP_INFO\fB پیش از لینوکس 5.3 برای همگام‌سازی پنجره ارسال TCP از سوکت‌های لایه ۴ میزبان با پارامترهای TCP اعلان‌شده در سگمنت‌های TCP ارسال‌شده روی رابط لایه ۲، ابزارهای \fBpasst\fR و \fBpasta\fR به طور منظم اندازه پنجره ارسال مشاهده‌شده توسط هسته روی سوکت مربوطه را با استفاده از گزینه سوکت \fITCP_INFO\fR استعلام می‌کنند، \fBtcp\fR(7) را ببینید. پیش از لینوکس 5.3، یعنی پیش از کامیت 8f7baad7f035 هسته لینوکس ("tcp: Add snd_wnd to TCP_INFO")، پنجره ارسال (فیلد \fIsnd_wnd\fR) در دسترس نیست. اگر پنجره ارسال قابل استعلام نباشد، همیشه به عنوان اندازه بافر ارسال فعلی به ماشین مهمان یا فضای نام هدف اعلان خواهد شد. این موضوع ممکن است بر توان عملیاتی اتصالات TCP تأثیر بگذارد. .SS حالت محلی برای سیستم‌های قطع‌شده از شبکه اگر \fBpasst\fR و \fBpasta\fR نتوانند رابط میزبانی با آدرس پیکربندی‌شده برای یک نسخه IP خاص به جز آدرس‌های loopback پیدا کنند، مسلماً تلاشی برای استخراج آدرس‌ها یا مسیرها از میزبان برای آن نسخه IP انجام نخواهند داد. در این حالت، مگر در صورت پیکربندی خلاف آن، آدرس محلی پیوند IPv4 به نشانی 169.254.2.1 را به ماشین مهمان یا فضای نام هدف اختصاص می‌دهند، و هیچ آدرس IPv6ای اختصاص نخواهد یافت. مفهوم آدرس IPv6 ماشین مهمان یا فضای نام هدف از اولین آدرس link-local مشاهده‌شده استخراج می‌شود. دروازه‌های پیش‌فرض به عنوان آدرس محلی پیوند 169.254.2.2 برای IPv4 و آدرس محلی پیوند fe80::1 برای IPv6 اختصاص داده می‌شوند. .SH "محدودیت‌ها (LIMITATIONS)" در حال حاضر، پروکسی IGMP/MLD (بر اساس RFC 4605) و پشتیبانی از SCTP (بر اساس RFC 4960) پیاده‌سازی نشده‌اند. پروتکل TCP Selective Acknowledgment (بر اساس RFC 2018)، و همچنین حفاظت در برابر دنباله‌های پیچیده (PAWS) و اندازه‌گیری زمان رفت و برگشت (RTTM) که هر دو در RFC 7232 توصیف شده‌اند، در حال حاضر پیاده‌سازی نشده‌اند. .SH "نویسندگان (AUTHORS)" Stefano Brivio , David Gibson . .SH "گزارش باگ‌ها (REPORTING BUGS)" لطفاً مشکلات را در سامانه ردیابی باگ در https://passt.top/passt/bugs گزارش دهید، یا پیامی به لیست پستی passt-user@passt.top ارسال نمایید، https://passt.top/passt/lists را ببینید. .SH "حق نشر (COPYRIGHT)" حق نشر (c) 2020-2022 Red Hat GmbH. ابزارهای \fBpasst\fR و \fBpasta\fR نرم‌افزار آزاد هستند: شما می‌توانید آن‌ها را تحت شرایط مجوز عمومی همگانی گنو (GNU GPL) منتشرشده توسط بنیاد نرم‌افزارهای آزاد؛ نسخه ۲ یا (به انتخاب خودتان) هر نسخه بعدی، بازتوزیع کرده و/یا تغییر دهید. .SH "همچنین ببینید (SEE ALSO)" \fBnamespaces\fR(7), \fBqemu\fR(1), \fBqrap\fR(1), \fBslirp4netns\fR(1). مستندات سطح بالا در نشانی https://passt.top/passt/about در دسترس است.