Kapitel 5. Nätverkskonfiguration

Innehållsförteckning

5.1. Den grundläggande nätverksinfrastrukturen
5.1.1. Upplösning av värdnamn
5.1.2. Namnet på nätverksgränssnittet
5.1.3. Nätverksadressområde för LAN
5.1.4. Stöd för nätverksenhet
5.2. Den moderna nätverkskonfigurationen för stationära datorer
5.2.1. GUI-verktyg för nätverkskonfiguration
5.3. Den moderna nätverkskonfigurationen utan GUI
5.4. Den moderna nätverkskonfigurationen för moln
5.4.1. Den moderna nätverkskonfigurationen för moln med DHCP
5.4.2. Den moderna nätverkskonfigurationen för moln med statisk IP
5.4.3. Den moderna nätverkskonfigurationen för molnet med Network Manager
5.5. Nätverkskonfiguration på låg nivå
5.5.1. Iproute2 kommandon
5.5.2. Säker nätverksdrift på låg nivå
5.6. Optimering av nätverk
5.6.1. Hitta optimal MTU
5.6.2. WAN TCP-optimering
5.7. Netfilters infrastruktur
[Tips] Tips

För en modern Debian-specifik guide till nätverk, läs The Debian Administrator's Handbook - Configuring the Network.

[Tips] Tips

Under systemd kan networkd användas för att hantera nätverk. Se systemd-networkd(8).

Låt oss gå igenom den grundläggande nätverksinfrastrukturen i ett modernt Debian-system.

Tabell 5.1. Lista över verktyg för nätverkskonfiguration

paket popcon storlek typ beskrivning
network-manager V:418, I:478 7809 config::NM NetworkManager (daemon): hanterar nätverket automatiskt
network-manager-gnome V:58, I:212 18 config::NM NetworkManager (GNOME-frontend)
netplan.io V:1, I:7 340 config::NM+nätverk Netplan (generator): Enhetligt, deklarativt gränssnitt till NetworkManager och systemd-networkd backends
ifupdown V:599, I:973 200 config::ifupdown standardiserat verktyg för att ta upp och ner nätverket (Debian-specifikt)
isc-dhcp-client V:179, I:749 2884 config::låg nivå DHCP-klient
pppoeconf V:0, I:4 174 config::hjälpare konfigurationshjälp för PPPoE-anslutning
wpasupplicant V:386, I:521 3900 config::hjälpare klientstöd för WPA och WPA2 (IEEE 802.11i)
wpagui V:0, I:1 783 config::hjälpare Qt GUI-klient för wpa_supplicant
wireless-tools V:187, I:259 292 config::hjälpare verktyg för att manipulera Linux Wireless Extensions
iw V:36, I:482 332 config::hjälpare verktyg för konfiguration av trådlösa Linux-enheter
iproute2 V:748, I:983 3901 config::iproute2 iproute2, IPv6 och annan avancerad nätverkskonfiguration: ip(8), tc(8), etc
iptables V:344, I:636 2410 config::Netfilter administrationsverktyg för paketfiltrering och NAT(Netfilter)
nftables V:186, I:840 191 config::Netfilter administrationsverktyg för paketfiltrering och NAT(Netfilter)(efterföljare till {ip,ip6,arp,eb}tables)
iputils-ping V:188, I:997 188 test testa nätverkstillgängligheten för en fjärrvärd via värdnamn eller IP-adress(iproute2)
iputils-arping V:1, I:19 53 test testa nätverkets nåbarhet för en fjärrvärd som anges av ARP-adressen
iputils-tracepath V:2, I:22 50 test spåra nätverkssökvägen till en fjärrvärd
ethtool V:93, I:255 1068 test visa eller ändra inställningar för Ethernet-enheter
mtr-tiny V:4, I:40 181 test::låg nivå spåra nätverkssökvägen till en fjärrvärd (curses)
mtr V:3, I:41 230 test::låg nivå spåra nätverkssökvägen till en fjärrvärd (curses och GTK)
gnome-nettool V:0, I:10 2480 test::låg nivå verktyg för gemensam nätverksinformationshantering (GNOME)
nmap V:24, I:189 4607 test::låg nivå network mapper / portskanner (Nmap, konsol)
tcpdump V:15, I:168 1343 test::låg nivå analysator för nätverkstrafik(Tcpdump, konsol)
wireshark V:3, I:41 11260 test::låg nivå analysprogram för nätverkstrafik (Wireshark, GTK)
tshark V:2, I:23 431 test::låg nivå nätverkstrafikanalysator (konsol)
tcptrace V:0, I:1 407 test::låg nivå skapa en sammanfattning av anslutningarna från tcpdump-utdata
ntopng V:0, I:0 15604 test::låg nivå visa nätverksanvändning i webbläsaren
dnsutils I:186 22 test::låg nivå nätverksklienter som levereras med BIND: nslookup(8), nsupdate(8), dig(8)
dlint V:0, I:2 51 test::låg nivå kontrollera DNS-zoninformation med hjälp av namnserveruppslagningar
dnstracer V:0, I:1 59 test::låg nivå spåra en kedja av DNS-servrar till källan

