تغییر نام Interface شبکه
توسط: vahit
زمانی که کرنل لینوکس بوت میشه، به هر کارت شبکه بر حسب ترتیبی که اونها رو پیدا میکنه یک اسم اختصاص میده (eth0, wlan0 و …). ترتیب شناسایی interfaceها در کرنلهای مختلف متفاوت هست بنابراین ممکنه اسامی اونها در ورژنهای متفاوت تغییر کنه، این کار ممکنه مشکلات زیادی ایجاد کنه و حتی مجبور بشیم جای کابلها رو عوض کنیم ولی راه درستتر این هست که ما اسم اینترفیسها رو ثابت نگه داریم یا حتی تغییر بدیم. برای این کار از دستور nameif استفاده میکنیم. کار این دستور همینطور که گفتم تغییر نام interfaceهای شبکه بر اساس آدرس mac اون هست. nameif این کار رو توسط فایلی به اسم mactab که در مسیر etc/ قرار داره انجام میده، به طوری که نام جدید به وسیلهی آدرس سختافزاری (mac address) برای هر دیوایس مشخص میشه. یعنی هر خط این فایل برای یک دیوایس هست که شامل دو فیلد هست، فیلد اوّل نام جدید و فیلد دوّم آدرس mac دیوایس مورد نظر هست. برای مثال من برای ثابت نگه داشتن نام کارت وایرلس لپتاپم از این mactab استفاده میکنم:
1 |
wlan0 08:3e:8e:aa:XX:XX |
تا اینجای کار مشکلی وجود نداره ولی این نام فقط تا راهاندازی مجدد دوام داره بنابراین بعد از هر راهاندازی من نیاز دارم که این دستور رو دوباره اجرا کنم. پس بهتره موقع راهاندازی سیستم خودش اجرا بشه. در سیستمهایی که از init استفاده میکنن میشه به راحتی از فایل rc.local استفاده کرد ولی برای من که آرچم از systemd استفاده میکنه بهتره یه سرویس برای جایگزینی این فایل درست کنم. برای این کار چند قدم کافیه:
قدم اوّل اینه که من فایلم رو با قابلیت اجرا شدن ایجاد کنم و دستوراتی رو که میخوام اجرا بشن رو توش بنویسم. پس فایل usr/local/sbin/rc.local/ رو با محتویات زیر ایجاد میکنم:
1 2 3 |
#!/bin/bash nameif |
و سطح دسترسیش رو تغییر میدم که بتونه اجرا بشه:
1 |
chmod +x /usr/local/sbin/rc.local |
قدم دوّم این هست که یک سرویس برای این فایل بنویسم. پس فایل /etc/systemd/system/rc-local.servis رو با محتویات زیر ایجاد میکنم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description=/etc/rc.local compatibility ConditionFileIsExecutale=/usr/local/sbin/rc.local [Service] Type=oneshot ExecStart=/usr/local/sbin/rc.local TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target |
قدم سوّم و قدم نهایی این هست که این سرویس رو فعال کنم تا موقع راهاندازی سیستم اجرا بشه:
1 |
# systemctl enable rc-local |
از این به بعد وقتی سیستم رو روشن میکنم systemd سرویس rc-local رو اجرا میکنه و باعث میشه دستور nameif اجرا بشه و چون من فایل mactab رو دارم، اسم کارت وایرلسم از هر چیزی که باشه یه wlan0 تغییر پیدا میکنه که البته کارت وایرلس من رو هم بر حسب آدرس macش پیدا میکنه.