dot skrev:Hur tar sig detta mot program som jobbar mot ethX då?
T ex dnsmasq, har de stöd för sånt här? Eller kan man redirecta program som bara har stöd för vanliga typen av interface till ett specifikt interface?
Det är precis som mikma skriver, men jag tänkte utveckla det lite utan att göra några anspråk på fullständighet, dels för att det är enormt komplext och jag inte kan allt, dels för att det inte behövs.
Ett interface har en eller flera ip-adresser. Det har till del betydelse för vilken information som datorn tar emot från nätverket. Därtill finns en routingtabell som talar om hur information ska skickas ut från datorn, ex:
- Kod: Markera allt
server:~# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.200.150.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
a.b.c.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
0.0.0.0 a.b.c.1 0.0.0.0 UG 0 0 0 eth1
Detta anger, kortfattat, att alla paket som ska till nätverket 10.200.150.0/24 ska skickas ut direkt/lokalt (återkommer till detta senare) över eth0.
Alla paket till a.b.c.0/24 ska skickas ut lokalt över eth1.
Alla paket som ska någon annanstans (default route: 0.0.0.0) ska skickas till routern a.b.c.1 som nås på eth1.
För alla lokala adresser (tex gateway/routern som anges i default net, förutom alla andra datorer på a.b.c.0/24- och 10.200.150.0/24-näten) så finns dock en faktor som komplicerar allt. Nätverket som sådant har inte en aning om ip-adresser!!! Ethernet har tex inte en aning om ip-adresser!!!
För tex ethernet finns det dock en annan adressering genom de rimligt unika MAC-adresserna som varje ethernetkort har. När ett ethernet-interface ska skicka information till ett annat interface så sker adresseringen genom MAC-adressen. För att omvandla mellan ip-nummer och mac-adress på det lokala nätverket så används något som kallas arp (address resolution protocol). Om 10.200.150.1 ska skicka info till 10.200.150.2 så måste 10.200.150.1 få reda på MAC-adressen till 10.200.150.2 för att 10.200.150.1 ska kunna konstruera ethernet-paket som ska gå till 10.200.150.2. Det görs genom en arp-förfrågan. 10.200.150.1 skickar helt enkelt ut en ethernet broadcast, dvs ett paket som är destinerad till alla på det lokala nätverket, med en förfrågan om vem som har 10.200.150.2. 10.200.150.2 svara då att den har 10.200.150.2 och anger samtidigt sin egen MAC-adress. 10.200.150.1 sparar denna information ett tag i sin arp-cache. Nu kan 10.200.150.1 skicka paket över ethernet till 10.200.150.2, dvs 10.200.150.1 kan konstruera ethernetpaket som är destinerade till 10.200.150.2:s mac-adress. Paketen innehåller naturligtvis information även om sändande och mottagande ip-adress mm, men själva den grundläggande nätverksadresseringen på det lokala nätverket står ethernet och MAC-adressen för.
När du kopplar flera ip-adresser till ett interface (virtuella interface) så är det inte svårare än att du kopplar flera ip-nummer till interfacet och sätter upp flera ingångar i routingtabellen som anger dessa nya ip-nummer. Behändigt nog så brukar dessa routes läggas till automatiskt vad gäller de lokala näten. Skapar du tex ett virtuellt interface eth0:1 med adressen ex 192.168.10.3/24 (ifconfig eth0:1 192.168.10.3 netmask 255.255.255.0 up) så brukar det oftast skapas en route, i routingtabellen, som anger att lokala ip-adresser på detta nät, dvs 192.168.10.0/24 ska routas lokalt ut över eth0, dvs:
- Kod: Markera allt
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
tillkommer.
Om nu aktuell dator försöker skicka något till någon dator som har ip-adress inom 192.168.10.0/24 så skickas detta ut över eth0, möjligen efter en arp-förfrågan om 192.168.10.3 inte har den andra "datorn" i arp-cachen.
Sedan fungerar det precis som vanligt. Kommer det in en arp-förfrågan om 192.168.10.3 så svarar datorn på arp-förfrågan.
Nästa fråga rör att "binda" tjänster till interfacen/ip-adresserna. Bara för att datorn har flera ip-adresser behöver det inte nödvändigtvis betyda att en tjänst, tex named, dhcpd etc, svarar på förfrågningar som kommer in via dessa interface/ip-adresser. Hur man gör det får man dock se i manualen till aktuell tjänst.
Detta var en enkel beskrivning och det kan göras betydligt mycket mer komplext då linux har stöd för avancerad routing mm.
/erikp