Bagaimana cara mengkonfigurasi `eth0` untuk mencoba kembali` dhclient` saat dicabut dan dipasang kembali?

12

Saya sedang mengerjakan gadget linux.

Saya ingin mendapatkan DHCP jika saya mencolokkan kabel jaringan setelah boot sudah atau jika kabel jaringan dicabut dan dipasang kembali.

Salah satu solusinya adalah menjalankan skrip seperti ini (yang berfungsi, 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

Namun, saya merasakan jauh di lubuk hati saya yang mengatakan bahwa ada cara yang lebih baik untuk menangani peristiwa hotplug untuk kabel ethernet.

CoolAJ86
sumber
1
Sayangnya pada tahun 2016 keduanya ifplugddan netplugdtampil tidak terawat. Namun pertanyaan serupa ini sepertinya memiliki jawaban yang baik (sederhana) menggunakan aturan udev - tidak perlu paket tambahan. serverfault.com/a/312296/275255
Thom Nichols
Ubah autoke allow-hotplugdalam interfaces.
Ken Sharp

Jawaban:

9

netplug

netplugadalah solusi yang saya gunakan. ifplugdmungkin bekerja dengan baik.

Instalasi

sudo apt-get install netplug

Konfigurasi Antarmuka

cat /etc/netplug/netplugd.conf
eth*

Konfigurasi Acara

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

Pengujian

/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
CoolAJ86
sumber
5

ifplugd menangani situasi ini dengan sangat baik:

ifplugdadalah daemon Linux yang secara otomatis akan mengkonfigurasi perangkat ethernet Anda ketika kabel dicolokkan dan secara otomatis mengonfigurasinya jika kabel ditarik. Ini berguna pada laptop dengan adapter jaringan onboard, karena hanya akan mengkonfigurasi antarmuka ketika kabel benar-benar terhubung.

ifplugd antarmuka dengan utilitas konfigurasi jaringan asli distribusi Anda.

Beberapa fitur:

  • Menggunakan asli ifup/ ifdownprogram distribusi Anda .
  • [...]
  • Mendukung Linux SIOCETHTOOL(lebih baru, alias ethtoolAPI), SIOCGMIIREG(lebih tua, alias mii-diag/ mii-toolAPI) dan SIOCDEVPRIVATE(terlama, alias mii-toolAPI) ioctl()untuk mendapatkan status tautan. Rilis 0.24 memperkenalkan dukungan untuk deteksi tautan dengan IFF_RUNNINGbendera antarmuka.
  • [...]
  • Dapat dikonfigurasikan untuk mengabaikan periode " -dopsi" yang tidak terhubung ( opsi) atau periode "terhubung" yang singkat ( -uopsi)
  • [...]
  • Mode kompatibilitas untuk perangkat jaringan yang tidak mendukung deteksi kabel ( -Fopsi)
byronc
sumber
LUG lokal saya mengarahkan saya ke netplug, jadi saya pergi dengan itu. Terima kasih!
CoolAJ86
Ini berhasil bagi saya dengan satu peringatan. Dengan netplugddiaktifkan, saya menemukan bahwa saya harus menghapus auto <interface>dari /etc/network/interfaces. Jika tidak, saya harus mencolokkan kabel Ethernet, lepaskan, dan pasang kembali sebelum saya mendapat alamat IP dari DHCP. Dengan baris ini dihapus, saya mendapatkan alamat IP dari DHCP pada acara plug-in pertama atau saat boot jika kabel sudah terhubung (IP saat boot bekerja dengan atau tanpa garis dilepas saat ifplugddiaktifkan).
MrMas
5

Saya akan menyarankan menggunakan ifplugd lebih dari netplugd karena berfungsi lebih baik dan secara aktif dipertahankan.

ifplugd adalah daemon Linux yang secara otomatis akan mengkonfigurasi perangkat ethernet Anda ketika kabel dicolokkan dan secara otomatis mengkonfigurasi itu jika kabel ditarik. Ini berguna pada laptop dengan adapter jaringan onboard, karena hanya akan mengkonfigurasi antarmuka ketika kabel benar-benar terhubung.

NGRode
sumber
2

Menggunakan perangkat lunak saya ini untuk konfigurasi jaringan, sangat mudah.

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

Program NCD berikut akan dilakukan. Ini juga menunjukkan bagaimana Anda dapat memperluas konfigurasi, dalam hal ini dengan menjalankan sesuatu ketika jaringan naik / turun.

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);
}

Perhatikan bahwa ini tidak hanya akan menangani kabel jaringan yang dicolokkan atau keluar, tetapi juga antarmuka jaringan itu sendiri yang muncul dan hilang (berguna jika itu USB).

Keuntungan menggunakan NCD dibandingkan dengan perangkat lunak lain seperti ifplugd adalah desainnya memungkinkan fleksibilitas yang tinggi. Ini pada dasarnya memungkinkan Anda untuk memprogram konfigurasi jaringan Anda sendiri, bukan hanya terbatas pada kemampuan hardcoded yang terbatas.

PEMBARUAN: Saya telah membuat paket Ubuntu untuk BadVPN dan NCD. Saya telah memperbarui wiki dengan petunjuk instalasi dan penggunaan untuk Ubuntu juga: http://code.google.com/p/badvpn/wiki/NCD#Running_it

Ambroz Bizjak
sumber
Ini benar-benar terlihat berguna, apakah Anda pikir Anda akan memasukkannya ke repo Ubuntu / Fedora?
CoolAJ86
Saat ini saya memiliki paket untuk Arch dan Gentoo, dan tidak ada yang lain karena saya tidak menggunakan distro lain. Saya mungkin menemukan waktu untuk membuat paket untuk distro lain. Namun mudah untuk hanya mengkompilasi dan menginstalnya ke / usr / local atau sesuatu, dan telah membuat skrip init sederhana untuk memulainya.
Ambroz Bizjak
Paket Ubuntu selesai, sesuai permintaan Anda :)
Ambroz Bizjak