Networking в Linux

Network Stack в Linux

┌─────────────────────────────────────────────────────────────────┐
│                     User Space                                  │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │  Applications (curl, ssh, nginx, etc.)                  │    │
│  └─────────────────────────────────────────────────────────┘    │
│                          │ sockets                              │
├──────────────────────────┼──────────────────────────────────────┤
│                     Kernel Space                                │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │  Socket Layer                                           │    │
│  ├─────────────────────────────────────────────────────────┤    │
│  │  TCP / UDP                                              │    │
│  ├─────────────────────────────────────────────────────────┤    │
│  │  IP (routing, forwarding)                               │    │
│  ├─────────────────────────────────────────────────────────┤    │
│  │  Netfilter (iptables/nftables)                         │    │
│  ├─────────────────────────────────────────────────────────┤    │
│  │  Network Device Drivers                                 │    │
│  └─────────────────────────────────────────────────────────┘    │
├─────────────────────────────────────────────────────────────────┤
│                     Hardware                                    │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │  NIC (eth0, wlan0, etc.)                               │    │
│  └─────────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────────┘

Інтерфейси

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

# 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 схеми

┌─────────────────────────────────────────────────────────────────┐
  Традиційні імена (застарілі):                                 
  eth0, eth1, wlan0                                             
                                                                 
  Predictable Network Interface Names (systemd):                
                                                                 
  en = Ethernet                                                  
  wl = Wireless LAN                                              
  ww = Wireless WAN                                              
                                                                 
  Типи:                                                          
  eno1        onboard (firmware index)                         
  ens3        hotplug slot (PCI Express)                       
  enp0s3      PCI bus/slot                                     
  enx78e7...   MAC address                                      
                                                                 
  Приклад: 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

┌─────────────────────────────────────────────────────────────────┐
│  NetworkManager:                                                │
│  • Desktop-oriented                                             │
│  • GUI integration (nm-applet)                                 │
│  • Automatic Wi-Fi, VPN                                        │
│  • nmcli, nmtui                                                │
│  • Ubuntu Desktop, Fedora                                      │
│                                                                 │
│  systemd-networkd:                                              │
│  • Server-oriented                                              │
│  • Lightweight                                                  │
│  • .network файли в /etc/systemd/network/                      │
│  • Ubuntu Server, Arch                                         │
│                                                                 │
│  Переключення:                                                  │
│  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