Spis treści
01. Historia sieci w Linux
02. Modele OSI i TCP/IP
03. Interfejsy sieciowe
04. Adresacja IP i maski
05. Routing i bramy
06. DNS – resolucja nazw
07. Porty i gniazda
08. Firewall – iptables/nftables
09. Diagnostyka sieci
10. Kluczowe pliki konfiguracyjne
11. Nowoczesne narzędzia
12. Ściągawka komend
Zrozumienie działania sieci w systemie Linux jest kluczowe dla każdego, kto zajmuje się administracją, DevOpsem lub bezpieczeństwem IT. Choć wiele narzędzi upraszcza dziś konfigurację, pod powierzchnią nadal działa rozbudowany i bardzo elastyczny stos sieciowy, którego korzenie sięgają początków internetu. Artykuł przedstawia zarówno podstawy teoretyczne, jak i praktyczne aspekty pracy z siecią w Linuksie — od modeli komunikacji i adresacji IP, przez konfigurację interfejsów i routingu, aż po diagnostykę i nowoczesne mechanizmy filtrowania ruchu. Dzięki temu możliwe jest zrozumienie nie tylko tego, jak wykonać konkretne operacje, ale również dlaczego system działa w określony sposób.
01. Historia sieci w systemach Linux
Aby zrozumieć, jak działa sieć w Linux, warto cofnąć się do początków — do czasów, gdy komputery były wielkości szaf i nikt nie marzył, że kiedyś będą rozmawiać ze sobą w czasie rzeczywistym.
1969
ARPANET — narodziny sieci
Departament Obrony USA finansuje sieć ARPANET łączącą cztery uniwersytety. Pierwsza wiadomość to „lo” — system zawieszał się po dwóch literach słowa „login”. Mimo to fundament nowoczesnego internetu był już gotowy.
1974
TCP/IP — Vint Cerf i Bob Kahn
Opublikowanie specyfikacji protokołu TCP przez Cerfa i Kahna. To przełomowy moment — protokół pozwala różnym sieciom komunikować się ze sobą, tworząc sieć sieci. Model ten do dziś jest fundamentem internetu.
1983
BSD Unix — pierwszy stos sieciowy
4.2BSD wprowadza implementację gniazd (sockets) i pełny stos TCP/IP dla systemów Unix. To właśnie ten kod stał się wzorcem dla wszystkich późniejszych implementacji, w tym dla Linuksa. Interfejs socket() z 1983 roku jest używany do dziś.
1991
Linux 0.01 — brak sieci
Linus Torvalds publikuje pierwszą wersję Linuksa. Nie posiada ona jeszcze obsługi sieci — to czysty jądro, które trzeba wszystkiego nauczyć od początku.
1993
Linux 0.99 — pierwsze gniazda
Jądro Linux otrzymuje implementację interfejsu gniazd BSD. Ross Biro, Fred van Kempen i Donald Becker tworzą pierwsze sterowniki sieciowe. Pojawiają się narzędzia ifconfig i route z pakietu net-tools.
1995–1999
Dojrzały stos sieciowy
Linux 2.0 i 2.2 przynoszą pełne wsparcie dla IPv4, pakiet iproute2 (narzędzie ip), obsługę mostów i aliasów interfejsów. Alexey Kuznetsov przepisuje znaczną część stosu sieciowego, wprowadzając zaawansowany routing (policy routing) nieobecny w żadnym komercyjnym systemie.
2001–2004
netfilter i iptables
Linux 2.4 wprowadza podsystem netfilter z narzędziem iptables, zastępując stary ipchains. To rewolucja w filtracji pakietów — Linux staje się pełnoprawnym, elastycznym firewallem klasy enterprise.
2008–2012
IPv6, namespaces, Open vSwitch
Pełna obsługa IPv6, przestrzenie nazw sieci (network namespaces) tworzące fundament konteneryzacji (Docker, LXC), VLAN, bonding. Linux staje się podstawą infrastruktury chmurowej.
2014–dziś
nftables, eBPF, WireGuard
Wprowadzenie nftables jako następcy iptables, programowalny stos sieciowy z eBPF umożliwiający filtrację pakietów z wydajnością zbliżoną do sprzętowej, integracja WireGuard bezpośrednio w jądrze (5.6+). Linux 6.x — najbardziej zaawansowany stos sieciowy open source na świecie.
Dlaczego warto znać historię?
Wiele komend i plików konfiguracyjnych w Linux to bezpośrednie dziedzictwo decyzji sprzed 30–40 lat. Wiedząc, skąd pochodzi ifconfig czy plik /etc/hosts, łatwiej zrozumieć dlaczego pewne rzeczy działają tak, a nie inaczej.
02. Modele OSI i TCP/IP
Komunikacja sieciowa jest zorganizowana warstwowo. Dwa najpopularniejsze modele to OSI (7 warstw, teoretyczny) i TCP/IP (4 warstwy, praktyczny). Linux implementuje model TCP/IP.
Model OSI — 7 warstw
7
Aplikacji
HTTP, FTP, SMTP, DNS, SSH
Interfejs między oprogramowaniem a siecią. Tu pracują aplikacje użytkownika.
6
Prezentacji
TLS/SSL, MIME, ASCII, JPEG
Szyfrowanie, kompresja i formatowanie danych.
5
Sesji
NetBIOS, RPC, PPTP
Zarządzanie sesjami i synchronizacja połączeń.
4
Transportu
TCP, UDP, SCTP
Niezawodna transmisja danych, kontrola przepływu, porty.
3
Sieci
IP, ICMP, OSPF, BGP
Adresowanie logiczne (IP), routing między sieciami.
2
Łącza danych
Ethernet, Wi-Fi (802.11), ARP
Ramki, adresy MAC, dostęp do medium transmisyjnego.
1
Fizyczna
Kable, światłowód, fale radiowe
Bity na medium transmisyjnym. Napięcia, częstotliwości, złącza.
Model TCP/IP — 4 warstwy (implementacja w Linux)
Aplikacji
HTTP · HTTPS · SSH · DNS · FTP · SMTP
Odpowiada warstwom 5–7 OSI. Aplikacje komunikują się przez gniazda (sockets). W Linux: /proc/net/, wywołania systemowe socket(), bind(), connect().
Transportu
TCP · UDP · SCTP · DCCP
Segmentacja danych, numery portów, kontrola błędów. TCP = niezawodność, UDP = szybkość. W jądrze: net/ipv4/tcp*.c, net/ipv4/udp.c.
Internetu
IPv4 · IPv6 · ICMP · ARP · OSPF
Adresowanie IP, routing pakietów między sieciami. Tablica routingu w jądrze, netfilter, obsługa przez ip route.
Dostępu do sieci
Ethernet · Wi-Fi · PPP · VLAN
Sterowniki kart sieciowych, ramki Ethernet, adresy MAC. W Linux: /sys/class/net/, sterowniki w drivers/net/.
Jak zapamiętać model OSI?
Od dołu do góry: „Przez Łącze Sieciową Trasę Szukam Paketów Aplikacji” (Fizyczna, Łącza, Sieciowa, Transportu, Sesji, Prezentacji, Aplikacji). W praktyce sieciowej Linux większość pracy odbywa się na warstwach 3 i 4.
03. Interfejsy sieciowe
Interfejs sieciowy to punkt wejścia-wyjścia dla danych sieciowych w systemie Linux. Może reprezentować fizyczną kartę sieciową lub być wirtualnym urządzeniem programowym.
eth0 / enp3s0
Ethernet
Fizyczna karta sieciowa. Nowe nazwy (enp3s0) to predictable network names — kodują numer szyny PCI, co zapobiega zmianie nazw po restarcie.
wlan0 / wlp2s0
Wi-Fi
Bezprzewodowa karta sieciowa. Obsługiwana przez podsystem cfg80211/mac80211 w jądrze.
lo
Loopback
Wirtualny interfejs zwrotny. Adres 127.0.0.1. Dane wysyłane na lo wracają do tego samego systemu — niezbędny dla aplikacji lokalnych.
docker0 / virbr0
Bridge / Wirtualny
Wirtualny most sieciowy tworzony przez Docker, libvirt i inne narzędzia wirtualizacji.
tun0 / tap0
Tunele VPN
Wirtualne interfejsy tunelowe. TUN = pakiety IP (warstawa 3), TAP = ramki Ethernet (warstwa 2). Używane przez OpenVPN, WireGuard.
bond0 / team0
Bonding / Teaming
Łączenie wielu kart fizycznych w jedno logiczne urządzenie. Zapewnia redundancję lub zwiększa przepustowość.
Wyświetlanie interfejsów — stare vs nowe narzędzia
Stare narzędzia (net-tools)
ifconfig— lista interfejsówifconfig eth0— szczegółyifconfig eth0 up/down— włącz/wyłączifconfig eth0 192.168.1.10— ustaw IProute -n— tablica routingunetstat -i— statystyki interfejsów
Nowe narzędzia (iproute2)
ip link show— lista interfejsówip addr show eth0— szczegółyip link set eth0 up/down— włącz/wyłączip addr add 192.168.1.10/24 dev eth0ip route show— tablica routinguip -s link show— statystyki
Podstawowe operacje na interfejsach
bash — zarządzanie interfejsami (iproute2)
# Wyświetl wszystkie interfejsy z adresami IP
ip addr show
1: lo: <LOOPBACK,UP> mtu 65536
link/loopback 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0
# Wyświetl tylko interfejsy (bez adresów)
ip link show
# Włącz / wyłącz interfejs
sudo ip link set eth0 up
sudo ip link set eth0 down
# Dodaj adres IP do interfejsu
sudo ip addr add 192.168.1.50/24 dev eth0
# Usuń adres IP z interfejsu
sudo ip addr del 192.168.1.50/24 dev eth0
# Zmień MTU (Maximum Transmission Unit)
sudo ip link set eth0 mtu 9000
# Sprawdź statystyki pakietów interfejsu
ip -s link show eth0
RX: bytes packets errors dropped
1234567 8901 0 0
TX: bytes packets errors dropped
987654 5432 0 0
Zmiany tymczasowe vs. trwałe
Komendy ip addr add i ip link set wprowadzają tymczasowe zmiany — znikają po restarcie systemu. Aby utrwalić konfigurację, użyj NetworkManager (nmcli), systemd-networkd lub edytuj pliki w /etc/network/ (Debian) albo /etc/sysconfig/network-scripts/ (RHEL).
Pliki do modyfikacji:

04. Adresacja IP i maski podsieci
Adres IP jest fundamentem komunikacji sieciowej. W Linux pracujemy z IPv4 (32-bitowy) i IPv6 (128-bitowy). Znajomość adresacji jest konieczna przy konfiguracji sieci.
Klasy adresów prywatnych (RFC 1918)
| Zakres | Maska (CIDR) | Liczba hostów | Typowe zastosowanie |
|---|---|---|---|
| 10.0.0.0 – 10.255.255.255 | /8 | 16 777 214 | Duże sieci korporacyjne, data center |
| 172.16.0.0 – 172.31.255.255 | /12 | 1 048 574 | Sieci średniej wielkości |
| 192.168.0.0 – 192.168.255.255 | /16 | 65 534 | Sieci domowe, małe biura |
| 127.0.0.0 – 127.255.255.255 | /8 | — | Loopback (lokalny) |
| 169.254.0.0 – 169.254.255.255 | /16 | 65 534 | Link-local (APIPA, brak DHCP) |
Notacja CIDR — obliczenia podsieci
bash — analiza podsieci
# ipcalc — kalkulator podsieci (apt install ipcalc)
ipcalc 192.168.1.0/24
Address: 192.168.1.0 11000000.10101000.00000001. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Network: 192.168.1.0/24
Broadcast: 192.168.1.255
HostMin: 192.168.1.1
HostMax: 192.168.1.254
Hosts/Net: 254
# Sprawdź do jakiej podsieci należy dany adres
ipcalc 10.0.15.47/20
Network: 10.0.0.0/20
HostMin: 10.0.0.1
HostMax: 10.0.15.254
Hosts/Net: 4094
# python3 — szybkie obliczenia bez dodatkowych pakietów
python3 -c "import ipaddress; n=ipaddress.IPv4Network('192.168.10.0/26'); print(f'Hosts: {n.num_addresses-2}, Broadcast: {n.broadcast_address}')"
Hosts: 62, Broadcast: 192.168.10.63


