Ifconfig কমান্ডকে আইপ্রেট 2 তে রূপান্তর করুন


1

আমি একটি নেটওয়ার্ক ইন্টারফেসে আইপি সেট করতে এই ifconfig কমান্ডটি ব্যবহার করছি

ifconfig eth0 x.x.x.x netmask x.x.x.x mtu 1400

এখন তারা বলে যে ifconfig অবমূল্যায়ন করা হয়েছে এবং আমার iproute2 ব্যবহার করা উচিত। আমি সেই আদেশটি দুটি আদেশে রূপান্তরিত করেছি:

ip addr add x.x.x.x/24 dev eth0
ip link set mtu 1400 dev eth0

আমি কীভাবে দু'জনকে কেবল একটি আদেশে যোগ দিতে পারি?

উত্তর:


2

সংক্ষিপ্ত উত্তর : আপনি শেল ফাংশনটিতে মোড়ানো না হলে আপনি পারবেন না। একজন দরিদ্র মানুষের সংস্করণ:

function ifaddrmtu() {
    # Call: ifaddrmtu eth0:foobar 1.1.1.1 255.255.255.254
    #   or: ifaddrmtu eth0:foobar 1.1.1.1 255.255.255.254 1400
    local label=$1
    local ip=$2
    local mask=$3
    local mtu=$4
    sudo ip addr add $ip/$mask brd + dev ${label%:*} label $label
    [ ! -z $mtu ] && sudo ip link set mtu $mtu dev $label
}

এখন, আপনি যদি সত্যিই পুরানো ifconfigআচরণটি মানচিত্র করতে চান তবে আপনাকে iproute2একটি পার্সার লিখতে হবে, যা ifconfigসিনট্যাক্স এবং শব্দার্থকে মানচিত্র করে iproute2। দশ বছর আগে, আমি যে কোম্পানির জন্য কাজ করেছি তার পক্ষে শেলের এমন একটি বেষ্ট লিখেছিলাম। আপনার যদি এটির প্রয়োজন হয় তবে আমি এটি আমার পুরানো হার্ড ড্রাইভগুলির মধ্যে একটি থেকে বের করার চেষ্টা করতে পারি। এটি বেশ ঝরঝরে ছিল এবং রাউটিং টেবিলগুলি এবং তাদের এন্ট্রিগুলি দেখানোর আরও বেশি বন্ধুত্বপূর্ণ পদ্ধতি নিয়ে এসেছে।

আরও বিশদ উত্তর : iproute2ফ্রেমওয়ার্কটি আইপি ঠিকানা যুক্ত করা এবং একটি ডিভাইসের এমটিটিও সেট করা কর্নেলের দৃষ্টিকোণ থেকে দুটি ভিন্ন বিষয়। ifconfigকার্নেলের নেটওয়ার্ক স্ট্যাকের কনফিগারেশনটি পরিবর্তন করতে পুরানো-শৈলীর আইওসিটিএল যোগাযোগ ব্যবহার করার সময় (কার্নেল পরবর্তীকালে সমস্ত কাজ অভ্যন্তরীণভাবে একটি আইপি অ্যাড্রেস যুক্ত করার জন্য এবং mtu সেট করার জন্য সমস্ত কাজ করে) নেটওয়ার্ক স্ট্যাকের সাথে যোগাযোগের জন্য বার্তা কাঠামো iproute2ব্যবহার করে netlink

আপনি স্ট্রেস (আমার লিনাক্স ভিএম এর অংশ) ব্যবহার করে এটি সেরা দেখতে পাচ্ছেন:

# ip addr del 1.1.1.1/32 dev eth4

