IP-NETNS(8) Linux IP-NETNS(8)

ip-netns - مدیریت فضاهای نام شبکه (network namespaces)


ip [ OPTIONS ] netns { COMMAND | help }

ip netns [ list ]

ip netns add NETNSNAME

ip netns attach NETNSNAME PID

ip [-all] netns del [ NETNSNAME ]

ip netns set NETNSNAME NETNSID

NETNSID := auto | POSITIVE-INT

ip netns identify [ PID ]

ip netns pids NETNSNAME

ip [-all] netns exec [ NETNSNAME ] command...

ip netns monitor

ip netns list-id [ target-nsid POSITIVE-INT ] [ nsid POSITIVE-INT ]

یک فضای نام شبکه (network namespace) از نظر منطقی نسخه‌ای دیگر از پشته شبکه (network stack) است، با مسیرها، قوانین دیوار آتش (firewall) و دستگاه‌های شبکه اختصاصی خود.

به‌طور پیش‌فرض، یک پردازش فضای نام شبکه خود را از والدش به ارث می‌برد. در ابتدا، همه پردازش‌ها فضای نام شبکه پیش‌فرض یکسانی را از پردازش init به اشتراک می‌گذارند.

طبق قرارداد، یک فضای نام شبکه نام‌گذاری‌شده شیئی در مسیر /run/netns/NAME است که قابلیت باز شدن دارد. توصیف‌گر فایل (file descriptor) حاصل از باز کردن /run/netns/NAME به فضای نام شبکه مشخص‌شده اشاره می‌کند. باز نگه‌داشتن این توصیف‌گر فایل، فضای نام شبکه را زنده نگه می‌دارد. این توصیف‌گر فایل می‌تواند به همراه فراخوان سیستمی setns(2) جهت تغییر فضای نام شبکه مرتبط با یک تسک استفاده شود.

برای برنامه‌هایی که از فضاهای نام شبکه آگاه هستند، قرارداد بر این است که فایل‌های پیکربندی سراسری شبکه ابتدا در مسیر /etc/netns/NAME/ و سپس در /etc/ جستجو شوند. به عنوان مثال، اگر نسخه متفاوتی از /etc/resolv.conf را برای یک فضای نام شبکه که جهت ایزوله‌سازی وی‌پی‌ان شما به کار می‌رود می‌خواهید، می‌توانید آن را به صورت /etc/netns/myvpn/resolv.conf نام‌گذاری کنید.

دستور ip netns exec رسیدگی به این قرارداد فایل‌های پیکربندی را برای برنامه‌های ناآگاه از فضای نام شبکه خودکار می‌کند؛ این کار از طریق ایجاد یک فضای نام سوارکردن (mount namespace) و bind-mount کردن تمام فایل‌های پیکربندی مختص به هر فضای نام شبکه در مکان سنتی آن‌ها در /etc صورت می‌گیرد.

این دستور تمام فضاهای نام شبکه موجود در /run/netns را نمایش می‌دهد.

اگر NAME در /run/netns در دسترس باشد، این دستور یک فضای نام شبکه جدید ایجاد کرده و NAME را به آن اختصاص می‌دهد.

اگر NAME در /run/netns در دسترس باشد، این دستور فضای نام شبکه مربوط به پردازش PID را به NAME متصل می‌کند، درست همان‌گونه که با ip netns ایجاد شده باشد.

اگر NAME در /run/netns موجود باشد، از حالت سوارشده خارج (umount) شده و نقطه اتصال حذف می‌گردد. اگر این آخرین کاربر فضای نام شبکه باشد، فضای نام شبکه آزاد خواهد شد و تمامی دستگاه‌های فیزیکی به فضای نام پیش‌فرض منتقل می‌شوند، در غیر این صورت فضای نام شبکه تا زمانی که هیچ کاربری نداشته باشد باقی می‌ماند. اگر نقطه اتصال در یک فضای نام سوارکردن دیگر در حال استفاده باشد، ممکن است ip netns delete با خطا مواجه شود.

اگر گزینه -all مشخص شده باشد، آن‌گاه تمام نام‌های فضاهای نام شبکه حذف خواهند شد.

این احتمال وجود دارد که دستگاه فیزیکی هنگام انتقال به یک netns و سپس حذف آن netns در حالی که پردازشی درون آن در حال اجرا است، موقتاً از دست برود:

$ ip netns add net0
$ ip link set dev eth0 netns net0
$ ip netns exec net0 SOME_PROCESS_IN_BACKGROUND
$ ip netns del net0
و eth0 تنها پس از خروج یا خاتمه یافتن (kill شدن) پردازش SOME_PROCESS_IN_BACKGROUND در netns پیش‌فرض پدیدار خواهد شد. برای جلوگیری از این حالت، پردازش‌های در حال اجرا در net0 باید پیش از حذف netns کشته شوند:
$ ip netns pids net0 | xargs kill
$ ip netns del net0

