Good

Networking в Linux

Мережевий стек Linux — основа всіх серверних та мережевих рішень. Розуміння його структури критичне для діагностики проблем та налаштування VPN, Docker та мережевих сервісів.

💡 Чому це важливо для UMTC?
Мережева діагностика Linux використовується щодня: - Налаштування WireGuard тунелів - Troubleshooting LTE підключень - Моніторинг трафіку на серверах

Network Stack в Linux

flowchart TB
    subgraph userspace["User Space"]
        APPS["📱 Applications<br/>curl, ssh, nginx"]
    end

    subgraph kernel["Kernel Space"]
        SOCKET["Socket Layer<br/>AF_INET, AF_UNIX"]
        TCP["TCP / UDP<br/>Транспортний рівень"]
        IP["IP Layer<br/>Routing, Forwarding"]
        NETFILTER["Netfilter<br/>iptables / nftables"]
        DRIVERS["Network Device Drivers"]
    end

    subgraph hardware["Hardware"]
        NIC["🔌 NIC<br/>eth0, wlan0, wg0"]
    end

    APPS -->|"sockets"| SOCKET
    SOCKET --> TCP
    TCP --> IP
    IP --> NETFILTER
    NETFILTER --> DRIVERS
    DRIVERS --> NIC

    style userspace fill:#dbeafe
    style kernel fill:#fef3c7
    style hardware fill:#d1fae5

Інтерфейси

Перегляд інтерфейсів

# ip — сучасний інструмент (замість ifconfig)
ip link show
ip link

# Короткий вивід
ip -br link
ip -br addr

# Детальна інформація
ip addr show
ip addr show eth0

# Статистика
ip -s link show eth0

Naming схеми

flowchart LR
    subgraph legacy["Традиційні (застарілі)"]
        ETH["eth0, eth1"]
        WLAN["wlan0"]
    end

    subgraph modern["Predictable Names (systemd)"]
        direction TB
        ENO["eno1<br/>Onboard"]
        ENS["ens3<br/>Hotplug slot"]
        ENP["enp0s3<br/>PCI bus/slot"]
        ENX["enx78e7...<br/>MAC address"]
    end

    legacy -.->|"systemd"| modern

    style legacy fill:#fee2e2
    style modern fill:#d1fae5
Префікс Значення Приклад
en Ethernet enp0s3
wl Wireless LAN wlp2s0
ww Wireless WAN wwp0s29

Розбір enp0s3:
- en — Ethernet
- p0 — PCI bus 0
- s3 — slot 3

Управління інтерфейсами

# Увімкнути/вимкнути інтерфейс
ip link set eth0 up
ip link set eth0 down

# Змінити MTU
ip link set eth0 mtu 9000

# Змінити MAC адресу
ip link set eth0 address 00:11:22:33:44:55

IP адресація

Перегляд та налаштування

# Переглянути IP адреси
ip addr show
ip addr show eth0

# Додати IP адресу
ip addr add 192.168.1.100/24 dev eth0
ip addr add 192.168.1.101/24 dev eth0  # можна кілька

# Видалити IP адресу
ip addr del 192.168.1.100/24 dev eth0

# Видалити всі адреси
ip addr flush dev eth0

Статична IP (Netplan — Ubuntu)

# /etc/netplan/01-netcfg.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
# Застосувати
netplan apply
netplan try  # з можливістю відкату

Статична IP (nmcli — NetworkManager)

# Показати з'єднання
nmcli connection show

# Створити статичне з'єднання
nmcli connection add type ethernet con-name "static-eth0" ifname eth0 \
    ipv4.addresses 192.168.1.100/24 \
    ipv4.gateway 192.168.1.1 \
    ipv4.dns "8.8.8.8,8.8.4.4" \
    ipv4.method manual

# Активувати
nmcli connection up "static-eth0"

# Модифікувати існуюче
nmcli connection modify "eth0" ipv4.addresses 192.168.1.101/24
nmcli connection up "eth0"

Статична IP (systemd-networkd)

# /etc/systemd/network/10-static.network
[Match]
Name=eth0

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
systemctl restart systemd-networkd

Routing

Перегляд маршрутів

# Таблиця маршрутів
ip route show
ip route
ip r

# Маршрут до конкретного хоста
ip route get 8.8.8.8

Управління маршрутами

# Додати маршрут
ip route add 10.0.0.0/8 via 192.168.1.1
ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0

# Default gateway
ip route add default via 192.168.1.1

# Видалити маршрут
ip route del 10.0.0.0/8
ip route del default

# Замінити маршрут
ip route replace default via 192.168.1.2

Policy Routing

# Кілька таблиць маршрутизації
# /etc/iproute2/rt_tables
# 200 custom

# Додати маршрут в таблицю
ip route add default via 10.0.0.1 table custom

# Правило: трафік з 192.168.1.0/24 використовує таблицю custom
ip rule add from 192.168.1.0/24 table custom

# Переглянути правила
ip rule show

