अनप्लग और रिप्लेस किए जाने पर `dhclient` को पुनः प्राप्त करने के लिए` eth0` को कैसे कॉन्फ़िगर करें?


12

मैं एक लिनक्स गैजेट पर काम कर रहा हूं।

मैं चाहता हूं कि अगर यह नेटवर्क केबल में पहले से ही बूट हो जाए या नेटवर्क केबल अनप्लग और रिप्लेस हो जाए तो मैं डीएचसीपी प्राप्त कर सकता हूं।

एक समाधान इस तरह से एक स्क्रिप्ट चलाने के लिए है (जो काम करता है, btw):

#!/bin/bash

NET_STATUS='different'

while true
do
  NEW_NET_STATUS=`ifconfig | grep RUNNING | grep -v LOOPBACK`
  if [ "${NEW_NET_STATUS}" = "${NET_STATUS}" ]
  then
    echo "no change"
    sleep 1
    continue
  fi
  NET_STATUS=${NEW_NET_STATUS}
  if [ "${NET_STATUS}" ]
  then
    echo "cable plugged in"
  else
    echo "cable unplugged"
  fi
  sleep 1
done

हालांकि, मुझे अपने छोटे पैर के अंगूठे में एक गहराई महसूस हुई है जो मुझे बताती है कि ईथरनेट केबल के लिए हॉटप्लग घटनाओं से निपटने का एक बेहतर तरीका है।


1
दुर्भाग्य से 2016 के रूप में दोनों ifplugdऔर netplugdप्रकट नहीं होते हैं। हालांकि यह इसी तरह का सवाल है कि यह udv नियमों का उपयोग करके एक अच्छा (सरल) उत्तर है - कोई अतिरिक्त पैकेज की आवश्यकता नहीं है। serverfault.com/a/312296/275255
Thom निकोल्स

बदले autoके लिए allow-hotplugमें interfaces
केन शार्प

जवाबों:


9

netplug

netplugसमाधान है कि मैं के साथ चला गया। ifplugdबस के रूप में अच्छी तरह से काम कर सकते हैं।

स्थापना

sudo apt-get install netplug

इंटरफ़ेस विन्यास

cat /etc/netplug/netplugd.conf
eth*

इवेंट कॉन्फ़िगरेशन

cat /etc/netplug/netplug
#!/bin/sh
PATH=/usr/bin:/bin:/usr/sbin:/sbin
export PATH

dev="$1"
action="$2"

case "$action" in
in)
    echo "$dev : $action : plugged in" >> /tmp/netplug.log
    ;;
out)
    echo "$dev : $action : unplugged" >> /tmp/netplug.log
    ;;
probe)
    echo "$dev : $action : probed" >> /tmp/netplug.log
    ;;
*)
    echo "$dev : $action : I feel violated" >> /tmp/netplug.log
    exit 1
    ;;
esac

परिक्षण

/etc/init.d/netplug stop
/etc/init.d/netplug start

cat /tmp/netplug.log
eth0 : probe : probed
eth1 : probe : probed
...
eth15 : probe : probed
eth0 : in : plugged in

5

ifplugd इस स्थिति को बहुत अच्छी तरह से संभालता है:

ifplugdएक लिनक्स डेमॉन है जो एक केबल में प्लग होने पर स्वचालित रूप से आपके ईथरनेट डिवाइस को कॉन्फ़िगर करेगा और यदि केबल खींची गई है तो स्वचालित रूप से इसे कॉन्फ़िगर न करें। यह ऑनबोर्ड नेटवर्क एडाप्टर के साथ लैपटॉप पर उपयोगी है, क्योंकि यह केवल इंटरफ़ेस को कॉन्फ़िगर करेगा जब एक केबल वास्तव में जुड़ा होता है।

ifplugd आपके वितरण के मूल नेटवर्क कॉन्फ़िगरेशन उपयोगिताओं के साथ इंटरफेस।

कुछ सुविधाएं:

  • आपके वितरण के मूल ifup/ ifdownकार्यक्रमों का उपयोग करता है ।
  • [...]
  • लिंक की स्थिति के लिए लिनक्स SIOCETHTOOL(नया, उर्फ ethtoolएपीआई), SIOCGMIIREG(पुराने, उर्फ mii-diag/ mii-toolएपीआई) और SIOCDEVPRIVATE(सबसे पुराना, उर्फ mii-toolएपीआई) ioctl()का समर्थन करता है। रिलीज 0.24 IFF_RUNNINGइंटरफेस फ्लैग के साथ लिंक का पता लगाने के लिए समर्थन का परिचय देता है ।
  • [...]
  • छोटे "अनप्लग्ड" अवधियों ( -dविकल्प) या छोटे "प्लग किए गए" अवधियों ( -uविकल्प) को अनदेखा करने के लिए कॉन्फ़िगर किया जा सकता है:
  • [...]
  • केबल का पता लगाने ( -Fविकल्प) का समर्थन नहीं करने वाले नेटवर्क उपकरणों के लिए संगतता मोड

मेरे स्थानीय LUG ने मुझे निर्देशित किया netplug, इसलिए मैं इसके बजाय उसके साथ गया। धन्यवाद!
CoolAJ86