Värdnamnsupplösningen stöds för närvarande även av NSS-mekanismen (Name Service Switch). Flödet för denna upplösning är följande.

  1. Filen "/etc/nsswitch.conf" med en stanza som "hosts: files dns" dikterar ordningen för upplösning av värdnamn. (Detta ersätter den gamla funktionaliteten i "order"-strofen i "/etc/host.conf")

  2. Metoden files anropas först. Om värdnamnet finns i filen "/etc/hosts" returnerar den alla giltiga adresser för det och avslutas. (Filen "/etc/host.conf" innehåller "multi on")

  3. Metoden dns anropas. Om värdnamnet hittas genom en förfrågan till DNS (Internet Domain Name System), som identifieras i filen "/etc/resolv.conf", returneras alla giltiga adresser för det och metoden avslutas.

En vanlig arbetsstation kan installeras med värdnamnet inställt på t.ex."host_name" och det valfria domännamnet inställt på en tom sträng. Då ser "/etc/hosts" ut på följande sätt.

127.0.0.1 localhost
127.0.1.1 host_name

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Varje rad börjar med en IP-adress och följs sedan av det tillhörande värdnamnet.

IP-adressen 127.0.1.1 i den andra raden i det här exemplet kanske inte finns på några andra Unix-liknande system. Debian Installer skapar den här posten för ett system utan en permanent IP-adress som en lösning för vissa program (t.ex. GNOME), vilket dokumenteras i felet #719621.

Host_name motsvarar det hostname som definieras i "/etc/hostname" (se Avsnitt 3.7.1, ”Värdnamnet”).

För ett system med en permanent IP-adress ska den permanenta IP-adressen användas här i stället för 127.0.1.1.

För ett system med en permanent IP-adress och ett fullständigt kvalificerat domännamn (FQDN) som tillhandahålls av Domain Name System (DNS), bör det kanoniska host_name.domain_name användas i stället för bara host_name.

"/etc/resolv.conf" är en statisk fil om paketet resolvconf inte är installerat. Om det är installerat är det en symbolisk länk. I vilket fall som helst innehåller den information som initierar resolverrutinerna. Om DNS hittas på IP= "192.168.11.1" innehåller den följande.

nameserver 192.168.11.1

Paketet resolvconf gör denna "/etc/resolv.conf" till en symbolisk länk och hanterar dess innehåll automatiskt med hjälp av hook-skript.

För en PC-arbetsstation i en typisk adhoc LAN-miljö kan värdnamnet lösas via Multicast DNS (mDNS) utöver de grundläggande fil- och dns-metoderna.

  • Avahi tillhandahåller ett ramverk för Multicast DNS Service Discovery på Debian.

  • Det motsvarar Apple Bonjour / Apple Rendezvous.

  • Instickspaketet libnss-mdns tillhandahåller värdnamnsupplösning via mDNS för GNU Name Service Switch (NSS)-funktionaliteten i GNU C Library (glibc).

  • Filen "/etc/nsswitch.conf" bör ha en strof som "hosts: files mdns4_minimal [NOTFOUND=return] dns" (se /usr/share/doc/libnss-mdns/README.Debian för andra konfigurationer).

  • Ett värdnamn som har pseudotoppdomänen ".local" som suffix löses genom att skicka ett mDNS-frågemeddelande i ett multicast UDP-paket med IPv4-adressen "224.0.0.251" eller IPv6-adressen "FF02::FB".

