プラグを抜いて再度差し込んだときに「eth0」が「dhclient」を再試行するように設定するにはどうすればよいですか?


12

Linuxガジェットを作成しています。

起動後にネットワークケーブルを接続した場合、またはネットワークケーブルを抜き差しした場合にDHCPを取得したい。

1つの解決策は、次のようなスクリプトを実行することです(これは機能します)。

#!/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メンテナンスされていない表示されます。しかし、この同様の質問は、udevルールを使用して良い(簡単な)回答を持っているように見えます-追加のパッケージは必要ありません。serverfault.com/a/312296/275255
Thom Nichols

変更autoallow-hotplugの中でinterfaces
ケンシャープ

回答:


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デーモンであり、ケーブルが差し込まれたときにイーサネットデバイスを自動的に構成し、ケーブルが引っ張られた場合に自動的に構成を解除します。これは、ケーブルが実際に接続されている場合にのみインターフェイスを構成するため、オンボードネットワークアダプターを備えたラップトップで役立ちます。

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 2011

これは、1つの注意点で私にとってはトリックでした。でnetplugd有効になって、私は私が削除しなければならなかったことがわかったauto <interface>から/etc/network/interfaces。そうでない場合は、イーサネットケーブルを接続して取り外し、DHCPからIPアドレスを取得する前に再度接続する必要がありました。この行を削除すると、最初のプラグインイベントまたはケーブルが既に接続されている場合は起動時にDHCPからIPアドレスを取得します(ifplugd有効なときに行を削除してもしなくても、起動時のIPは機能しました)。
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用のUbuntuパッケージを作成しました。Ubuntuのインストールと使用方法についても、Wikiを更新しました。http//code.google.com/p/badvpn/wiki/NCD#Running_it


これは本当に便利に見えますが、Ubuntu / Fedoraリポジトリにそれを入れると思いますか?
CoolAJ86 2011

現在、ArchとGentooのパッケージがありますが、他のディストリビューションを使用していないため、他には何もありません。他のディストリビューション用のパッケージを作成する時間が見つかるかもしれません。ただし、それをコンパイルして/ usr / localなどにインストールし、起動するための簡単なinitスクリプトを作成するのは簡単です。
Ambroz Bizjak

Ubuntuのパッケージは、あなたのリクエスト
に従って完了しました
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.