من یک بورد Raspberry Pi 4B دارم که از طریق کابل شبکه متصلش کردهم به لپتاپ تا یک LAN درست بشه. از این اتصال فقط برای گرفتن نشستهای SSH و VNC استفاده میکنم. پس لازمه که هم لپتاپ و هم SBC، از راه WiFi به اینترنت دسترسی پیدا کنن و اینترفیس Ethernet رو فقط برای شبکه شدن بین خودشون دو تا استفاده کنن. اما تا جایی که یادم میاد، سیستمهای لینوکسی همیشه اتصال eth رو به wlan ترجیح میدن و این قضیه باعث میشه هیچ کدومِ این دو تا دستگاه به اینترنت دسترسی نداشته باشن؛ با اینکه هر دو همزمان با اترنت، اتصال wlan فعال دارن و به مودم adsl متصلن. خلاصه اینکه آب در کوزه و این دو تا تشنهلبان میگردن!
یه راه حل واسه دور زدن مشکل و پاک کردن صورت مسأله هست. اونم اینه که از داخل لپتاپ، نوع اتصال سیمی رو روی Shared to other computers تنظیم کنم. اینطوری در واقع لپتاپ تبدیل به یه کارت شبکهی اکسترنال WiFi میشه و اینترنت رو از مودم میگیره و از طریق پورت اترنت با رزبری به اشتراک میذاره. اما وقتی روی رزبری چیپ وایفای وجود داره، چرا نباید بتونم ازش استفاده کنم؟! لپتاپ چه گناهی کرده که باید جور اون مینی کامپیوتر رو بکشه؟! اگه خواستم لپتاپ رو suspend کنم اما رزبری بیدار بمونه و روی شبکهی خونگی سرویسدهی کنه چی؟
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
اینجا یه روش سریع و ساده برای حل کردن اصولی این مشکل معرفی میکنم. بر پایهی سرویس NetworkManager.
دستور زیر مسیرهای فعال رو لیست میکنه.
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 wlan0
10.42.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0
میبینیم دو تا اینترفیس wlan0 و eth0 فعالن. چیزی که مهمه ستون Metricـه. این عدد مشخص میکنه که اولویت هر مسیر نسبت به بقیه چیه. هر چقدر این عدد کوچکتر، اولویت آن مسیر بالاتر.
الف) اتصالات رو لیست میکنیم:
$ nmcli connection
NAME UUID TYPE DEVICE
Wired 1698876f-321d-3065-a315-1d1f31082d89 ethernet eth0
543212345 7d225229-3658-4b0c-b2dc-d2d6c426c108 wifi wlan0
K30 Pro Zoom 65a9e297-1ba8-4e1f-877c-a346a23f5d8c wifi --
Xiaomi MI 6 436085a0-69c1-4909-a5ea-dee7d0471edd wifi --
۲ تا اتصال اول، هنگام اجرای فرمان فعال و ۲ تای آخر غیرفعال بودن (از قبل ذخیره شدهن).
ب) حالا با ابزار خط فرمانی سرویس NetworkManager اولویتها رو ویرایش میکنیم:
# nmcli connection edit 543212345
===| nmcli interactive connection editor |===
Editing existing '802-11-wireless' connection: '543212345'
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [<setting>.<prop>]' for detailed property description.
You may edit the following settings: connection, 802-11-wireless (wifi), 802-11-wireless-security (wifi-sec), 802-1x, ethtool, match, ipv4, ipv6, hostname, tc, proxy
nmcli> set ipv4.route-metric 90
nmcli> save
nmcli> quit
حالا Metric اتصال 543212345 مربوط به اینترفیس wlan0 تغییر کرده و شده 90. Metric اتصال Wired هم که از قبل 100 بود. پس برای هر تعداد اتصال دیگه که لازم باشه میتونیم همین مرحله رو تکرار کنیم.
پ) و تمام! لینوکس به شدت منطقی، بهینه و قدرتمنده:
# systemctl restart NetworkManager
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 90 0 0 wlan0
10.42.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 90 0 0 wlan0
من تنظیم بالا رو روی رزبری انجام دادم. حالا رزبری هم مستقیم از WiFi خودش استفاده میکنه و اتصال سیمی رو فقط وقتی لازم باشه وارد داستان میکنه.