Nastavení síťového stacku v Linuxu

Ethernet, IP adresy a statický routing

Statické nastavení adres a default gateway

Dejme tomu tedy, že abychom si připravili půdu pro další experimenty, budeme chtít vypnout DHCP klienta v kontejneru c1 a nastavit síť ručně:

root@c1:/# ifdown eth0
Killed old client process
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth0/00:16:3e:73:04:49
Sending on   LPF/eth0/00:16:3e:73:04:49
Sending on   Socket/fallback
DHCPRELEASE of 10.0.3.9 on eth0 to 10.0.3.1 port 67
root@c1:/# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0@if4: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 00:16:3e:73:04:49 brd ff:ff:ff:ff:ff:ff link-netnsid 0
root@c1:/# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0@if4: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:16:3e:73:04:49 brd ff:ff:ff:ff:ff:ff link-netnsid 0
root@c1:/# ip route

Teď zapneme vypnuté rozhraní eth0, nastavíme ručně IP adresu 10.0.3.9/24 na eth0 a default gateway 10.0.3.1 a vyzkoušíme, že nám opět funguje konektivita do Internetu (přes NAT na VM, ale k tomu se dostaneme až za chvili).

root@c1:/# ip link set up dev eth0
root@c1:/# ip address add 10.0.3.9/24 dev eth0
root@c1:/# ip route add default via 10.0.3.1

To je tedy nastavení a následuje kontrola:

root@c1:/# ip address
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:73:04:49 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.3.9/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe73:449/64 scope link 
       valid_lft forever preferred_lft forever

root@c1:/# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=14.5 ms
^C
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 14.484/14.484/14.484/0.000 ms

Chytáky:

  1. rozhraní musí být zapnuté (UP) - zda je rozhraní zapnuté je vidět ve výpisu ip link i ip address: Hledáme řádek <BROADCAST,MULTICAST,UP,LOWER_UP>. Pokud rozhraní není zapnuté, lze sice všemožně nastavovat, ale stejně nefunguje. Bohužel to ale nefunguje vždy jako u síťového hardwaru (routerů a switchů), kde je zvykem, že pokud rozrhaní vypnete, tak se skutečné vypne PHY či optický modul a zcela se ztrátí vysílaný signál (rozhraní zkrátka zhasne). U běžných síťových karet může být HW aktivní i přes to, že je rozhraní v Linuxu vypnuté. Zdá se ale, že se chování moderních síťových karet začíná přibližovat routerům a switchům, nicméné spoléhat na to nelze.

  2. Když konfigurujeme adresu na rozhraní, nesmíme zapomenout na masku - v našem případě tedy 10.0.3.9/24 . Pokud masku nevyplníme explicitně, tak výchozí je /32 pro IPv4 a /128 pro IPv6, tedy jen jedna adresa. Tím pádem by nevznikla connected route a žádná další adresa ze subnetu 10.0.3.0/24 by nebyla dostupná. To se týká i adresy default gateway, tedy 10.0.3.1 a proto by nám tedy nefungovalo připojení k Internetu.

    Nenechte se zmást chováním zastaralého nástroje ifconfig, ten opravdu masku často nepotřeboval, protože si masku dovozoval z takzvaných tříd IP adres. To je však překonaný koncept, který by se neměl pro IPv4 používat od dob zavedení CIDR (Classless Interdomain Routing) v roce 1994. Nemá to tedy smysl rozebírat, protože to je opravdu jen historická poznámka, která je dnes irelevantní, stejně jako nástroj ifconfig.