কীভাবে লিনাক্সে নেটওয়ার্ক কার্ডের ক্রম পরিবর্তন করতে হবে (eth1 <-> eth0) change


20

সিস্টেম ইনস্টলেশন পরে নেটওয়ার্ক ইন্টারফেস ( eth1 <-> eth0 ) অদলবদল করার কোনও উপায় আছে কি ?

আমার ব্র্যান্ডের নতুন ডেবিয়ান 6.0 ইনস্টল করা পিসিআই নেটওয়ার্ক কার্ডকে " এথ 0 " হিসাবে এবং মাদারবোর্ডগুলি ইন্টিগ্রেটেড নেটওয়ার্ক ডিভাইসটিকে " এথ 1 " হিসাবে ডিফল্ট হিসাবে ইনস্টল করুন । সমস্যাটি হ'ল আমি সংহত ডিভাইসটি ডিফল্ট ( eth0 ) নেটওয়ার্ক ইন্টারফেস হিসাবে ব্যবহার করতে চাই ।

আমি ইতিমধ্যে সম্পাদিত:

/etc/udev/rules.d/70-persistent-net.rules

নামগুলি অদলবদল করতে এবং সবকিছু ঠিকঠাক বলে মনে হচ্ছে এবং নেটওয়ার্ক কাজ করছে তবে প্রোগ্রামগুলি এখনও পিসিআই নেটওয়ার্ক কার্ড (যা এখন " এথ 1 ") ডিফল্ট ইন্টারফেস হিসাবে ব্যবহার করার চেষ্টা করছে । উদাহরণস্বরূপ, আইফটপ এখন " eth1 " কে ডিফল্ট ডিভাইস হিসাবে ব্যবহার করার চেষ্টা করে কারণ এটি অদলবদলের আগে " eth0 " ব্যবহার করেছিল।

অ্যাপ্লিকেশনগুলি তাদের ইন্টারফেসের নামকরণ সত্ত্বেও ডিফল্ট ডিভাইস হিসাবে প্রথম পাওয়া ডিভাইসটি ব্যবহার করার চেষ্টা করছে বা ওএস কনফিগার করে এটি ঠিক করার কোনও উপায় আছে বলে এটি কি নিখুঁত কোনও সফ্টওয়্যার সমস্যা?


সম্পাদনা করুন: আমি ইফলিস্ট প্রিন্ট করার জন্য একটি ছোট অ্যাপ লিখেছিলাম এবং পিসিআই ডিভাইস ( eth1 ) " eth0 " এর আগে উপস্থিত হয়েছিল । ডিভাইস অর্ডার অদলবদল করার জন্য কোনও ধারণা


সম্পাদনা করুন: আমি একই সমস্যা সম্পর্কে একটি থ্রেড পেয়েছি এবং আমি তাদের প্রস্তাবিত সমস্ত কিছু চেষ্টা করেছি এবং "ভার্চুয়াল" নামগুলি অদলবদল করা ছাড়া সমাধানগুলির কোনওটিই কাজ করছে না।


কেবল লক্ষ্য করার জন্য, সম্পাদনা /etc/udev/rules.d/70-pers
depend

উত্তর:


18

আমি এখন আমার নিজের প্রশ্নের উত্তর দিচ্ছি কারণ অবশেষে আমি এই সমস্যার জন্য একটি সমাধান পেয়েছি।

আমি খুঁজে পেয়েছি যে ড্রাইভারগুলি আনলোড এবং তারপরে সঠিক ক্রমে লোড করে ডিভাইসগুলি পুনরায় অর্ডার করা সম্ভব।

প্রথম পদ্ধতি (ব্রুটফোর্স):

সুতরাং প্রথম যে পদ্ধতিটি আমি নিয়ে এসেছি তা হল init.d স্ক্রিপ্টের সাহায্যে ড্রাইভার পুনরায় লোড করা সহজ।

নিম্নলিখিত init স্ক্রিপ্টটি দেবিয়ান .0.০ এর জন্য তৈরি করা হয়েছে, তবে একই সূত্রটি যথাযথ init.d স্ক্রিপ্টগুলি ব্যবহার করে প্রায় কোনও বিতরণে কাজ করা উচিত।

#!/bin/sh -e

### BEGIN INIT INFO
# Provides:          reorder-nics
# Required-Start:
# Required-Stop:
# Default-Start:     S
# Default-Stop:
# Short-Description: Reloads the nics in correct order
### END INIT INFO