# strace -e ioctl ifconfig eth4:new 1.1.1.1 netmask 255.255.255.255 mtu 1400
ioctl(4, SIOCSIFADDR, {ifr_name="eth4:new", ifr_addr={AF_INET, inet_addr("1.1.1.1")}}) = 0
ioctl(4, SIOCGIFFLAGS, {ifr_name="eth4:new", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFFLAGS, {ifr_name="eth4:new", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFNETMASK, {ifr_name="eth4:new", ifr_netmask={AF_INET, inet_addr("255.255.255.255")}}) = 0
ioctl(4, SIOCSIFMTU, {ifr_name="eth4:new", ifr_mtu=1400}) = 0

# ip -4 addr show dev eth4
2: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP qlen 1000
    inet 10.211.55.4/24 brd 10.211.55.255 scope global eth4
    inet 1.1.1.1/32 scope global eth4:new

# ip addr del 1.1.1.1/32 dev eth4                                          

# strace -e "send,sendmsg,recvmsg" ip addr add 1.1.1.1/32 dev eth4 label eth4:new
send(3, "\24\0\0\0\22\0\1\3\206\35\31R\0\0\0\0\0\0\0\0", 20, 0) = 20
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\340\3\0\0\20\0\2\0\206\35\31R\257\10\0\0\0\0\4\3\1\0\0\0I\0\1\0\0\0\0\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 2992
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0\206\35\31R\257\10\0\0\0\0\0\0\1\0\0\0I\0\1\0\0\0\0\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 20
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"8\0\0\0\24\0\5\6\207\35\31R\0\0\0\0\2 \0\0\2\0\0\0\10\0\2\0\1\1\1\1"..., 56}], msg_controllen=0, msg_flags=0}, 0) = 56
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$\0\0\0\2\0\0\0\207\35\31R\257\10\0\0\0\0\0\0008\0\0\0\24\0\5\6\207\35\31R"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 36                       = ?

# strace -e "send,sendmsg,recvmsg" ip link set mtu 1420 dev eth4
send(3, " \0\0\0\20\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 32, 0) = 32
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"4\0\0\0\2\0\0\0\0\0\0\0\250\10\0\0\355\377\377\377 \0\0\0\20\0\5\0\0\0\0\0"..., 8192}], msg_controllen=0, msg_flags=0}, 0) = 52
send(3, "\24\0\0\0\22\0\1\3;\35\31R\0\0\0\0\0\0\0\0", 20, 0) = 20
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\340\3\0\0\20\0\2\0;\35\31R\250\10\0\0\0\0\4\3\1\0\0\0I\0\1\0\0\0\0\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 2992
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"\24\0\0\0\3\0\2\0;\35\31R\250\10\0\0\0\0\0\0\1\0\0\0I\0\1\0\0\0\0\0"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 20
sendmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"(\0\0\0\20\0\5\0<\35\31R\0\0\0\0\0\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0"..., 40}], msg_controllen=0, msg_flags=0}, 0) = 40
recvmsg(3, {msg_name(12)={sa_family=AF_NETLINK, pid=0, groups=00000000}, msg_iov(1)=[{"$\0\0\0\2\0\0\0<\35\31R\250\10\0\0\0\0\0\0(\0\0\0\20\0\5\0<\35\31R"..., 16384}], msg_controllen=0, msg_flags=0}, 0) = 36

# ip -4 addr show dev eth4
2: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1420 qdisc pfifo_fast state UP qlen 1000
    inet 10.211.55.4/24 brd 10.211.55.255 scope global eth4
    inet 1.1.1.1/32 scope global eth4:new

ডিভাইস এন্ট্রি করার জন্য আইপি ঠিকানা এবং এমটিটিউয়ের সেটিং দুটি ভিন্ন জিনিস হওয়ার কারণ অবশ্যই রয়েছে more আসুন আমরা কেবল এটিই বলি যে আইপি ঠিকানাগুলি ইন্টারফেসের দ্বারা প্রস্তাবিত হিসাবে সত্যই নির্ভর করে না ifconfig। নামটি কেবল ইন্টারফেসের নাম হিসাবে ব্যবহৃত একটি লেবেল যা ফরোয়ার্ড ইনফরমেশন বেস (এফআইবি) দেখতে / ফিল্টার করতে এবং প্যাকেটগুলি রুট করতে ব্যবহার করে। প্যাকেটের হ্যান্ডলিং পয়েন্টের দর্শন থেকে কার্নেলটি ডিভাইসের নাম ছাড়া খুব ভালভাবে বাঁচতে পারে।


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