IPv6 — podstawy
bash — IPv6
# Wyświetl adresy IPv6 ip -6 addr show # Dodaj adres IPv6 sudo ip -6 addr add 2001:db8::1/64 dev eth0 # Ping IPv6 (ping6 lub ping z flagą -6) ping -6 google.com ping6 ::1 # loopback IPv6 # Typy adresów IPv6: # ::1/128 — loopback (odpowiednik 127.0.0.1) # fe80::/10 — link-local (automatycznie przypisywane) # fc00::/7 — unique local (odpowiednik RFC1918) # 2001:db8::/32 — dokumentacja/przykłady (nie routowalne) # ::/0 — trasa domyślna (odpowiednik 0.0.0.0/0)
05. Routing i bramy domyślne
Routing to proces decydowania, którą drogą pakiet powinien trafić do celu. Linux posiada jeden z najbardziej zaawansowanych stosów routingowych wśród systemów operacyjnych.
Tablica routingu — odczyt i zarządzanie
bash — routing
# Wyświetl tablicę routingu (nowoczesna metoda) ip route show default via 192.168.1.1 dev eth0 proto dhcp metric 100 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 10.0.0.0/8 via 10.0.0.1 dev eth1 # Dodaj trasę do podsieci przez bramę sudo ip route add 10.10.0.0/16 via 192.168.1.254 # Dodaj trasę przez konkretny interfejs sudo ip route add 172.16.0.0/12 dev eth1 # Zmień / dodaj bramę domyślną sudo ip route del default sudo ip route add default via 192.168.1.1 dev eth0 # Usuń trasę sudo ip route del 10.10.0.0/16 # Sprawdź którą trasą pójdzie pakiet do danego hosta ip route get 8.8.8.8 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100 uid 1000
Włączanie przekazywania pakietów (IP forwarding)
bash — IP forwarding (router/NAT)
# Sprawdź aktualny stan (0=wyłączone, 1=włączone) cat /proc/sys/net/ipv4/ip_forward 0 # Włącz tymczasowo (do restartu) sudo sysctl -w net.ipv4.ip_forward=1 # Włącz trwale — dodaj do /etc/sysctl.conf lub /etc/sysctl.d/ echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-ip-forward.conf sudo sysctl --system # NAT (maskarada) — udostępnij internet dla sieci LAN # eth0 = WAN (internet), eth1 = LAN (sieć lokalna) sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
06. DNS — rozwiązywanie nazw domenowych
DNS (Domain Name System) przekłada nazwy domenowe (jak google.com) na adresy IP. W Linux resolucja nazw przebiega przez kilka warstw: cache lokalny → /etc/hosts → /etc/resolv.conf → serwer DNS.
Konfiguracja i diagnostyka DNS
bash — DNS
# Sprawdź aktualny plik resolv.conf (konfiguracja DNS) cat /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 search example.local # Sprawdź kolejność resolucji (nsswitch.conf) grep hosts /etc/nsswitch.conf hosts: files dns myhostname # "files" = /etc/hosts, "dns" = serwer DNS, kolejność ma znaczenie! # Proste zapytanie DNS — nslookup (stare) nslookup google.com # Zaawansowane zapytania — dig (zalecane) dig google.com # rekord A (IPv4) dig google.com AAAA # rekord AAAA (IPv6) dig google.com MX # rekordy poczty dig google.com NS # serwery nazw dig @1.1.1.1 google.com # zapytaj konkretny serwer DNS dig -x 8.8.8.8 # reverse DNS (PTR) dig google.com +short # tylko adres IP # host — szybkie zapytanie host google.com google.com has address 142.250.185.78 # Pliki hosts — lokalne wpisy (priorytet przed DNS) cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost 192.168.1.200 mojserwer.local mojserwer
systemd-resolved — nowoczesny resolver
bash — systemd-resolved
# Status i cache DNS (Ubuntu 18.04+, Fedora, Arch) resolvectl status resolvectl query google.com # Wyczyść cache DNS sudo resolvectl flush-caches # Sprawdź statystyki cache resolvectl statistics
07. Porty, gniazda i aktywne połączenia
Port to 16-bitowa liczba (0–65535) identyfikująca konkretną usługę na danym hoście. Razem z adresem IP i protokołem tworzy gniazdo (socket) — unikalny identyfikator połączenia.
Popularne porty:
22 – SSH – TCP
25 – SMTP – TCP
53- DNS – TCP/UDP
80 – HTTP – TCP
443 – HTTPS – TCP
3306 – MySQL – TCP
5432 – PostgreSQL – TCP
6379 – Redis – TCP
Sprawdzanie otwartych portów i połączeń
bash — ss i netstat
# ss — nowoczesny zamiennik netstat (zalecany)
ss -tuln # nasłuchujące porty TCP+UDP (numerycznie)
ss -tulnp # + nazwa procesu (wymaga sudo)
ss -tn # aktywne połączenia TCP
ss -s # podsumowanie statystyk
ss -tp state established # tylko ustanowione połączenia
# Przykładowe wyjście ss -tuln:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:*
# Znajdź który proces używa portu 80
sudo ss -tulnp | grep :80
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
# lsof — lista otwartych plików (w tym gniazd)
sudo lsof -i :80 # kto używa portu 80
sudo lsof -i TCP # wszystkie gniazda TCP
sudo lsof -p 1234 -i # gniazda konkretnego PID
08. Firewall — iptables i nftables
Linux posiada wbudowany w jądro system filtrowania pakietów — netfilter. Narzędzia do jego zarządzania ewoluowały: ipchains → iptables → nftables. W nowych systemach dominuje nftables lub warstwa wyżej: ufw (Ubuntu) i firewalld (RHEL/Fedora).
iptables — podstawy
bash — iptables
# Wyświetl reguły (wszystkie łańcuchy) sudo iptables -L -v -n sudo iptables -L -v -n --line-numbers # z numerami linii # Zezwól na ruch przychodzący SSH (port 22) sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Zezwól na HTTP i HTTPS sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT # Zezwól na established/related (ważne — odpowiedzi na wychodzące) sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Zezwól na loopback sudo iptables -A INPUT -i lo -j ACCEPT # Zablokuj wszystko inne przychodzące (TYLKO po dodaniu powyższych reguł!) sudo iptables -P INPUT DROP # Usuń regułę po numerze linii sudo iptables -D INPUT 3 # Zapisz reguły (Ubuntu/Debian) sudo iptables-save > /etc/iptables/rules.v4
ufw — przyjazny firewall dla Ubuntu
bash — ufw (Ubuntu/Debian)
sudo apt install ufw (jeśli nie ma na serwerze zainstaluj ufw)
sudo ufw status verbose # Status i aktualne reguły
sudo ufw enable # Włącz firewall
sudo ufw disable # Wyłącz firewall
sudo ufw allow 22/tcp # Zezwól SSH
sudo ufw allow 'Nginx Full' # Zezwól HTTP+HTTPS (profil)
sudo ufw deny 23/tcp # Zablokuj Telnet
sudo ufw delete allow 23/tcp # Usuń regułę
sudo ufw default deny incoming # Domyślnie blokuj ruch przychodzący
sudo ufw default allow outgoing # Domyślnie zezwalaj wychodzący
# Ogranicz liczbę połączeń (ochrona przed brute-force SSH)
sudo ufw limit ssh
nftables — nowoczesny następca iptables
bash — nftables
# Wyświetl wszystkie reguły
sudo nft list ruleset
# Prosta konfiguracja w /etc/nftables.conf
table inet filter {
chain input {
type filter hook input priority 0;
policy drop;
iif lo accept # loopback OK
ct state established,related accept # odpowiedzi OK
tcp dport 22 accept # SSH
tcp dport { 80, 443 } accept # Web
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
# Załaduj konfigurację
sudo nft -f /etc/nftables.conf
09. Diagnostyka sieci — od ping do tcpdump
Umiejętność diagnostyki problemów sieciowych to jedna z najważniejszych kompetencji administratora Linux. Narzędzia sieciowe tworzą hierarchię od prostych testów po głęboką analizę pakietów.
ping — podstawowy test łączności
bash — ping
ping 8.8.8.8 # ping do Google DNS ping -c 4 google.com # 4 pakiety i stop ping -i 0.2 192.168.1.1 # interwał 0.2s (szybszy) ping -s 1400 192.168.1.1 # duże pakiety (test MTU) ping -M do -s 1472 192.168.1.1 # test MTU bez fragmentacji ping -6 ipv6.google.com # ping IPv6
traceroute — śledzenie trasy pakietu
bash — traceroute i mtr
traceroute google.com # klasyczny traceroute (UDP) traceroute -T google.com # używaj TCP (przechodzi przez firewall) traceroute -I google.com # używaj ICMP (jak Windows tracert) # mtr — połączenie ping+traceroute w czasie rzeczywistym (NAJLEPSZE!) mtr google.com # interaktywny widok mtr --report -c 20 8.8.8.8 # raport z 20 pakietami mtr --tcp --port 443 google.com # przez TCP 443
tcpdump — przechwytywanie i analiza pakietów
bash — tcpdump
# Nasłuchuj na interfejsie eth0 sudo tcpdump -i eth0 # Filtruj po hoście sudo tcpdump -i eth0 host 192.168.1.1 # Filtruj po porcie sudo tcpdump -i eth0 port 80 # Filtruj po protokole i porcie docelowym sudo tcpdump -i eth0 tcp dst port 443 # Zapisz przechwycone pakiety do pliku .pcap sudo tcpdump -i eth0 -w /tmp/capture.pcap # Odczytaj plik pcap (analiza w Wireshark lub tcpdump) tcpdump -r /tmp/capture.pcap # Pokaż zawartość pakietów (payload) w ASCII sudo tcpdump -i eth0 -A port 80 # Złożony filtr — HTTP bez lokalnych połączeń sudo tcpdump -i eth0 port 80 and not host 127.0.0.1 -n
netcat (nc) — szwajcarski scyzoryk sieci
bash — netcat
# Sprawdź czy port jest otwarty
nc -zv 192.168.1.1 22
Connection to 192.168.1.1 22 port [tcp/ssh] succeeded!
# Skanowanie zakresu portów
nc -zv 192.168.1.1 20-25
# Prosty serwer TCP (nasłuchuj na porcie 9999)
nc -l 9999
# Klient — połącz i wyślij dane
echo "Hello Server" | nc 192.168.1.1 9999
# Sprawdź banner/wersję serwisu
nc 192.168.1.1 80
HEAD / HTTP/1.0 # wpisz i naciśnij Enter dwa razy
curl i wget — testowanie HTTP/HTTPS
bash — curl diagnostyka
sudo apt install curl (jeśli nie masz na serwerze)
# Sprawdź odpowiedź HTTP z nagłówkami
curl -I https://example.com
# Zmierz czas połączenia, TTFB i całkowity czas
curl -w "\nDNS: %{time_namelookup}s\nConnect: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" -o /dev/null -s https://google.com
DNS: 0.012s
Connect: 0.028s
TTFB: 0.156s
Total: 0.189s
# Testuj z konkretnym DNS (bez cache systemowego)
curl --dns-servers 8.8.8.8 https://example.com
# Sprawdź certyfikat SSL
curl -v --head https://example.com 2>&1 | grep -A5 "SSL"
10. Kluczowe pliki konfiguracyjne sieci
Linux przechowuje konfigurację sieci w różnych lokalizacjach w zależności od dystrybucji. Poniżej znajdziesz mapę najważniejszych plików.
| Plik / Ścieżka | Zastosowanie | Dystrybucja |
|---|---|---|
| /etc/hosts | Lokalne mapowania nazw na IP (priorytet przed DNS) | Wszystkie |
| /etc/resolv.conf | Serwery DNS, domeny wyszukiwania | Wszystkie |
| /etc/nsswitch.conf | Kolejność resolucji nazw (files, dns, mdns) | Wszystkie |
| /etc/hostname | Nazwa hosta systemu | Wszystkie |
| /etc/network/interfaces | Konfiguracja interfejsów sieciowych (legacy) | Debian/Ubuntu |
| /etc/netplan/*.yaml | Konfiguracja sieci w formacie YAML | Ubuntu 18.04+ |
| /etc/NetworkManager/ | Konfiguracja NetworkManager i profili połączeń | Fedora/RHEL/Ubuntu |
| /etc/sysconfig/network-scripts/ifcfg-* | Stare pliki konfiguracji interfejsów | RHEL 7 i starsze |
| /etc/systemd/network/*.network | Konfiguracja systemd-networkd | Arch, Debian, serwery |
| /proc/net/ | Wirtualny system plików — live dane z jądra | Wszystkie |
| /sys/class/net/ | Informacje o interfejsach (MTU, MAC, speed) | Wszystkie |
| /etc/sysctl.conf | Parametry jądra (ip_forward, tcp bufory) | Wszystkie |
Netplan — konfiguracja Ubuntu (przykład)
/etc/netplan/01-network.yaml
network:
version: 2
renderer: networkd # lub NetworkManager
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
wifis:
wlan0:
dhcp4: true
access-points:
"NazwaSieci":
password: "HasloWifi"
# Zastosuj konfigurację
sudo netplan try # testuj (auto-rollback po 120s)
sudo netplan apply # zastosuj na stałe
11. Nowoczesne narzędzia sieciowe Linux
Ekosystem narzędzi sieciowych Linux stale się rozwija. Obok klasycznych poleceń pojawiają się nowe, wydajniejsze alternatywy.
| Stare narzędzie | Nowe narzędzie | Pakiet | Zalety nowego |
|---|---|---|---|
| ifconfig | ip addr | iproute2 | Obsługa IPv6, alias, polityki routingu, VRF |
| route | ip route | iproute2 | Policy routing, wiele tablic, metryki |
| arp | ip neigh | iproute2 | Cache sąsiadów IPv4 i IPv6 (NDP) |
| netstat | ss | iproute2 | 10x szybszy, bardziej szczegółowy |
| iptables | nftables | nftables | Jedna składnia dla IPv4/IPv6/ARP, atomiczne aktualizacje |
| brctl | ip link | iproute2 | Zarządzanie mostami przez ip link |
| iwconfig | iw / nmcli | iw / NetworkManager | Pełna obsługa 802.11ac/ax, WPA3 |
| nslookup | dig / resolvectl | bind-utils | Szczegółowe odpowiedzi DNS, DNSSEC |
| traceroute | mtr | mtr | Ciągły monitoring trasy, statystyki utraty |
eBPF — rewolucja w sieciowaniu
eBPF (extended Berkeley Packet Filter) to technologia umożliwiająca uruchamianie kodu w jądrze Linux bez konieczności modyfikowania jego kodu źródłowego. W kontekście sieci: narzędzie bpftrace, cilium i XDP potrafią filtrować i przekierowywać pakiety z przepustowością wielokrotnie przekraczającą klasyczne iptables. To obecny kierunek rozwoju sieci w Linux.
12. Ściągawka komend sieciowych Linux
Interfejsy i adresy IP
- ip addr show – Wszystkie interfejsy z adresami
- ip link show – Interfejsy (bez adresów IP)
- ip addr add 10.0.0.1/24 dev eth0 – Dodaj adres IP
- ip link set eth0 up/down – Włącz / wyłącz interfejs
- ip -s link show eth0 – Statystyki TX/RX
- ip neigh show – Tablica ARP/NDP
Routing
- ip route show – Tablica routingu
- ip route get 8.8.8.8 – Trasa do konkretnego IP
- ip route add 10.0.0.0/8 via 192.168.1.1 – Dodaj trasę statyczną
- ip route del default – Usuń bramę domyślną
- ip route add default via 192.168.1.1 – Ustaw bramę domyślną
Diagnostyka
- ping -c 4 8.8.8.8 – Test łączności (4 pakiety)
- traceroute google.com – Trasa pakietu przez sieć
- mtr –report google.com – Raport ping+traceroute
- ss -tuln – Otwarte porty nasłuchujące
- ss -tulnp – Porty + nazwy procesów
- sudo lsof -i :80 – Kto używa portu 80
DNS
- dig google.com – Zapytanie DNS (rekord A)
- dig google.com MX – Rekordy poczty
- dig @8.8.8.8 google.com – Użyj konkretnego serwera DNS
- host google.com – Szybka resolucja
- resolvectl status – Status systemd-resolved
- sudo resolvectl flush-caches – Wyczyść cache DNS
Przechwytywanie pakietów
- sudo tcpdump -i eth0 – Przechwytuj ruch na eth0
- sudo tcpdump -i eth0 port 80 – Tylko port 80
- sudo tcpdump -i eth0 -w file.pcap – Zapisz do pliku
- tcpdump -r file.pcap – Odczytaj plik pcap
- nc -zv host port – Sprawdź dostępność portu
Firewall (ufw)
- sudo ufw status verbose – Status i reguły
- sudo ufw allow 22/tcp – Zezwól SSH
- sudo ufw deny 23 – Zablokuj Telnet
- sudo ufw limit ssh – Rate-limit SSH (anty-brute)
- sudo iptables -L -v -n – Reguły iptables
- sudo nft list ruleset – Reguły nftables
Podsumowanie
Artykuł stanowi przekrojowe wprowadzenie do sieci w systemie Linux, obejmujące zarówno historię, jak i praktyczne aspekty konfiguracji oraz diagnostyki.
Na początku przedstawiono rozwój sieci komputerowych — od ARPANET-u i powstania TCP/IP, przez implementację stosu sieciowego w BSD, aż po ewolucję Linuksa od systemu bez obsługi sieci do zaawansowanej platformy z technologiami takimi jak netfilter, nftables, eBPF i WireGuard. Zwrócono uwagę, że wiele współczesnych rozwiązań wynika z dawnych decyzji projektowych.
Następnie omówiono modele warstwowe OSI i TCP/IP, wyjaśniając rolę poszczególnych warstw w komunikacji sieciowej, przy czym podkreślono, że Linux opiera się na modelu TCP/IP.
Kolejne części dotyczą interfejsów sieciowych, zarówno fizycznych, jak i wirtualnych, oraz sposobów ich konfiguracji z użyciem nowoczesnych narzędzi takich jak iproute2. Wyjaśniono także podstawy adresacji IP, w tym IPv4 i IPv6, zakresy prywatne oraz notację CIDR.
Opisano zasady routingu, działanie tablic routingu i bramy domyślnej, a także mechanizm przekazywania pakietów i NAT. Następnie przedstawiono działanie systemu DNS oraz narzędzia służące do diagnozowania problemów z rozwiązywaniem nazw.
W dalszej części wyjaśniono pojęcia portów i gniazd oraz metody monitorowania aktywnych połączeń. Omówiono również mechanizmy filtrowania ruchu w systemie Linux, w tym iptables i nftables, a także prostsze narzędzia jak ufw.
Artykuł zawiera także przegląd narzędzi diagnostycznych, takich jak ping, traceroute, mtr, tcpdump, netcat i curl, które pozwalają analizować problemy sieciowe na różnych poziomach.
Na końcu przedstawiono najważniejsze pliki konfiguracyjne związane z siecią oraz nowoczesne narzędzia zastępujące starsze rozwiązania. Całość zamyka zestaw najczęściej używanych komend, stanowiący praktyczną ściągawkę dla administratora.