#
# This script should reload the nic drivers in corrected order.
# Basically it just unloads and then loads the drivers in different order.
#

echo "Reloading NICs!"

# unload the drivers
modprobe -r driver_0        # eth0 nic interface
modprobe -r driver_1        # eth1 nic interface

# load the drivers in corrected order
modprobe driver_1
modprobe driver_0

#EOF

তারপরে স্ক্রিপ্টটি অবশ্যই সঠিক রানলেভেল ডিরেক্টরিতে যুক্ত করা উচিত। এটি " আপডেট-আরসি.ডি " কমান্ডের সাহায্যে ডেবিয়ানে সহজেই করা যায় । উদাহরণ স্বরূপ:update-rc.d reorder-nics start S


দ্বিতীয় পদ্ধতি (আমার মনে হয় আরও ভাল):

আমি কিছুটা আরও মার্জিত উপায়ও পেয়েছি (কমপক্ষে দেবিয়ান এবং উবুন্টু সিস্টেমের জন্য)।

প্রথমে নিশ্চিত হয়ে নিন যে কার্নেল স্বয়ংক্রিয়ভাবে NIC ড্রাইভার লোড করে না। এটি একটি ব্ল্যাকলিস্ট ফাইল তৈরি করে করা যেতে পারে /etc/modprobe.d/। আমি " disable-nics.conf" নামে একটি ফাইল তৈরি করেছি । নোট করুন যে ফাইলগুলির /etc/modprobe.d/অবশ্যই .confপ্রত্যয় থাকতে হবে । এছাড়াও মডিউলগুলির নামকরণ /etc/modprobe.d/blacklist.confকার্নেলের দ্বারা মডিউলগুলির অটোলয়েডিংকে প্রভাবিত করে না, সুতরাং আপনাকে নিজের ফাইল তৈরি করতে হবে।

# Disable automatic loading of kernel driver modules
# Disable NIC drivers

blacklist driver_0     # eth0 by default
blacklist driver_1     # eth1 by default

তারপরে root হিসাবে ' Depmod -ae ' চালান

'সঙ্গে আপনার initrd পুনরায় নির্মাণ করা আপডেটের-initramfs -র -u '

এবং অবশেষে ড্রাইভারের নামগুলি সংশোধিত ক্রমে / ইত্যাদি / মডিউল ফাইলগুলিতে যুক্ত করুন।

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

# drivers in wanted order
driver_1    # this one should be loaded as eth0
driver_0    # this one should be loaded as eth1

পরবর্তী বুটের পরে পরিবর্তনগুলি কার্যকর হওয়া উচিত।

রিবুট যদিও প্রয়োজন হয় না; নিম্নলিখিত কমান্ডের সাহায্যে ডিভাইসগুলি স্যুইচ করা সহজ (মূল হিসাবে অবশ্যই):

modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0

সমাধানটি অনুসন্ধান করার সময় আমি কয়েকটি দরকারী লিঙ্ক পেয়েছি:


2
+1 আপনি অবশ্যই এটির জন্য একাধিক ভোটের বেশি প্রাপ্য।
বাহামাত

আমার অনুরূপ সমস্যা রয়েছে: আমার একটি সংহত এনআইসি রয়েছে, তারপরে মাঝে মাঝে আমি ভিপিএন প্রোগ্রাম পরিচালনা করি যা অন্য ইন্টারফেস তৈরি করে। ভিপিএন ইন্টারফেসটি সর্বদা অগ্রাধিকার গ্রহণ করে বলে মনে হয় তবে কেন তা আমি জানি না। আমি কেবল এটি খুব বিরল পরিস্থিতিতে ব্যবহার করা চাই (আমি ভিপিএন ইন্টারফেস নির্দিষ্ট করতে হবে এমন অ্যাপ্লিকেশনটি এটি চাই)। কোন ধারনা? ^ _ ^ আমি সম্ভবত খুব শীঘ্রই একটি নতুন প্রশ্ন পোস্ট করব।
সীমিত প্রায়শ্চিত্ত

2

netdev=প্রদত্ত ইন্টারফেসের সাথে প্রদত্ত আইআরসি-র সাথে সংযোগ স্থাপনের জন্য কার্নেলকে নির্দেশ দেওয়ার জন্য আপনি কার্নেল কমান্ড লাইন প্যারামিটারটি ব্যবহার করতে পারেন (গ্রাবের মধ্যে কার্নেলের সাথে এটি প্রেরণ করা প্রয়োজন):netdev=irq=2,name=eth0