[Notera] Notera

Utbyggnaden av generiska toppdomäner (gTLD) i domännamnssystemet pågår. Se upp för namnkollisioner när du väljer ett domännamn som bara används inom LAN.

[Notera] Notera

Användning av paket som libnss-resolve tillsammans med systemd-resolved, eller libnss-myhostname, eller libnss-mymachine, med coressponding-listor på raden "hosts" i filen "/etc/nsswitch.conf" kan åsidosätta den traditionella nätverkskonfigurationen som diskuteras ovan. Se nss-resolve(8), systemd-resolved(8), nss-myhostname(8) och nss-mymachines(8) för mer information.

Nätverksgränssnitt initialiseras vanligtvis i "networking.service" för lo-gränssnittet och "NetworkManager.service" för andra gränssnitt på moderna Debian-skrivbordssystem under systemd.

Debian kan hantera nätverksanslutningen via en daemonprogramvara för hantering, t.ex. NetworkManager (NM) (network-manager och tillhörande paket).

  • De har egna GUI- och kommandoradsprogram som användargränssnitt.

  • De levereras med sin egen daemon som backend-system.

  • De gör det enkelt att ansluta ditt system till Internet.

  • De gör det enkelt att hantera konfigurationen av trådbundna och trådlösa nätverk.

  • De gör det möjligt för oss att konfigurera nätverket oberoende av det äldre paketet ifupdown.

[Notera] Notera

Använd inte dessa verktyg för automatisk nätverkskonfiguration för servrar. De är i första hand avsedda för mobila användare på bärbara datorer.

Dessa moderna nätverkskonfigurationsverktyg måste konfigureras på rätt sätt för att undvika konflikter med det äldre ifupdown-paketet och dess konfigurationsfil "/etc/network/interfaces".

Officiella dokumentationer för NM på Debian finns i "/usr/share/doc/network-manager/README.Debian".

I huvudsak görs nätverkskonfigurationen för desktop på följande sätt.

  1. Gör så att skrivbordsanvändaren, t.ex. foo, tillhör gruppen "netdev" genom följande (alternativt görs det automatiskt via D-bus i moderna skrivbordsmiljöer som GNOME och KDE).

    $ sudo usermod -a -G netdev foo
  2. Håll konfigurationen av "/etc/network/interfaces" så enkel som i följande exempel.

    auto lo
    iface lo inet loopback
  3. Starta om NM genom att göra följande.

    $ sudo systemctl restart NetworkManager
  4. Konfigurera ditt nätverk via GUI.

[Notera] Notera

Endast gränssnitt som inte finns listade i "/etc/network/interfaces" hanteras av NM för att undvika konflikt med ifupdown.

[Tips] Tips

Om du vill utöka NM:s nätverkskonfigurationsfunktioner, sök efter lämpliga plugin-moduler och tilläggspaket såsom network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth osv.

Under systemd kan nätverket konfigureras i /etc/systemd/network/ istället. Se systemd-resolved(8), resolved.conf(5) och systemd-networkd(8).

Detta möjliggör modern nätverkskonfiguration utan GUI.

En DHCP-klientkonfiguration kan sättas upp genom att skapa "/etc/systemd/network/dhcp.network". T.ex:

[Match]
Name=en*

[Network]
DHCP=yes

En statisk nätverkskonfiguration kan ställas in genom att skapa "/etc/systemd/network/static.network". T.ex:

[Match]
Name=en*

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

Den moderna nätverkskonfigurationen för molnet kan använda paketen cloud-init och netplan.io (se Avsnitt 3.7.4, ”Initialisering av molnsystem”).