این دستور یک شناسه را به فضای نام شبکه همتا (peer) اختصاص می‌دهد. این شناسه تنها در فضای نام شبکه کنونی معتبر است. اگر کلیدواژه "auto" مشخص شود، یک nsid موجود و آزاد برگزیده خواهد شد. این شناسه توسط هسته در برخی پیام‌های netlink استفاده می‌شود. اگر زمانی که هسته به آن نیاز دارد شناسه‌ای اختصاص داده نشده باشد، هسته به صورت خودکار آن را اختصاص می‌دهد. پس از تخصیص، تغییر آن امکان‌پذیر نخواهد بود.

این دستور مسیر /run/netns را پیمایش کرده و تمام نام‌های فضای نام شبکه را برای فضای نام شبکه پردازش مشخص‌شده پیدا می‌کند؛ اگر PID مشخص نشود، از پردازش فعلی استفاده خواهد شد.

این دستور دایرکتوری /proc را پیمایش کرده و تمام پردازش‌هایی را که دارای این فضای نام شبکه نام‌گذاری‌شده به عنوان فضای نام شبکه اصلی خود هستند پیدا می‌کند.

این دستور به برنامه‌هایی که از فضای نام شبکه آگاه نیستند اجازه می‌دهد در محیطی به جز فضای نام شبکه پیش‌فرض اجرا شوند، در حالی که تمام پیکربندی‌های مربوط به فضای نام شبکه مشخص‌شده در مکان‌های سراسری مرسوم پدیدار می‌شوند. یک فضای نام شبکه و bind mountها به کار گرفته می‌شوند تا فایل‌ها را بدون تأثیرگذاری بر سایر پردازش‌ها، از مکان اختصاصی فضای نام شبکه به مکان‌های پیش‌فرض آن‌ها انتقال دهند.

اگر گزینه -all مشخص شده باشد، آن‌گاه cmd به‌صورت همگام بر روی هر یک از فضاهای نام شبکه نام‌گذاری‌شده اجرا می‌شود، حتی اگر cmd روی برخی از آن‌ها شکست بخورد. در هر بار اجرای cmd، نام فضای نام شبکه چاپ می‌شود.

این دستور رویدادهای افزودن و حذف نام‌های فضای نام شبکه را زیر نظر می‌گیرد و برای هر رویدادی که مشاهده می‌کند یک خط چاپ می‌نماید.

شناسه‌های فضای نام شبکه برای شناسایی یک فضای نام شبکه همتا استفاده می‌شوند. این دستور nsidهای فضای نام شبکه کنونی را نمایش می‌دهد و در صورت وجود، نام فضای نام متناظر iproute2 (از مسیر /run/netns) را ارائه می‌دهد.

گزینه target-nsid امکان نمایش nsidهای فضای نام شبکه مشخص‌شده را به جای فضای نام شبکه فعلی فراهم می‌کند. این target-nsid یک شناسه nsid از فضای نام شبکه فعلی است.

گزینه nsid امکان نمایش تنها همین nsid را فراهم می‌سازد. این یک nsid از فضای نام شبکه کنونی است. در ترکیب با گزینه target-nsid، تبدیل یک nsid مشخص از فضای نام شبکه فعلی به یک nsid در فضای نام شبکه target-nsid را امکان‌پذیر می‌سازد.

ip netns list
فهرست فضاهای نام شبکه نام‌گذاری‌شده کنونی را نمایش می‌دهد.
ip netns add vpn
یک فضای نام شبکه ایجاد کرده و نام آن را vpn می‌گذارد.
ip netns exec vpn ip link set lo up
رابط لوپ‌بک (loopback) را در فضای نام شبکه vpn فعال می‌کند.
ip netns add foo
ip netns add bar
ip netns set foo 12
ip netns set bar 13
ip -n foo netns set foo 22
ip -n foo netns set bar 23
ip -n bar netns set foo 32
ip -n bar netns set bar 33
ip netns list-id target-nsid 12
فهرست nsidهای مربوط به فضای نام شبکه foo را نمایش می‌دهد.
ip netns list-id target-nsid 12 nsid 13
شناسه nsid مربوط به bar را از فضای نام شبکه foo دریافت می‌کند (نتیجه ۲۳ خواهد بود).

ip(8)

صفحه راهنمای اصلی توسط Eric W. Biederman نوشته شده است.
بازبینی صفحه راهنما توسط Nicolas Dichtel <nicolas.dichtel@6wind.com> انجام شده است.

16 Jan 2013 iproute2