1
আমি আমার বাক্সটি গ্রাব কনফিগারেশনের পরিবর্তনগুলি দিয়ে বুট করেছি এবং আমি এখনও অনেক অ্যাপ্লিকেশনগুলিতে ডিফল্ট ডিভাইস হিসাবে এথ 1 পাচ্ছি । আমি নেটওয়ার্কের তথ্য এবং জন্য dmesg আউটপুট চেক করা এবং এটা বলছেন যে ইন্টিগ্রেটেড এনআইসি এখনও 'হয়েছে , eth1 ifname যেমন': forcedeth 0000:00:04.0: ifname eth1, PHY OUI 0x57d @ 1, addr 40:40:00:40:40:40। এটি খুব গুরুতর সমস্যা নয় তবে এটি সত্যিই আমার গিয়ারগুলি গ্রাইন্ড করে কারণ সংহত 1 জিবি কার্ড এবং এটি ডিফল্ট ডিভাইস হওয়া উচিত।
অথাবস্কা ডিক

1
আমি এখন নেটওয়ার্ক ইন্টারফেসের নামগুলি পরিবর্তন করতে নামিফ ব্যবহার করার চেষ্টা করেছি তবে দেখে মনে হচ্ছে এটি উদেব যেমন করে। "রিয়েল" এনআইসির অর্ডারে কোনও পরিবর্তন হয়নি। আমি পিসিআই এনআইসি-র শারীরিক অবস্থান পরিবর্তন করার চেষ্টাও করেছি তবে এটি কোনওরকমই কার্যকর হয়নি। ইন্টিগ্রেটেড এনআইসির আইআরকিউ 22 এবং পিসিআই এনআইসির আইআরকিউ 17 রয়েছে তাই দেখে মনে হচ্ছে কার্নেল তাদের আইআরকিউ দ্বারা অর্ডার দিচ্ছে এবং ব্যবহারকারী কোনওভাবেই সেই সত্যটি পরিবর্তন করতে পারবেন না। কোন নতুন ধারণা?
অথাবস্কা ডিক

1

আপনাকে সম্ভবত প্রতিটি প্রভাবিত প্রোগ্রামের কনফিগারেশন ফাইলগুলিতে যেতে হবে এবং 'eth1' পরিবর্তন করে 'eth0' করতে হবে। এই জাতীয় প্রোগ্রামগুলি ডিফল্ট সেটআপ হয় যখন সেগুলি ইনস্টল করা হয় বা বর্তমানে সনাক্ত করা এনআইসির সাথে প্রথম চালানো হয়।

আমি লিনাক্সকে রাউটার হিসাবে ব্যবহার করি এবং স্ক্রিপ্টগুলি ব্যবহার করার সময় এই সমস্যাটি ছিল। আমি এখন একটা চমৎকার স্ক্রিপ্ট টুকরা নামের netconfঅন্য কোন স্ক্রিপ্ট যখনই আমি এনআইসি নাম ব্যবহার করতে হবে জন্য যে, আমি উৎস, এই ফাইলটি আমাকে তাদের সেটি নির্ধারণের জন্য একটি কেন্দ্রিয় অবস্থানে দেয় (যেমন LAN_IFACE=eth0, WAN_IFACE=eth1ইত্যাদি)


2
দেখে মনে হচ্ছে যে প্রচুর প্রোগ্রাম কেবল <নেট / if.h> শিরোনাম থেকে if_nameindex () ফাংশনে নির্ভর করছে । তারা কেবল তাদের প্রথম ডিভাইসটি ব্যবহার করে যা ইন্টারফেসের নামগুলি পুরোপুরি উপেক্ষা করে। আমি দেখতে পাচ্ছি কেন এটি কেন এমন হয়, নামগুলি সাজানোর চেয়ে প্রথম পাওয়া ডিভাইসটি ব্যবহার করা তার পক্ষে আরও সহজ।
আটাবাস্কা ডিক

1

ডিফল্টরূপে অ্যাপ্লিকেশনগুলিতে কোন ইন্টারফেসটি ব্যবহৃত হয় তা আপনি পরিবর্তন করতে পারবেন না iftop। তারা সি লাইব্রেরি ফাংশন কল if_nameindexএবং ডিফল্টরূপে ফিরে অ্যারে প্রথম উপাদান ব্যবহার। গনুহ libc এর if_nameindexলিনাক্স কাছাকাছি একটি পাতলা মোড়কের হয় SIOCGIFCONFioctl । নেটওয়ার্ক ড্রাইভারগুলি যেভাবে অর্ডার করা হয়েছিল এবং প্রতিটি ড্রাইভার প্রতিটি ডিভাইস সনাক্ত করেছিল সেই ক্রমের উপর ভিত্তি করে এটি একটি নির্দিষ্ট ক্রমে ইন্টারফেস প্রদান করে।

