Kupiłeś sobie drugą sieciówkę, podpiąłeś do komputera, odpalasz... i sieć nie działa. Dzieje się tak dlatego, że system nadaje nazwe interfejsom po kolejności ładowania modułów do nich.
Co zamierzamy z tym zrobić?
Po pierwsze zakładam ze potrafisz poprawnie skonfigurować interfejsy sieciowe. Jeśli nie to najpierw poczytaj o konfiguracji. Po drugie postaram się przedstawić kilka wersji rozwiązania tego problemu. Każdy powinien znaleźć cos dla siebie
Zaczynamy!
Najprostszym sposobem rozwiązania problemu jest po prostu zamiana kabli od netu/lanu . Oto ciekawsze sposoby:
1. Alias
Nasz problem rozwiążemy robiąc aliasy w pliku /etc/modules.conf(dla jądra 2.4.*) lub /etc/modprobe.conf(dla jądra 2.6.*). Potrzebujemy jednak znać moduły naszych kart sieciowych. Robimy więc tak:
Kod: Zaznacz cały
root@adzia:/# lsmod
Module Size Used by Not tainted
snd-pcm-oss 37736 0 (unused)
snd-mixer-oss 12504 0 [snd-pcm-oss]
appletalk 21124 11 (autoclean)
printer 7744 0
usb-storage 66176 0 (unused)
keybdev 2052 0 (unused)
mousedev 4212 1
hid 21220 0 (unused)
usbmouse 2040 0 (unused)
input 3200 0 [keybdev mousedev hid usbmouse]
uhci 24444 0 (unused)
ehci-hcd 17580 0 (unused)
usbcore 59308 1 [printer usb-storage hid usbmouse
uhci ehci-hcd]
snd-intel8x0 18924 0
snd-mpu401-uart 3200 0 [snd-intel8x0]
b44 13708 1
snd-ens1371 11364 1
gameport 1420 0 [snd-intel8x0 snd-ens1371]
snd-pcm 56072 1 [snd-pcm-oss snd-intel8x0 snd-ens1371]
snd-timer 13604 0 [snd-pcm]
snd-page-alloc 6328 0 [snd-intel8x0 snd-pcm]
snd-rawmidi 12740 0 [snd-mpu401-uart snd-ens1371]
snd-seq-device 3888 0 [snd-rawmidi]
snd-ac97-codec 49500 0 [snd-intel8x0 snd-ens1371]
snd 30852 0 [snd-pcm-oss snd-mixer-oss
snd-intel8x0 snd-mpu401-uart snd-ens1371 snd-pcm snd-timer snd-rawmidi
snd-seq-device snd-ac97-codec]
soundcore 3396 10 [snd]
pcmcia_core 39972 0
ntfs 51424 2 (autoclean)
ip_conntrack_ftp 3888 1 (autoclean)
ip_nat_ftp 2736 0 (unused)
ipt_MASQUERADE 1304 1 (autoclean)
iptable_nat 15438 2 (autoclean) [ip_nat_ftp ipt_MASQUERADE]
ip_conntrack 19236 1 (autoclean) [ip_conntrack_ftp
ip_nat_ftp ipt_MASQUERADE iptable_nat]
ip_tables 12416 4 [ipt_MASQUERADE iptable_nat]
ide-scsi 9328 0
agpgart 43940 0 (unused)
8139too 14376 1
mii 2272 0 [8139too]
crc32 2880 0 [8139too]
Kod: Zaznacz cały
root@adzia:/# modinfo 8139too
filename: /lib/modules/2.4.26/kernel/drivers/net/8139too.o.gz
description: "RealTek RTL-8139 Fast Ethernet driver"
author: "Jeff Garzik <jgarzik@pobox.com>"
license: "GPL"
Gdy znalazłeś już moduły twoich kart to pozostaje ci tylko edycja pliku /etc/modules.conf(dla jądra 2.4.*) lub /etc/modprobe.conf(dla jądra 2.6.*). Polega to na zrobieniu aliasów:
Kod: Zaznacz cały
# alias nazwa_interfesju nazwa_modułu_siecówki
alias eth0 8139too
alias eth1 ne2k-pci
2. Lilo i append
Nasz problem rozwiążemy edytując plik /etc/lilo.conf i używając komendy append. Z poziomu lilo możesz wymusić, aby eth0 korzystał z sieciówki o określonym przerywaniu[IRQ] i adresie bazowym[I/O]. Zaczynamy od wydania polecenia # lspci -v powinniśmy otrzymać między innymi coś takiego:
Kod: Zaznacz cały
Ethernet controller: Realtek Semiconductor Co., Ltd.
RTL-8139/8139C/8139C+ (rev 16).
IRQ 9.
Master Capable. Latency=32. Min Gnt=32.Max Lat=64.
I/O at 0xb400 [0xb4ff].
Non-prefetchable 32 bit memory at 0xec800000 [0xec8000ff].
Kod: Zaznacz cały
append="ether=9,0xb400,eth0 ether=12,0xe800,eth1"
0xb400 i 0xe800 to IO (obszar pamięci wejścia-wyjścia)
Całośc razem ze wpisem jądra powinna wyglądać tak:
Kod: Zaznacz cały
image = /boot/kernel-2.6.12.2
root = /dev/hda2
label = Slackware
read-only
append="ether=9,0xb400,eth0 ether=12,0xe800,eth1"
3. Polecenie nameif
Zdarza się czasami, że mamy wkompilowane dwa moduły od siecówek do jądra i chcemy zamienić miejscami, inaczej mówiąc zmienić im nazwy. Do tego własnie służy polecenie nameif. Postaram się to opisać dokładnie na przykładzie skryptu. nameif może korzystać z pliku /etc/mactab ale wtedy istnieje możliwośc zmiany (tylko) na nie istniejące nazwy np. z eth0 na iface0.
Dojść może także do takie sytuacji, kiedy posiadamy dwie zintegrowane karty sieciowe, czyli:
Kod: Zaznacz cały
eth0: forcedeth.c: subsystem: 01462:0250 bound to 0000:00:05.0
eth1: Identified chip type is 'RTL8169s/8110s'.
eth1: RTL8169 at 0xffffc20000010000, 00:11:09:d7:93:18, IRQ 185
Kod: Zaznacz cały
eth0 Link encap:Ethernet HWaddr 00:11:09:D7:93:19 <- to jest siecówka na module forcedeth.c
inet addr:10.1.1.11 Bcast:10.1.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:863 errors:0 dropped:0 overruns:0 frame:0
TX packets:908 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:381545 (372.6 Kb) TX bytes:100030 (97.6 Kb)
Interrupt:185
eth1 Link encap:Ethernet HWaddr 00:11:09:D7:93:18 <- to siecówka na RTL8169
inet addr:10.1.1.14 Bcast:10.255.255.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:177 Base address:0xe000
Kod: Zaznacz cały
...
if [ -x /etc/rc.d/rc.nameif ]; then
echo "Starting nameif script: /etc/rc.d/rc.nameif"
. /etc/rc.d/rc.nameif
fi
# Initialize the networking hardware. If your network driver is a module
# and you haven't loaded it manually, this will be deferred until after
# the hotplug system loads the module below.
if [ -x /etc/rc.d/rc.inet1 ]; then
. /etc/rc.d/rc.inet1
fi
...
Kod: Zaznacz cały
#!/bin/sh
# Zmieniamy nazwę siecówki eth0 na eth2
/sbin/nameif -s eth2 00:11:09:D7:93:19
# Zmieniamy nazwę siecówki eth1 na eth0
/sbin/nameif -s eth0 00:11:09:D7:93:18
# Zmieniamy nadaną wcześniej nazwę eth2 na eth1
/sbin/nameif -s eth1 00:11:09:D7:93:19
Kod: Zaznacz cały
Jul 5 23:44:59 brutus nameif: cannot change name of eth1 to eth0: File exists
Jul 5 23:44:59 brutus nameif: cannot change name of eth0 to eth1: File exists
4. udev
Jeśli posiadamy jądro 2.6 i korzystamy z udev, w pliku /etc/udev/rules.d/75-network-devices.rules należy utworzyć lub zmodyfikować istniejące wpisy (po wcześniejszym odkomentowaniu):
Kod: Zaznacz cały
KERNEL=="eth?", SYSFS{address}=="xx:xx:xx:xx:xx:xx", NAME="eth0"
KERNEL=="eth?", SYSFS{address}=="yy:yy:yy:yy:yy:yy", NAME="eth1"
Jeśli posiadamy więcej kart sieciowych, należy dodać kolejne linie bazując na powyższych wpisach.
Autorzy: lec, sayetan, Hannibal, Dario