यह मेरे लिए एक चेतावनी के साथ किया था। साथ netplugdसक्षम है, तो मैंने पाया कि मैं दूर करने के लिए किया था auto <interface>से /etc/network/interfaces। यदि नहीं, तो मुझे DHCP से IP पता मिलने से पहले मुझे ईथरनेट केबल में प्लग करना था, उसे निकालना था और फिर से प्लग करना था। इस लाइन को हटाए जाने के साथ, मुझे पहले प्लग-इन ईवेंट या बूट पर डीएचसीपी से एक आईपी एड्रेस मिलता है यदि केबल पहले से प्लग किया गया था (बूट होने पर आईपी ifplugdसक्षम होने पर हटाए गए लाइन के साथ या उसके बिना काम करता है )।
MrMas

5

मैं netplugd पर ifplugd का उपयोग करने का सुझाव दूंगा क्योंकि यह बेहतर काम करता है और सक्रिय रूप से बनाए रखा जाता है।

ifplugd एक Linux डेमॉन है जो केबल में प्लग किए जाने पर स्वचालित रूप से आपके ईथरनेट डिवाइस को कॉन्फ़िगर करेगा और यदि केबल खींची गई है तो स्वचालित रूप से इसे कॉन्फ़िगर न करें। यह ऑनबोर्ड नेटवर्क एडाप्टर के साथ लैपटॉप पर उपयोगी है, क्योंकि यह केवल इंटरफ़ेस को कॉन्फ़िगर करेगा जब एक केबल वास्तव में जुड़ा होता है।


2

नेटवर्क कॉन्फ़िगरेशन के लिए मेरा इस सॉफ्टवेयर का उपयोग करना, यह बहुत आसान है।

http://code.google.com/p/badvpn/wiki/NCD

निम्नलिखित एनसीडी कार्यक्रम करेंगे। यह यह भी दिखाता है कि आप नेटवर्क को ऊपर / नीचे जाने पर कुछ चलाकर इस मामले में कॉन्फ़िगरेशन को कैसे बढ़ा सकते हैं।

process eth0 {
    # Set device.
    var("eth0") dev;

    # Wait for device to appear, set it up, and wait for cable to be plugged in.
    net.backend.waitdevice(dev);
    net.up(dev);
    net.backend.waitlink(dev);

    # DHCP configuration.
    # net.ipv4.dhcp() will block here until it obtaines an IP address.
    # It doesn't check the obtained address in any way,
    # so as a basic security measure, do not proceed if it is local.
    net.ipv4.dhcp(dev) dhcp;
    ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
    ifnot(test_local);

    # Assign IP address to interface, as obtained by DHCP.
    net.ipv4.addr(dev, dhcp.addr, dhcp.prefix);

    # Add default route.
    net.ipv4.route("0.0.0.0", "0", dhcp.gateway, "20", dev);

    # Add DNS servers.
    net.dns(dhcp.dns_servers, "20");

    # Run an external program when network comes up or goes down.
    list("/some/program/to/run/when/up", "argument") do;
    list("/some/program/to/run/when/down", "argument") undo;
    run(do, undo);
}

ध्यान दें कि यह न केवल नेटवर्क केबल को प्लग इन या आउट किया जा रहा है, बल्कि नेटवर्क इंटरफ़ेस भी दिखाई दे रहा है और गायब हो रहा है (उपयोगी अगर यह यूएसबी है)।

अन्य सॉफ्टवेयर जैसे ifplugd की तुलना में NCD का उपयोग करने का लाभ यह है कि इसका डिज़ाइन शानदार लचीलेपन के लिए बदल जाता है। यह मूल रूप से आपको हार्डकॉपी क्षमताओं के सीमित सेट तक सीमित होने के विपरीत, अपने स्वयं के नेटवर्क कॉन्फ़िगरेशन को प्रोग्राम करने की अनुमति देता है।

अद्यतन: मैंने BadVPN और NCD के लिए उबंटू पैकेज बनाए हैं। मैंने उबंटू के लिए इंस्टॉलेशन और उपयोग निर्देशों के साथ विकी को भी अपडेट किया है: http://code.google.com/p/badvpn/wiki/NCD#Running_it


यह वास्तव में उपयोगी दिखता है, क्या आपको लगता है कि आप इसे उबंटू / फेडोरा रिपोज में प्राप्त करेंगे?
CoolAJ86

वर्तमान में मेरे पास आर्क और जेंटू के लिए पैकेज हैं, और कुछ नहीं क्योंकि मैं अन्य डिस्ट्रो का उपयोग नहीं करता हूं। अन्य डिस्ट्रो के पैकेज बनाने के लिए मुझे कुछ समय मिल सकता है। हालाँकि, इसे केवल / usr / स्थानीय या किसी अन्य चीज़ में संकलित करना और स्थापित करना आसान है, और इसे शुरू करने के लिए एक सरल init स्क्रिप्ट बनाई है।
अम्ब्रोज़ बिज्जक

आपके अनुरोध के अनुसार, उबंटू पैकेज किए गए :)
अंबेरोज बिज्जक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.