플러그를 뽑았다가 다시 꽂을 때 dhclient를 다시 시도하도록 eth0을 구성하는 방법은 무엇입니까?


12

나는 리눅스 가제트를 만들고 있습니다.

네트워크 케이블이 이미 부팅 된 후 네트워크 케이블을 연결하거나 네트워크 케이블을 분리했다가 다시 연결하면 DHCP가 필요합니다.

한 가지 해결책은 다음과 같은 스크립트를 실행하는 것입니다 (작동).

#!/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로 ifplugdnetplugd관리되지 않는 나타납니다. 그러나이 비슷한 질문은 udev 규칙을 사용하여 좋은 (간단한) 대답이있는 것처럼 보입니다. 추가 패키지가 필요하지 않습니다. serverfault.com/a/312296/275255
Thom Nichols

변경 autoallow-hotplug에서 interfaces.
Ken Sharp

답변:


9

넷 플러그

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 는이 상황을 잘 처리합니다.

ifplugdLinux 데몬은 케이블을 꽂을 때 이더넷 장치를 자동으로 구성하고 케이블을 뽑으면 자동으로 구성 해제하는 Linux 데몬입니다. 케이블이 실제로 연결되어있을 때만 인터페이스를 구성하기 때문에 온보드 네트워크 어댑터가있는 랩톱에 유용합니다.

ifplugd 배포판의 기본 네트워크 구성 유틸리티와 인터페이스합니다.

일부 기능 :

  • 배포판의 기본 ifup/ ifdown프로그램을 사용합니다 .
  • [...]
  • 링크 상태를 얻기 위해 Linux SIOCETHTOOL(최신, 일명 ethtoolAPI), SIOCGMIIREG(이전, 일명 mii-diag/ mii-toolAPI) 및 SIOCDEVPRIVATE(가장 오래된 일명 mii-toolAPI)를 지원 ioctl()합니다. 릴리스 0.24는 IFF_RUNNING인터페이스 플래그를 사용한 링크 감지를 지원합니다 .
  • [...]
  • 짧은 "플러그되지 않은"기간 ( -d옵션) 또는 짧은 "플러그 된"기간 ( -u옵션) 을 무시하도록 구성 가능
  • [...]
  • 케이블 감지를 지원하지 않는 네트워크 장치의 호환성 모드 ( -F옵션)

내 지역 LUG가 나에게 지시 netplug했으므로 대신 그와 함께갔습니다. 감사!
CoolAJ86

이것은 하나의 경고로 나를 위해 속임수를 사용했습니다. 함께 netplugd사용 가능, 나는 제거 남겼 auto <interface>에서 /etc/network/interfaces. 그렇지 않다면, DHCP에서 IP 주소를 얻기 전에 이더넷 케이블을 꽂았다가 다시 꽂아야했습니다. 이 회선을 제거하면 케이블이 이미 연결되어있는 경우 첫 번째 플러그인 이벤트 또는 부팅시 DHCP에서 IP 주소를 얻습니다 (부팅시 IP ifplugd는 활성화 된 상태에서 회선을 제거하거나 제거하지 않은 상태 에서 작동).
MrMas

5

더 잘 작동하고 적극적으로 유지 관리 되므로 netplugd 를 통해 ifplugd 를 사용하는 것이 좋습니다 .

ifplugd는 Linux 데몬으로 케이블이 연결되면 이더넷 장치를 자동으로 구성하고 케이블을 뽑으면 자동으로 구성 해제합니다. 케이블이 실제로 연결되어있을 때만 인터페이스를 구성하기 때문에 온보드 네트워크 어댑터가있는 랩톱에 유용합니다.


2

네트워크 구성에이 소프트웨어를 사용하면 매우 쉽습니다.

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

다음의 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);
}

이것은 네트워크 케이블의 플러그 인 또는 아웃을 처리 할뿐만 아니라 네트워크 인터페이스 자체가 나타나거나 사라지는 것을 처리합니다 (USB 인 경우 유용함).

ifplugd와 같은 다른 소프트웨어와 비교하여 NCD를 사용하는 이점은 디자인이 큰 유연성을 위해 느리다는 것입니다. 기본적으로 제한된 하드 코드 기능 세트로 제한되는 대신 자체 네트워크 구성을 프로그래밍 할 수 있습니다.

업데이트 : BadVPN 및 NCD 용 우분투 패키지를 만들었습니다. 우분투 설치 및 사용 지침으로 위키를 업데이트했습니다 : http://code.google.com/p/badvpn/wiki/NCD#Running_it


이것은 실제로 유용하게 보입니다. Ubuntu / Fedora 저장소에 넣을 것이라고 생각하십니까?
CoolAJ86

현재 아치와 젠투 용 패키지가 있으며 다른 배포판을 사용하지 않기 때문에 다른 것은 없습니다. 다른 배포판 용 패키지를 만들 시간이있을 수도 있습니다. 그러나 그것을 컴파일하고 / usr / local 또는 다른 곳에 설치하는 것은 쉽고 간단한 init 스크립트를 만들어 시작하십시오.
Ambroz Bizjak

우분투는 : 귀하의 요청에 따라 수행 된 패키지
Ambroz Bizjak을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.