DNS Resolution

/etc/resolv.conf

# Класичний спосіб
cat /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com

systemd-resolved

# Статус
resolvectl status

# DNS для інтерфейсу
resolvectl dns eth0 8.8.8.8 8.8.4.4

# Конфігурація
# /etc/systemd/resolved.conf
[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1
DNSSEC=yes
DNSOverTLS=yes

systemctl restart systemd-resolved

DNS тестування

# dig — детальна інформація
dig example.com
dig example.com @8.8.8.8
dig +short example.com
dig example.com MX
dig example.com ANY

# host — простіший
host example.com
host -t MX example.com

# nslookup — legacy
nslookup example.com
nslookup example.com 8.8.8.8

Діагностика з'єднання

ping

# Базовий ping
ping 8.8.8.8
ping -c 4 8.8.8.8  # 4 пакети

# Flood ping (root)
ping -f 192.168.1.1

# З конкретного інтерфейсу
ping -I eth0 8.8.8.8

# Розмір пакета
ping -s 1472 8.8.8.8  # MTU test (1472 + 28 = 1500)

# Заборонити фрагментацію
ping -M do -s 1472 8.8.8.8

traceroute / tracepath

# traceroute (ICMP або UDP)
traceroute 8.8.8.8
traceroute -I 8.8.8.8  # ICMP
traceroute -T 8.8.8.8  # TCP

# tracepath (не потребує root)
tracepath 8.8.8.8

# mtr — комбінація ping + traceroute
mtr 8.8.8.8
mtr -n 8.8.8.8        # numeric
mtr -r 8.8.8.8        # report mode
mtr -rwc 100 8.8.8.8  # 100 пакетів, report

ss (Socket Statistics)

# ss замінив netstat

# Всі з'єднання
ss

# TCP з'єднання
ss -t

# Listening ports
ss -l
ss -tln   # TCP listening, numeric

# З процесами (root)
ss -tlnp

# UDP
ss -uln

# Всі сокети з info
ss -tunap

# Статистика
ss -s

# Фільтр за портом
ss -tn 'sport = :22'
ss -tn 'dport = :443'
ss -tn state established

# Фільтр за IP
ss -tn dst 8.8.8.8

nc (netcat)

# Тест TCP порту
nc -zv 192.168.1.1 22
nc -zv 192.168.1.1 20-30  # діапазон

# Тест UDP
nc -zuv 192.168.1.1 53

# Простий сервер
nc -l 8080

# Передача файлу
# Receiver:
nc -l 9999 > file.txt
# Sender:
nc 192.168.1.100 9999 < file.txt

# Chat
# Server:
nc -l 8888
# Client:
nc 192.168.1.100 8888

tcpdump

Базове використання

# Захоплення на інтерфейсі
tcpdump -i eth0

# Зберегти в файл
tcpdump -i eth0 -w capture.pcap

# Читати з файлу
tcpdump -r capture.pcap

# Verbose
tcpdump -v   # verbose
tcpdump -vv  # more verbose
tcpdump -vvv # even more

Фільтри

# За хостом
tcpdump host 192.168.1.1
tcpdump src 192.168.1.1
tcpdump dst 192.168.1.1

# За мережею
tcpdump net 192.168.1.0/24

# За портом
tcpdump port 80
tcpdump port 80 or port 443
tcpdump portrange 20-25

# За протоколом
tcpdump tcp
tcpdump udp
tcpdump icmp

# Комбінації
tcpdump 'host 192.168.1.1 and port 22'
tcpdump 'tcp port 80 and (src 192.168.1.0/24)'
tcpdump 'not port 22'  # виключити SSH

# TCP flags
tcpdump 'tcp[tcpflags] & tcp-syn != 0'  # SYN пакети
tcpdump 'tcp[tcpflags] & tcp-rst != 0'  # RST пакети

Корисні опції

# Не резолвити DNS
tcpdump -n

# Показати вміст пакетів (hex + ASCII)
tcpdump -X
tcpdump -XX  # включаючи Ethernet header

# ASCII only
tcpdump -A

# Обмежити кількість пакетів
tcpdump -c 100

# Розмір capture
tcpdump -s 0     # весь пакет
tcpdump -s 1500  # до 1500 байт

# Timestamp
tcpdump -tttt  # повна дата/час

Приклади

# HTTP трафік
tcpdump -i eth0 -A 'tcp port 80'

# DNS запити
tcpdump -i eth0 'udp port 53'

# SSH окрім локального
tcpdump -i eth0 'port 22 and not host 192.168.1.100'

# TCP handshake
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

# Зберегти для Wireshark
tcpdump -i eth0 -w /tmp/capture.pcap 'not port 22'

nmap

# Сканування портів
nmap 192.168.1.1
nmap -p 22,80,443 192.168.1.1
nmap -p 1-1000 192.168.1.1
nmap -p- 192.168.1.1  # всі порти

# Сканування мережі
nmap 192.168.1.0/24
nmap -sn 192.168.1.0/24  # тільки ping (host discovery)

# Версії сервісів
nmap -sV 192.168.1.1

# OS detection
nmap -O 192.168.1.1

# Aggressive scan
nmap -A 192.168.1.1  # OS, versions, scripts, traceroute

# UDP scan
nmap -sU 192.168.1.1

# Швидкий scan
nmap -F 192.168.1.1  # top 100 ports
nmap -T4 192.168.1.1 # faster timing

Network Namespaces

# Namespaces ізолюють мережевий стек

# Створити namespace
ip netns add ns1

# Список namespaces
ip netns list

# Виконати команду в namespace
ip netns exec ns1 ip addr
ip netns exec ns1 ping 8.8.8.8

# Створити veth pair (virtual ethernet)
ip link add veth0 type veth peer name veth1

# Перемістити veth1 в namespace
ip link set veth1 netns ns1

# Налаштувати адреси
ip addr add 10.0.0.1/24 dev veth0
ip link set veth0 up

ip netns exec ns1 ip addr add 10.0.0.2/24 dev veth1
ip netns exec ns1 ip link set veth1 up
ip netns exec ns1 ip link set lo up

# Тест
ping 10.0.0.2
ip netns exec ns1 ping 10.0.0.1

# Видалити namespace
ip netns del ns1

Bridge та VLAN

Bridge

# Створити bridge
ip link add br0 type bridge
ip link set br0 up

# Додати інтерфейси до bridge
ip link set eth0 master br0
ip link set eth1 master br0

# Призначити IP (опціонально)
ip addr add 192.168.1.1/24 dev br0

# Показати bridge
bridge link show
bridge fdb show

VLAN

# Створити VLAN інтерфейс
ip link add link eth0 name eth0.10 type vlan id 10
ip link set eth0.10 up
ip addr add 192.168.10.1/24 dev eth0.10

# Видалити
ip link delete eth0.10

# Перевірити
cat /proc/net/vlan/eth0.10
# Створити bond
ip link add bond0 type bond mode 802.3ad

# Додати slave інтерфейси
ip link set eth0 master bond0
ip link set eth1 master bond0

ip link set bond0 up

# Режими:
# mode 0 (balance-rr)    — round-robin
# mode 1 (active-backup) — failover
# mode 2 (balance-xor)
# mode 3 (broadcast)
# mode 4 (802.3ad)       — LACP
# mode 5 (balance-tlb)
# mode 6 (balance-alb)

NetworkManager vs systemd-networkd

flowchart TB
    subgraph nm["NetworkManager"]
        NM1["🖥️ Desktop-oriented"]
        NM2["GUI integration"]
        NM3["Auto Wi-Fi, VPN"]
        NM4["nmcli, nmtui"]
    end

    subgraph sd["systemd-networkd"]
        SD1["🖥️ Server-oriented"]
        SD2["Lightweight"]
        SD3[".network files"]
        SD4["/etc/systemd/network/"]
    end

    UBUNTU_D["Ubuntu Desktop<br/>Fedora"] --> nm
    UBUNTU_S["Ubuntu Server<br/>Arch Linux"] --> sd

    style nm fill:#dbeafe
    style sd fill:#d1fae5
Аспект NetworkManager systemd-networkd
Призначення Desktop Server
GUI nm-applet Немає
Конфігурація nmcli/nmtui .network файли
Ресурси Більше Менше
# Переключення на systemd-networkd
systemctl disable NetworkManager
systemctl enable systemd-networkd

Швидкий troubleshooting

# 1. Перевірити link
ip link show eth0
# Link up? Carrier?

# 2. Перевірити IP
ip addr show eth0
# IP присвоєно?

# 3. Перевірити gateway
ip route
# Default route є?

# 4. Ping gateway
ping -c 3 192.168.1.1

# 5. Ping зовнішній IP
ping -c 3 8.8.8.8

# 6. Перевірити DNS
dig google.com
cat /etc/resolv.conf

# 7. Перевірити порт
ss -tln | grep :80
nc -zv localhost 80

# 8. Перевірити firewall
iptables -L -n -v
# або
nft list ruleset

Типові проблеми

Проблема Діагностика Рішення
No carrier ip link show Перевірити кабель
No IP ip addr show DHCP або static config
No route ip route Додати gateway
DNS fails dig @8.8.8.8 Перевірити resolv.conf
Port closed ss -tln Запустити сервіс, firewall
Packet loss mtr host Перевірити мережу

Підсумок

Основні команди:

ip addr show          # IP адреси
ip route show         # Маршрути
ss -tulnp             # Порти та з'єднання
ping/traceroute/mtr   # Діагностика
tcpdump               # Аналіз пакетів
dig/host              # DNS

Конфігурація:
- Ubuntu: Netplan (/etc/netplan/)
- Desktop: NetworkManager (nmcli)
- Server: systemd-networkd


Пов'язані теми

Шлях: getting-started/linux-networking.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications