- Вступ
- Серія Linux Administration
- Архітектура мережевого стеку Linux
- Іменування мережевих інтерфейсів
- Динамічна конфігурація IP за допомогою NetworkManager
- Конфігурація статичного IP
- Конфігурація фаєрволу за допомогою UFW
- IP-переспрямування та маршрутизація
- Трансляція мережевих адрес (NAT)
- Мережеве тунелювання (GRE)
- Синхронізація часу (NTP)
- Моніторинг та усунення проблем мережі
- Кращі практики для продакшну
- Усунення поширених проблем
- Висновок
- Часті запитання
Вступ
Управління мережею є критично важливою навичкою для системних адміністраторів Linux. Цей вичерпний посібник охоплює конфігурацію мережі, управління фаєрволом, трансляцію мережевих адрес (NAT), маршрутизацію, VPN-тунелювання та інструменти моніторингу мережі.
Ми розглянемо як NetworkManager, так і традиційні підходи до налаштування мережі, конфігурацію фаєрволу UFW, налаштування NAT для шлюзових систем, статичну маршрутизацію, GRE-тунелі, синхронізацію часу та моніторинг трафіку. Кожен розділ містить практичні команди та продакшн-сценарії.
Серія Linux Administration
📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.
Це Частина III нашого комплексного 7-частинного посібника з адміністрування Linux:
- ← Частина I: Файлова система та управління процесами
- Частина II: Аутентифікація користувачів та LDAP
- Частина III: Фаєрвол UFW та мережі ← Ви тут
- Частина IV: systemd та SSH Hardening →
- Частина V: Поштовий сервер Postfix
- Частина VI: Віртуалізація QEMU KVM
- Частина VII: Сховище LVM та RAID
Архітектура мережевого стеку Linux
Огляд мережевих рівнів
Ключові компоненти:
- Мережеві інтерфейси - Фізичні/віртуальні NIC (eth0, wlan0, enp0s3) (документація ip: https://man7.org/linux/man-pages/man8/ip.8.html)
- IP-рівень - Маршрутизація, переспрямування, NAT
- Фаєрвол - iptables/nftables (керується UFW)
- Менеджер мережі - nmcli, systemd-networkd
Іменування мережевих інтерфейсів
Передбачувані імена інтерфейсів
Сучасний Linux використовує передбачувані імена мережевих інтерфейсів:
| Префікс | Тип | Приклад |
|---|---|---|
| en | Ethernet | enp0s3, ens1 |
| wl | Бездротова мережа | wlp3s0 |
| ww | WWAN (Мобільна) | wwp0s29u1u4i6 |
Розбір схеми іменування:
- eno1 - Вбудований пристрій індекс 1
- ens1 - PCI Express hotplug слот 1
- enp2s0 - PCI шина 2, слот 0
- enx78e7d1ea46da - На основі MAC-адреси
Перегляд мережевих інтерфейсів:
# List all interfaces
ip link show
ip a
# Show specific interface
ip link show eth0
# Legacy command
ifconfig
# List only interface names
ls /sys/class/net/
# Show interface statistics
ip -s link show eth0
Динамічна конфігурація IP за допомогою NetworkManager
Архітектура NetworkManager
Команди NetworkManager:
# Check NetworkManager status
systemctl status NetworkManager
# Show all connections
nmcli connection show
# Show active connections
nmcli connection show --active
# Show devices
nmcli device status
# Create new DHCP connection
nmcli connection add \
type ethernet \
con-name "My Connection" \
ifname enp0s3
# Start connection
nmcli connection up "My Connection"
# Stop connection
nmcli connection down "My Connection"
# Delete connection
nmcli connection delete "My Connection"
# Reload configuration
nmcli connection reload
Інтерактивна конфігурація NetworkManager:
# Edit connection interactively
nmcli connection edit "My Connection"
# nmcli interactive commands:
print # show all settings
print ipv4 # show IPv4 settings
describe ipv4.method # describe a property
set ipv4.method auto # set DHCP
set ipv4.dns 8.8.8.8 8.8.4.4 # set DNS servers
save # save changes
quit # exit
Конфігурація статичного IP
Налаштування статичного IP
Метод 1: NetworkManager (nmcli)
# Create static IP connection
nmcli connection add \
type ethernet \
con-name "Static IP" \
ifname enp0s3 \
ipv4.method manual \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 8.8.4.4"
# Activate connection
nmcli connection up "Static IP"
# Modify existing connection
nmcli connection modify "Static IP" \
ipv4.addresses 192.168.1.101/24
# Apply changes
nmcli connection up "Static IP"
Метод 2: Традиційний /etc/network/interfaces (Debian/Ubuntu)
# Edit network configuration
sudo vim /etc/network/interfaces
# Static IP configuration:
auto enp0s3
iface enp0s3 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
# Restart networking
sudo systemctl restart networking
# Or bring interface up/down
sudo ifdown enp0s3
sudo ifup enp0s3
Метод 3: Netplan (Ubuntu 18.04+)
# Edit netplan configuration
sudo vim /etc/netplan/01-netcfg.yaml
# Configuration:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
# Apply configuration
sudo netplan apply
# Test configuration (revert in 120s if not confirmed)
sudo netplan try
Конфігурація фаєрволу за допомогою UFW
Архітектура UFW
Базові команди UFW:
# Enable firewall (документація UFW: https://manpages.ubuntu.com/manpages/focal/man8/ufw.8.html)
sudo ufw enable
# Disable firewall
sudo ufw disable
# Check status
sudo ufw status
sudo ufw status verbose
sudo ufw status numbered
# Default policies
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow specific port
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 3000 # port (both tcp/udp)
# Allow port range
sudo ufw allow 6000:6010/tcp
# Deny/Reject port
sudo ufw deny 23 # deny (silently drop)
sudo ufw reject 23 # reject (send ICMP unreachable)
# Delete rule
sudo ufw delete allow 80/tcp
sudo ufw delete 3 # delete rule number 3
# Reset firewall (delete all rules)
sudo ufw reset
Розширені правила UFW:
# Allow from specific IP
sudo ufw allow from 192.168.1.100
# Allow from subnet
sudo ufw allow from 192.168.1.0/24
# Allow from IP to specific port
sudo ufw allow from 192.168.1.100 to any port 22
# Allow from IP to specific IP and port
sudo ufw allow from 192.168.1.100 to 192.168.1.200 port 3306
# Allow specific protocol
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 80
# Rate limiting (max 6 connections per 30 seconds)
sudo ufw limit 22/tcp
# Application profiles
sudo ufw app list
sudo ufw allow 'Nginx Full'
sudo ufw allow 'OpenSSH'
# Insert rule at specific position
sudo ufw insert 1 allow from 10.0.0.0/8
# Logging
sudo ufw logging on
sudo ufw logging medium
Файли конфігурації UFW:
# Main UFW configuration
/etc/default/ufw
# User rules
/etc/ufw/user.rules
/etc/ufw/user6.rules
# Application profiles
/etc/ufw/applications.d/
# Custom rules (before ufw processes)
/etc/ufw/before.rules
IP-переспрямування та маршрутизація
Конфігурація IP-переспрямування
Увімкнення IP-переспрямування:
# Check current setting
cat /proc/sys/net/ipv4/ip_forward
# 0 = disabled, 1 = enabled
# Enable temporarily
sudo sysctl -w net.ipv4.ip_forward=1
# Enable permanently
sudo vim /etc/sysctl.conf
# Add or uncomment:
net.ipv4.ip_forward=1
# Apply changes
sudo sysctl -p
# For IPv6
sudo sysctl -w net.ipv6.conf.all.forwarding=1
Управління таблицею маршрутизації:
# Show routing table
ip route show
route -n
# Show IPv6 routes
ip -6 route show
# Add route
sudo ip route add 10.0.3.0/24 via 192.168.1.1
# Add default gateway
sudo ip route add default via 192.168.1.1
# Delete route
sudo ip route del 10.0.3.0/24
# Add persistent route (Debian/Ubuntu /etc/network/interfaces)
auto enp0s3
iface enp0s3 inet static
address 192.168.1.100/24
gateway 192.168.1.1
up route add -net 10.0.3.0/24 gw 192.168.1.1
# Add persistent route (NetworkManager)
nmcli connection modify "My Connection" \
+ipv4.routes "10.0.3.0/24 192.168.1.1"
Трансляція мережевих адрес (NAT)
Архітектура NAT
Налаштування NAT за допомогою UFW:
# 1. Enable IP forwarding
sudo sysctl -w net.ipv4.ip_forward=1
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
# 2. Edit UFW default forward policy
sudo vim /etc/default/ufw
# Change: DEFAULT_FORWARD_POLICY="DROP"
# To: DEFAULT_FORWARD_POLICY="ACCEPT"
# 3. Add NAT rules to UFW
sudo vim /etc/ufw/before.rules
# Add at the beginning (before *filter):
*nat
:POSTROUTING ACCEPT [0:0]
# MASQUERADE traffic from private network
-A POSTROUTING -s 192.168.1.0/24 -o enp0s8 -j MASQUERADE
COMMIT
# 4. Reload UFW
sudo ufw disable
sudo ufw enable
# Verify NAT
sudo iptables -t nat -L -n -v
NAT безпосередньо з iptables:
# Enable MASQUERADE (dynamic source NAT) (документація iptables: https://netfilter.org/documentation/HOWTO/NAT-HOWTO.html)
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Static source NAT (SNAT)
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.1
# Port forwarding (DNAT) - forward port 80 to internal server
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
# Allow forwarded traffic
sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# Save iptables rules (Debian/Ubuntu)
sudo iptables-save | sudo tee /etc/iptables/rules.v4
# Restore on boot
sudo apt install iptables-persistent
Мережеве тунелювання (GRE)
Архітектура GRE-тунелю
Створення GRE-тунелю:
# Router 1 (12.34.56.78)
sudo ip tunnel add gre1 mode gre \
remote 87.65.43.21 \
local 12.34.56.78 \
ttl 255
sudo ip link set gre1 up
sudo ip address add 10.255.0.1/30 dev gre1
# Add route to remote network
sudo ip route add 10.2.0.0/24 via 10.255.0.2
# Router 2 (87.65.43.21)
sudo ip tunnel add gre1 mode gre \
remote 12.34.56.78 \
local 87.65.43.21 \
ttl 255
sudo ip link set gre1 up
sudo ip address add 10.255.0.2/30 dev gre1
# Add route to remote network
sudo ip route add 10.1.0.0/24 via 10.255.0.1
# Test tunnel
ping 10.255.0.2 # from Router 1
ping 10.1.0.10 # ping host on remote network
# Make persistent (add to /etc/network/interfaces)
auto gre1
iface gre1 inet static
address 10.255.0.1
netmask 255.255.255.252
pre-up ip tunnel add gre1 mode gre remote 87.65.43.21 local 12.34.56.78 ttl 255
post-down ip tunnel del gre1
up route add -net 10.2.0.0/24 gw 10.255.0.2
Синхронізація часу (NTP)
Архітектура NTP
Налаштування Chrony (сучасний NTP-клієнт):
# Install chrony (документація Chrony: https://chrony.tuxfamily.org/documentation.html)
sudo apt install chrony
# Check status
chronyc tracking
chronyc sources
# View detailed source info
chronyc sources -v
# Configuration file
sudo vim /etc/chrony/chrony.conf
# Example configuration:
# Use public NTP servers
pool pool.ntp.org iburst
server time.google.com iburst
# Allow clients from local network
allow 192.168.1.0/24
# Serve time even if not synchronized
local stratum 10
# Restart chrony
sudo systemctl restart chrony
# Check system time
timedatectl
# Set timezone
sudo timedatectl set-timezone America/New_York
# List timezones
timedatectl list-timezones
# Open NTP port in firewall
sudo ufw allow 123/udp
Використання як NTP-сервера:
# Server configuration (/etc/chrony/chrony.conf)
allow 192.168.1.0/24
allow 10.0.0.0/8
# Client configuration
server 192.168.1.100 iburst prefer
# Force synchronization
sudo chronyc makestep
# Monitor sync status
watch chronyc tracking
Моніторинг та усунення проблем мережі
Огляд інструментів моніторингу
# Interface statistics
ip -s link show
ifconfig -s
# Real-time bandwidth monitoring
sudo iftop # per-host bandwidth
sudo iftop -i enp0s3 # specific interface
sudo nethogs # per-process bandwidth
# Connection monitoring
ss -tunap # all TCP/UDP connections
ss -tl # listening TCP sockets
ss -tunap | grep :80 # connections on port 80
# netstat (legacy alternative)
netstat -tunap
netstat -rn # routing table
# Packet capture (документація tcpdump: https://www.tcpdump.org/manpages/tcpdump.1.html)
sudo tcpdump -i enp0s3
sudo tcpdump -i enp0s3 port 80
sudo tcpdump -i enp0s3 host 192.168.1.100
sudo tcpdump -i enp0s3 -w capture.pcap
# DNS lookup
nslookup google.com
dig google.com
host google.com
# Trace route
traceroute google.com
mtr google.com # continuous traceroute
# Test connectivity
ping -c 4 8.8.8.8
ping6 -c 4 2001:4860:4860::8888
# Check open ports
sudo nmap -sT localhost
sudo nmap -p 1-65535 192.168.1.100
# ARP table
ip neigh show
arp -n
Тестування продуктивності мережі:
# Install iperf3
sudo apt install iperf3
# Server side
iperf3 -s
# Client side (test throughput)
iperf3 -c 192.168.1.100
# UDP test
iperf3 -c 192.168.1.100 -u -b 100M
# Reverse test (server sends)
iperf3 -c 192.168.1.100 -R
Кращі практики для продакшну
-
Конфігурація мережі:
- Використовуйте статичні IP для серверів
- Документуйте призначення IP-адрес
- Впроваджуйте сегментацію мережі (VLAN)
- Використовуйте DNS замість жорсткого кодування IP
-
Управління фаєрволом:
- За замовчуванням забороняйте все, явно дозволяйте потрібні порти
- Використовуйте профілі застосунків UFW для поширених сервісів
- Впроваджуйте обмеження швидкості для SSH
- Логуйте блокування фаєрволом для моніторингу безпеки
- Регулярні аудити правил фаєрволу
-
NAT та маршрутизація:
- Документуйте топологію маршрутизації
- Використовуйте конкретні джерело/призначення в правилах NAT
- Моніторте розмір таблиці NAT-з'єднань
- Впроваджуйте QoS для формування трафіку
-
Моніторинг:
- Моніторте використання пропускної здатності з попередженнями
- Відстежуйте кількість з'єднань на сервіс
- Логуйте мережеві помилки та втрати пакетів
- Впроваджуйте централізоване логування подій фаєрволу
- Використовуйте Prometheus + Grafana для візуалізації
-
Безпека:
- Вимикайте IP-переспрямування, якщо воно не потрібне
- Використовуйте VPN/GRE-тунелі для з'єднань між сайтами
- Впроваджуйте фільтрацію зворотного шляху
- Регулярне сканування безпеки за допомогою nmap/nessus
- Підтримуйте системи оновленими
Усунення поширених проблем
Відсутність мережевого з'єднання:
# Check link status
ip link show enp0s3
# Bring interface up
sudo ip link set enp0s3 up
# Check IP configuration
ip addr show enp0s3
# Test gateway
ping 192.168.1.1
# Check routing
ip route show
# Check DNS
cat /etc/resolv.conf
nslookup google.com
Фаєрвол блокує трафік:
# Check UFW status
sudo ufw status numbered
# Temporarily disable to test
sudo ufw disable
# Check logs
sudo tail -f /var/log/ufw.log
# Verify rule order (first match wins)
sudo ufw status numbered
NAT не працює:
# Check IP forwarding
cat /proc/sys/net/ipv4/ip_forward
# Verify NAT rules
sudo iptables -t nat -L -n -v
# Check if packets are being forwarded
sudo iptables -L FORWARD -n -v
# Test from client
traceroute google.com
Повільна продуктивність мережі:
# Check interface errors
ip -s link show enp0s3
# Check for packet loss
ping -c 100 192.168.1.1
# Check bandwidth
iftop -i enp0s3
# Check MTU
ip link show enp0s3 | grep mtu
# Test with different MTU
sudo ip link set enp0s3 mtu 1450
Висновок
Управління мережею в Linux охоплює конфігурацію IP, правила фаєрволу, NAT, маршрутизацію та моніторинг. Розуміння NetworkManager для настільних систем, традиційної мережі для серверів, UFW для управління фаєрволом та NAT для шлюзових систем є важливим для ефективного адміністрування мережі.
Вибирайте відповідні інструменти: NetworkManager для динамічних середовищ, статичну конфігурацію для серверів, UFW для зручного управління фаєрволом та iptables для складних сценаріїв. Впроваджуйте глибокий захист, моніторте мережевий трафік та підтримуйте детальну мережеву документацію для усунення проблем та безпеки.
Часті запитання
П: Як налаштувати статичну IP-адресу в Linux?
Для systemd-networkd редагуйте /etc/systemd/network/enp0s3.network з налаштуваннями Address, Gateway та DNS, потім перезапустіть через "systemctl restart systemd-networkd". Для NetworkManager використовуйте "nmcli con mod" або редагуйте /etc/network/interfaces на Debian. У системах Netplan змініть /etc/netplan/*.yaml та виконайте "netplan apply". Завжди робіть резервну копію перед змінами.
П: Яка різниця між UFW та iptables?
UFW (Uncomplicated Firewall) - це зручний інтерфейс для iptables із спрощеним синтаксисом, як "ufw allow 80/tcp". Iptables пропонує розширений контроль з ланцюгами, таблицями та складними правилами, але вимагає знання детального синтаксису. UFW автоматично керує правилами iptables. Використовуйте UFW для простоти, iptables для розширеної фільтрації мережі.
П: Як працює NAT у Linux?
NAT (Network Address Translation) дозволяє кільком пристроям спільно використовувати одну публічну IP, перетворюючи приватні IP на публічні. Налаштуйте через iptables MASQUERADE в ланцюгу POSTROUTING: "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE". Увімкніть IP forwarding через "sysctl -w net.ipv4.ip_forward=1". Важливо для домашніх роутерів та шлюзів.
П: Як перевірити мережеве з'єднання в Linux?
Використовуйте ping для тестування базового з'єднання: "ping 8.8.8.8" тестує IP, "ping google.com" тестує DNS. Traceroute показує шлях маршрутизації: "traceroute google.com". Перевірте інтерфейс через "ip addr show" або "ifconfig". Тестуйте порти через "telnet host port" або "nc -zv host port". Використовуйте "ss -tuln" для переліку портів, що слухають.
П: Що таке ланцюги iptables і як вони працюють?
Ланцюги iptables - це послідовності правил для фільтрації пакетів. INPUT обробляє вхідні пакети, OUTPUT обробляє вихідні, FORWARD обробляє маршрутизовані пакети. Правила обробляються по порядку до співпадіння. Політика визначає дію за замовчуванням (ACCEPT/DROP). Порядок ланцюгів: PREROUTING, INPUT/FORWARD/OUTPUT, POSTROUTING. Використовуйте "iptables -L" для перегляду, "-A" для додавання, "-I" для вставки правил.
П: Як усунути проблеми з DNS у Linux?
Перевірте /etc/resolv.conf на наявність записів nameserver. Тестуйте через "nslookup domain.com" або "dig domain.com". Використовуйте "systemd-resolve --status" на systemd системах. Перевірте DNS через "host domain.com". Перевірте, чи працює служба DNS. Очистіть кеш через "systemd-resolve --flush-caches". Тестуйте альтернативний DNS як 8.8.8.8 для ізоляції проблем.
П: Як працює маршрутизація в Linux?
Маршрутизація Linux визначає шляхи пакетів через таблиці маршрутизації. Перегляньте через "ip route show". Шлюз за замовчуванням обробляє зовнішній трафік. Додайте маршрути через "ip route add network via gateway". Ядро перевіряє найдовше співпадіння префікса спочатку. Увімкніть IP forwarding для маршрутизації між інтерфейсами. Статичні маршрути зберігаються в /etc/network/interfaces або конфігураціях NetworkManager.