Linux — от практиката

Мрежови конфигурации
в реална среда

Сървър без мрежа е като влак без релси. Няма значение колко е мощен – без свързаност не върши работа. В тази статия споделям как конфигурирам мрежата на сървърите си, така че да е стабилна, предвидима и лесна за поддръжка.

1. Как мисля за мрежата

В железопътния транспорт мрежата от релси е нещо, което приемаш за даденост – докато не се появи проблем. Същото важи и за IP мрежите. Когато всичко работи, никой не забелязва. Когато нещо се обърка, целият сървър спира.

Моят подход е прост: конфигурирам мрежата така, че да мога да я проверя и възстановя бързо, без да разчитам на спомени или случайни бележки. Затова използвам статични конфигурации, където е възможно, и документирам всичко.

Моето правило: Ако не можеш да възстановиш мрежовата конфигурация за 10 минути, значи не си я конфигурирал правилно.

2. Основни мрежови интерфейси

В повечето сървъри имам поне един физически интерфейс – обикновено eth0 или enpXsY (в зависимост от дистрибуцията). Новите именования (predictable network interface names) са по-логични, но аз все още използвам eth0 за улеснение.

ТЕРМИНАЛ — ПРОВЕРКА НА ИНТЕРФЕЙСИТЕ
# Показва всички интерфейси и IP адреси
ip addr show

# По-кратък изход (само активните)
ip -br addr show

# Старата команда (все още работи)
ifconfig -a

За мен най-важното е да видя дали интерфейсът има IP адрес и дали е UP (активен). Ако няма IP, значи конфигурацията не е заредена правилно.

3. Статична конфигурация в Debian/Ubuntu

В Debian-based системите използвам /etc/network/interfaces или netplan (в Ubuntu). Лично предпочитам стария начин с interfaces, защото е по-прост и не изисква допълнителни инструменти.

/etc/network/interfaces
# Външен интерфейс (публичен IP)
auto eth0
iface eth0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 1.1.1.1 8.8.8.8
Важно: След промяна на конфигурацията, рестартирам мрежата с systemctl restart networking (или ifdown eth0 && ifup eth0). Винаги проверявам дали новият адрес е зареден.

4. DHCP – когато е удобно

DHCP е удобен за клиентски машини или тестови среди. За сървъри обаче го избягвам, освен ако не използвам DHCP reservation в рутера. Причината е проста: ако DHCP сървърът не отговори, сървърът остава без IP.

/etc/network/interfaces (DHCP)
auto eth0
iface eth0 inet dhcp
Внимание: Ако използваш DHCP за сървър, винаги настройвай резервация в DHCP сървъра, за да не се променя IP-то при рестарт.

5. Bridge – за виртуални машини и контейнери

Когато използвам Proxmox или Docker, често имам нужда от bridge мрежа. Тя позволява на виртуалните машини да са в същата мрежа като host-а.

/etc/network/interfaces (bridge)
# Физическият интерфейс (без IP)
auto eth0
iface eth0 inet manual

# Bridge интерфейсът
auto br0
iface br0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
Кога използвам bridge? Когато виртуалните машини трябва да са в същата мрежа като хоста и да имат директен достъп до останалите устройства.

6. VLAN-и – разделяне на трафика

В по-големи среди използвам VLAN за разделяне на трафика – например мрежа за управление (management), мрежа за приложения и мрежа за бази данни. Това повишава сигурността и улеснява диагностиката.

/etc/network/interfaces (VLAN)
# Физически интерфейс
auto eth0
iface eth0 inet manual

# VLAN 100 – мрежа за управление
auto eth0.100
iface eth0.100 inet static
    address 10.0.100.10
    netmask 255.255.255.0
    vlan-raw-device eth0

# VLAN 200 – мрежа за приложения
auto eth0.200
iface eth0.200 inet static
    address 10.0.200.10
    netmask 255.255.255.0
    vlan-raw-device eth0
Предимство: С VLAN мога да имам няколко логически мрежи през един физически кабел. Това спестява портове и улеснява управлението.

7. DNS – за да не помня IP-та

DNS е нещо, което често пренебрегваме, но когато не работи, всичко спира. На сървърите си конфигурирам /etc/resolv.conf с надеждни DNS сървъри.

/etc/resolv.conf
nameserver 1.1.1.1
nameserver 8.8.8.8
search mydomain.local
Важно: Ако използваш systemd-resolved, промените в /etc/resolv.conf може да бъдат презаписани. В такъв случай конфигурирай DNS чрез systemd-resolved или networkd.

8. Диагностика на мрежови проблеми

Когато мрежата не работи, имам няколко стандартни стъпки, които следвам. Те са ме спасявали стотици пъти.

  1. Проверявам дали интерфейсът е UP: ip link set eth0 up
  2. Проверявам дали има IP адрес: ip addr show eth0
  3. Проверявам дали мога да стигна до gateway-а: ping 192.168.1.1
  4. Проверявам дали мога да стигна до външен сървър: ping 1.1.1.1
  5. Проверявам DNS резолюцията: nslookup google.com
  6. Проверявам дали портовете са отворени: ss -tulpn | grep 80
Запомни: Ако ping 1.1.1.1 работи, но ping google.com не, значи проблемът е в DNS.

9. Мрежова сигурност – iptables и nftables

Всеки сървър, който поддържам, има firewall. В миналото използвах iptables, но в последните години преминах към nftables, защото е по-модерен и по-бърз.

ПРОСТИ ПРАВИЛА С NFTABLES
# Разрешавам SSH от конкретен IP
nft add rule inet filter input ip saddr 192.168.1.100 tcp dport 22 accept

# Разрешавам HTTP/HTTPS за всички
nft add rule inet filter input tcp dport 80 accept
nft add rule inet filter input tcp dport 443 accept

# Запазвам правилата
nft list ruleset > /etc/nftables.conf
Внимание: Винаги тествай новите правила преди да ги запишеш. Ако загубиш SSH достъп, ще трябва да ходиш до конзолата.

10. Практически съвети

  • Записвай конфигурациите. Копирам /etc/network/interfaces в безопасно място преди големи промени.
  • Използвай ethtool. С него проверявам скоростта и състоянието на физическия кабел: ethtool eth0.
  • Не забравяй мрежовите маршрути. ip route show ти показва как трафикът излиза от сървъра.
  • Тествай връзката с traceroute. Показва пътя на пакетите до дестинацията.

Заключение

Мрежовите конфигурации са основата, върху която всичко друго се гради. Без стабилна мрежа, няма смисъл от оптимизирани приложения или сигурни настройки. Затова отделям време, за да ги направя правилни от самото начало.

В тази статия споделих моя подход – от статични IP-та до bridge-и и VLAN-и. В следващата част ще се потопим в сигурността – SSH, ключове, fail2ban и защита на сървъра.

Запомни: Добрият администратор не е този, който знае всички команди, а този, който знае как да възстанови сървъра, когато мрежата падне.