আপনি কি সত্যিই পাস আছে না চান তাহলে -iকরতে iftopএবং অনুরূপ প্রোগ্রাম, আপনার চারপাশের একটি ছোট মোড়কের করতে পারেন if_nameindexযে reorders ফিরে তালিকায় উপাদান, LD_PRELOAD। আমি এটিকে কল করার চেয়ে অনেক বেশি ঝামেলা বলব।


আমি "সমস্যা" if_nameindexকার্যকারিতাটিতে পিনপয়েন্টটি পরিচালনা করেছি । সম্ভবত আমি এখনই এটি ছেড়ে। ভাগ্যক্রমে কিছু অ্যাপস সত্যই ইন্টারফেসের নামটি পরীক্ষা করে। অন্যদিকে কিছু অ্যাপ্লিকেশনগুলিতে ডিফল্ট কনফিগারেশন বিকল্পও নেই তাই আমাকে কেবল -i বিকল্পটি ব্যবহার করতে হবে। আমি কেবল ভাবছিলাম কেন কার্নেল লোডিং বিকল্পটি netdev=irq=22,name=eth0কাজ করে না? আমি ভেবেছিলাম কার্নেল প্রারম্ভকালে NIC অর্ডার পরিবর্তন করা সম্ভব হবে।
অথাবস্কা ডিক 21

কার্নেল উত্স ( for_each_netdevম্যাক্রো) এর তাত্ক্ষণিকভাবে নজরদারি থেকে, ইন্টারফেসগুলি ক্রম হিসাবে অঙ্ক করা হয় যাতে ড্রাইভারগুলি লোড করা হয় (মোটামুটি)। আপনার ইন্টারফেসগুলি সম্ভবত বিভিন্ন ড্রাইভার ব্যবহার করে, তাই আপনার নিজের পছন্দমতো ড্রাইভার লোড করার ব্যবস্থা করতে হবে। আমি আশা করব এটি কঠিন হয়ে উঠবে, বিশেষত যদি আপনি চান যে আপনার টুইটটি কার্নেল আপগ্রেড জুড়ে কাজ করে।
গিলস

1

তাদের যদি পৃথক ড্রাইভার থাকে তবে দিনে অন্তত আপনি মডিউল কনফিগারেশন ফাইলগুলির মধ্যে একটি রাখতে পারেন:

alias eth0 driver1
alias eth1 driver2

এটি বেশ কিছু পুরানো জ্ঞান তবে এটি সাহায্য করতে পারে।


-1

'Ifrename' প্যাকেজটি একবার দেখুন। এটি আপনাকে বিভিন্ন তথ্যের উপর ভিত্তি করে ইন্টারফেসের নামগুলির নাম পরিবর্তন করতে দেয় যেমন ইন্টারফেসের ম্যাক ঠিকানা, ড্রাইভার, বাধা ..., / ইত্যাদি / ইফতাব ফাইলে কনফিগার করা হয়েছে।

ম্যান পৃষ্ঠা থেকে কিছু উদাহরণ:

   # This is a comment
   eth2      mac 08:00:09:DE:82:0E
   eth3      driver wavelan interrupt 15 baseaddress 0x390
   eth4      driver pcnet32 businfo 0000:02:05.0
   air*      mac 00:07:0E:* arp 1
   myvpn     SYSFS{address} 00:10:83:* SYSFS{type} 1
   bcm*      SYSFS{device} 0000:03:00.0 SYSFS{device/driver} bcm43xx
   bcm*      SYSFS{..} 0000:03:00.0 SYSFS{../driver} bcm43xx

ইউএন্ডএল-এ আপনাকে স্বাগতম, আপনি কি কেবলমাত্র ইঙ্গিতগুলি না দিয়ে আমাদের একটি সম্পূর্ণ উত্তর সরবরাহ করতে পারেন? "সেখানে একটি ম্যান পেজ আছে ..." এর মতো কিছু লেখার সাথে আপনার পোস্ট করা উচিত নয়।
আরচেমার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.