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:
rozhraní musí být zapnuté (UP) - zda je rozhraní zapnuté je vidět ve výpisu
ip link
iip 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.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.