Paketet netplan.io stöder systemd-networkd och NetworkManager som backends för nätverkskonfiguration och möjliggör deklarativ nätverkskonfiguration med hjälp av YAML-data. När du ändrar YAML:

  • Kör kommandot "netplan generate" för att generera all nödvändig backendkonfiguration från YAML.

  • Kör kommandot "netplan apply" för att tillämpa den genererade konfigurationen på backend.

Se "Netplan-dokumentation", netplan(5), netplan-generate(8) och netplan-apply(8).

Se även "Cloud-init-dokumentation " (särskilt "Konfigurationskällor " och "Netplan Passthrough") för hur cloud-init kan integrera netplan.io-konfigurationen med alternativa datakällor.

För nätverkskonfiguration på låg nivå under Linux använder du iproute2-programmen(ip(8), ...) .

Du kan använda nätverkskommandon på låg nivå som följer på ett säkert sätt eftersom de inte ändrar nätverkskonfigurationen.


[Tips] Tips

En del av dessa nätverkskonfigurationsverktyg på låg nivå finns i "/usr/sbin/". Du kan behöva ange en fullständig kommandosökväg som "/usr/sbin/ifconfig" eller lägga till "/usr/sbin" i listan "$PATH" i din "~/.bashrc".

Generisk nätverksoptimering ligger utanför ramen för denna dokumentation. Jag tar endast upp ämnen som är relevanta för konsumentanslutningen.


NM ställer normalt in optimal Maximum Transmission Unit (MTU) automatiskt.

I vissa fall kanske du vill ställa in MTU manuellt efter att ha experimenterat med ping(8) med alternativet "-M do" för att skicka ett ICMP-paket med olika datapaketstorlekar. MTU är den maximala efterföljande datapaketstorleken utan IP-fragmentering plus 28 byte för IPv4 och plus 48 byte för IPv6. I följande exempel är MTU för en IPv4-anslutning 1460 och MTU för en IPv6-anslutning 1500.

$ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
PING  (149.20.4.15) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1460

---  ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

$ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
PING  (130.89.148.77) 1432(1460) bytes of data.
1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms

---  ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
$ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

--- www.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

Denna process är Path MTU (PMTU) discovery(RFC1191) och kommandot tracepath(8) kan automatisera detta.


Utöver dessa grundläggande riktlinjer bör du känna till följande.

  • All användning av tunneleringmetoder (VPN etc.) kan minska optimal MTU ytterligare på grund av deras overhead.

  • MTU-värdet bör inte överstiga det experimentellt fastställda PMTU-värdet.

  • Ett större MTU-värde är i allmänhet bättre när andra begränsningar uppfylls.

Den maximala segmentstorleken (MSS) används som ett alternativt mått på paketstorleken. Förhållandet mellan MSS och MTU är följande.

  • MSS = MTU - 40 för IPv4

  • MSS = MTU - 60 för IPv6

[Notera] Notera

Den iptables(8)-baserade optimeringen (se Avsnitt 5.7, ”Netfilters infrastruktur”) kan klämma paketstorleken med MSS och är användbar för routern. Se "TCPMSS" i iptables(8).

TCP-genomströmningen kan maximeras genom att justera TCP-buffertstorleksparametrarna som i"TCP tuning" för moderna WAN med hög bandbredd och hög latens. Hittills har de nuvarande standardinställningarna för Debian fungerat bra även för mitt LAN som är anslutet med den snabba 1G bps FTTP-tjänsten.

Netfilter tillhandahåller infrastruktur för stateful brandvägg och NAT (Network Address Translation) med Linux kernel-moduler (se Avsnitt 3.9, ”Initialisering av kärnmodulen”).


Huvudprogrammet för användarutrymmet i netfilter är iptables(8). Du kan konfigurera netfilter manuellt interaktivt från shell, spara dess tillstånd med iptables-save(8) och återställa det via init-skript med iptables-restore(8) när systemet startas om.

Konfigurationshjälpskript som shorewall underlättar denna process.

Se dokumentationen på Netfilter Documentation (eller i "/usr/share/doc/iptables/html/").

[Tips] Tips

Även om dessa skrevs för Linux 2.4, gäller både kommandot iptables(8) och kärnfunktionen netfilter för Linux 2.6 och 3.x-kärnserierna.