Network_Configuration_Linux

Настройка сети в Linux

Настройка сети Linux включает управление интерфейсами, IP-адресами, шлюзами, DNS, маршрутами, VLAN и Wi‑Fi. Команды ip удобны для диагностики и временных изменений. Постоянные настройки выполняют через NetworkManager, Netplan, systemd-networkd или ifupdown.

При изменении сети удалённого сервера не закрывайте текущую SSH-сессию, подготовьте консольный доступ и способ отката.


Основные понятия

Понятие Значение
Интерфейс Физическое или виртуальное сетевое устройство: enp1s0, wlp2s0, lo, VLAN
IP-адрес Адрес узла, например 192.168.10.20/24
Шлюз Маршрутизатор для доступа к другим сетям
DNS Преобразование доменных имён в IP-адреса
DHCP Автоматическая выдача адреса, шлюза и DNS
VLAN Логическая сеть с тегом IEEE 802.1Q
Маршрут Правило выбора интерфейса и следующего шлюза

Современные имена интерфейсов обычно выглядят как enp1s0, ens18, eno1 и wlp2s0. Имена eth0 и wlan0 также встречаются.


Как определить сетевой менеджер

systemctl is-active NetworkManager
systemctl is-active systemd-networkd
nmcli general status
networkctl status

Типичные варианты:

Не настраивайте один интерфейс одновременно несколькими менеджерами.


Просмотр текущей конфигурации

ip -brief link              # интерфейсы и состояние
ip -brief address           # IP-адреса
ip route                    # маршруты IPv4
ip -6 route                 # маршруты IPv6
ip route get 8.8.8.8        # выбранный маршрут до адреса
ip neigh                    # соседи ARP/NDP
ss -tulpn                   # слушающие TCP/UDP-сокеты

Статистика и физическое соединение:

ip -s link show dev enp1s0
sudo ethtool enp1s0
sudo ethtool -i enp1s0

Временная настройка через iproute2

Настройки, заданные командой ip, обычно исчезают после перезагрузки.

Управление интерфейсом и адресом

sudo ip link set dev enp1s0 up
sudo ip link set dev enp1s0 down
sudo ip address add 192.168.10.20/24 dev enp1s0
sudo ip address del 192.168.10.20/24 dev enp1s0

ip address flush dev enp1s0 удаляет все адреса интерфейса и может разорвать удалённое соединение.

Шлюз и маршруты

sudo ip route add default via 192.168.10.1 dev enp1s0
sudo ip route replace default via 192.168.10.1 dev enp1s0 metric 100
sudo ip route add 10.20.0.0/16 via 192.168.10.254 dev enp1s0
sudo ip route del 10.20.0.0/16 via 192.168.10.254 dev enp1s0

При нескольких подходящих маршрутах сначала учитывается наиболее точный префикс, затем среди сопоставимых маршрутов — метрика. Обычно меньшее значение метрики означает более предпочтительный маршрут.


NetworkManager: nmcli и nmtui

NetworkManager управляет профилями соединений. Имя профиля может не совпадать с именем интерфейса.

nmcli device status
nmcli connection show
nmcli connection show --active
sudo nmtui

Ethernet с DHCP

sudo nmcli connection add type ethernet ifname enp1s0 \
  con-name lan-dhcp ipv4.method auto ipv6.method auto
sudo nmcli connection up lan-dhcp

Статический IPv4, шлюз и DNS

sudo nmcli connection add type ethernet ifname enp1s0 \
  con-name lan-static ipv4.method manual \
  ipv4.addresses 192.168.10.20/24 \
  ipv4.gateway 192.168.10.1 \
  ipv4.dns "192.168.10.53 1.1.1.1" \
  ipv6.method disabled
sudo nmcli connection up lan-static

Изменение профиля и добавление маршрута:

sudo nmcli connection modify lan-static \
  ipv4.addresses 192.168.10.25/24 \
  +ipv4.routes "10.20.0.0/16 192.168.10.254 100"
sudo nmcli connection up lan-static

Не принимать DNS от DHCP:

sudo nmcli connection modify lan-dhcp \
  ipv4.ignore-auto-dns yes ipv4.dns "192.168.10.53 1.1.1.1"

Netplan

Netplan читает YAML-файлы из /etc/netplan/. В YAML используются пробелы, а не табуляция.

DHCP

network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      dhcp4: true
      dhcp6: true

Статический адрес, DNS и маршруты

network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0:
      dhcp4: false
      addresses:
        - 192.168.10.20/24
      nameservers:
        search:
          - example.internal
        addresses:
          - 192.168.10.53
          - 1.1.1.1
      routes:
        - to: default
          via: 192.168.10.1
          metric: 100
        - to: 10.20.0.0/16
          via: 192.168.10.254

Проверка и применение:

sudo netplan generate
sudo netplan try
sudo netplan apply

Для удалённого сервера предпочтителен netplan try: без подтверждения система попытается вернуть прежнюю конфигурацию.


systemd-networkd

Файлы находятся в /etc/systemd/network/:

DHCP

Файл /etc/systemd/network/20-wired.network:

[Match]
Name=enp1s0

[Network]
DHCP=yes

Статический адрес, DNS и маршрут

[Match]
Name=enp1s0

[Network]
Address=192.168.10.20/24
Gateway=192.168.10.1
DNS=192.168.10.53
DNS=1.1.1.1
Domains=example.internal

[Route]
Destination=10.20.0.0/16
Gateway=192.168.10.254
Metric=100

Применение:

sudo networkctl reload
sudo networkctl reconfigure enp1s0
networkctl status enp1s0

ifupdown

Традиционные файлы Debian: /etc/network/interfaces и /etc/network/interfaces.d/.

DHCP

auto enp1s0
iface enp1s0 inet dhcp

Статическая конфигурация

auto enp1s0
iface enp1s0 inet static
    address 192.168.10.20/24
    gateway 192.168.10.1
    dns-nameservers 192.168.10.53 1.1.1.1
    dns-search example.internal
    up ip route add 10.20.0.0/16 via 192.168.10.254 dev enp1s0
    down ip route del 10.20.0.0/16 via 192.168.10.254 dev enp1s0
sudo ifdown enp1s0 && sudo ifup enp1s0

Не выполняйте это по SSH без резервного доступа. При наличии ifupdown2 можно использовать sudo ifreload -a.


VLAN

VLAN создаёт логические сети поверх физического интерфейса. VLAN ID должен быть разрешён на порту коммутатора. В примерах используется VLAN 100 поверх enp1s0.

Временно через ip

sudo ip link add link enp1s0 name enp1s0.100 type vlan id 100
sudo ip link set enp1s0 up
sudo ip link set enp1s0.100 up
sudo ip address add 192.168.100.20/24 dev enp1s0.100
ip -d link show enp1s0.100

Удаление:

sudo ip link delete enp1s0.100

VLAN через NetworkManager

sudo nmcli connection add type vlan con-name vlan100 \
  ifname enp1s0.100 dev enp1s0 id 100 \
  ipv4.method manual ipv4.addresses 192.168.100.20/24 \
  ipv4.gateway 192.168.100.1 ipv4.dns "192.168.100.53"
sudo nmcli connection up vlan100

VLAN через Netplan

network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0: {}
  vlans:
    vlan100:
      id: 100
      link: enp1s0
      addresses:
        - 192.168.100.20/24
      nameservers:
        addresses:
          - 192.168.100.53
      routes:
        - to: default
          via: 192.168.100.1

VLAN через systemd-networkd

/etc/systemd/network/10-vlan100.netdev:

[NetDev]
Name=vlan100
Kind=vlan

[VLAN]
Id=100

/etc/systemd/network/20-enp1s0.network:

[Match]
Name=enp1s0

[Network]
VLAN=vlan100

/etc/systemd/network/30-vlan100.network:

[Match]
Name=vlan100

[Network]
Address=192.168.100.20/24
Gateway=192.168.100.1
DNS=192.168.100.53

Если физический интерфейс служит только trunk-портом, ему обычно не назначают IP-адрес.


Wi‑Fi

Проверка интерфейса и блокировки радиомодуля:

ip -brief link
rfkill list
sudo rfkill unblock wifi

Wi‑Fi через NetworkManager

nmcli radio wifi on
nmcli device wifi rescan
nmcli device wifi list
sudo nmcli --ask device wifi connect "Office-WiFi" ifname wlp2s0

--ask безопаснее передачи пароля аргументом, который может сохраниться в истории shell.

Скрытая сеть:

sudo nmcli connection add type wifi ifname wlp2s0 \
  con-name hidden-wifi ssid "Hidden-Network"
sudo nmcli connection modify hidden-wifi \
  802-11-wireless.hidden yes wifi-sec.key-mgmt wpa-psk \
  ipv4.method auto
sudo nmcli --ask connection up hidden-wifi

Wi‑Fi через wpa_supplicant

wpa_passphrase "Office-WiFi" | \
  sudo tee /etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf >/dev/null
sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf
sudo wpa_supplicant -B -i wlp2s0 \
  -c /etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf
sudo dhclient wlp2s0

wpa_passphrase запросит пароль интерактивно. Не запускайте отдельный wpa_supplicant, если интерфейсом уже управляет NetworkManager.


DNS

/etc/resolv.conf

Традиционный формат:

search example.internal
nameserver 192.168.10.53
nameserver 1.1.1.1

Во многих системах этот файл создаётся автоматически. Сначала проверьте, кто им управляет:

ls -l /etc/resolv.conf
cat /etc/resolv.conf

systemd-resolved

resolvectl status
resolvectl dns
resolvectl domain
resolvectl query example.com

Временное назначение DNS и search domain:

sudo resolvectl dns enp1s0 192.168.10.53 1.1.1.1
sudo resolvectl domain enp1s0 example.internal

Split DNS для внутренней зоны:

sudo resolvectl dns enp1s0 192.168.10.53
sudo resolvectl domain enp1s0 '~example.internal'

Очистка кеша:

sudo resolvectl flush-caches

Проверка системного разрешения имён:

getent hosts example.com
dig example.com

getent использует системный NSS, поэтому лучше отражает результат, который получат обычные приложения.

/etc/hosts

127.0.0.1       localhost
192.168.10.20   app01.example.internal app01

Порядок источников задаётся в /etc/nsswitch.conf, например:

hosts: files dns

Статическая и policy-маршрутизация

Маршрут к сети и отдельному узлу:

sudo ip route add 10.20.0.0/16 via 192.168.10.254 dev enp1s0
sudo ip route add 10.20.5.10/32 via 192.168.10.254 dev enp1s0

Просмотр выбранного пути:

ip route get 10.20.5.10

При нескольких провайдерах или исходных адресах может потребоваться policy routing:

sudo ip route add default via 192.168.20.1 dev enp2s0 table 100
sudo ip rule add from 192.168.20.20/32 table 100
ip rule show
ip route show table 100

Эти изменения временные; сохраняйте их средствами активного сетевого менеджера.

IP forwarding

Если хост должен маршрутизировать пакеты между интерфейсами:

sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

Постоянно в /etc/sysctl.d/90-router.conf:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
sudo sysctl --system

Firewall также должен разрешать транзитный трафик. NAT требуется не во всех сценариях маршрутизации.


Диагностика по уровням

Интерфейс и адрес

ip -brief link
ip -brief address
sudo ethtool enp1s0

Шлюз и внешний IP

ping -c 4 192.168.10.1
ip neigh show dev enp1s0
ping -c 4 1.1.1.1

DNS

getent hosts example.com
resolvectl query example.com
dig @192.168.10.53 example.com

Маршрут и TCP

ip route get 1.1.1.1
tracepath example.com
nc -vz example.com 443
curl -v https://example.com/

Анализ трафика

sudo tcpdump -ni enp1s0
sudo tcpdump -ni enp1s0 port 53
sudo tcpdump -eni enp1s0 vlan 100

Журналы

journalctl -u NetworkManager -b
journalctl -u systemd-networkd -b
journalctl -u systemd-resolved -b
journalctl -k -b

Типичные проблемы

NO-CARRIER

Проверьте кабель, порт коммутатора, виртуальный адаптер, драйвер и согласование скорости.

IP доступен, доменное имя — нет

Проверьте /etc/resolv.conf, resolvectl status, доступность DNS-сервера и результат getent hosts.

Конфигурация перезаписывается

Вероятный источник — NetworkManager, Netplan, systemd-networkd, DHCP-клиент, cloud-init или система управления конфигурацией. Изменяйте исходную конфигурацию управляющего компонента, а не сгенерированный файл.

VLAN не работает

ip -d link show
ip address show dev enp1s0.100
sudo tcpdump -eni enp1s0 vlan 100

Убедитесь, что VLAN разрешён на коммутаторе и режим порта соответствует схеме сети.

Несколько маршрутов по умолчанию

ip route show default
ip route get 8.8.8.8

Проверьте метрики, таблицы маршрутизации и возможную асимметрию трафика.


Безопасное применение изменений

Перед настройкой сохраните состояние:

ip address show
ip route show
ip rule show
resolvectl status 2>/dev/null || true

Рекомендации:

  1. Не закрывайте рабочую SSH-сессию до проверки новой конфигурации.
  2. Используйте консоль гипервизора, IPMI, iDRAC или iLO как резервный доступ.
  3. Для Netplan применяйте netplan try.
  4. Создавайте копии конфигурационных файлов.
  5. Проверяйте шлюз, DNS, SSH, маршруты и прикладные сервисы.
  6. Учитывайте firewall, настройки VLAN на коммутаторе и облачные security groups.

Краткая памятка

Задача Команда
Интерфейсы ip -brief link
IP-адреса ip -brief address
Маршруты ip route
Маршрут до узла ip route get 8.8.8.8
Соседи ARP/NDP ip neigh
Профили NetworkManager nmcli connection show
Wi‑Fi-сети nmcli device wifi list
Проверка Netplan sudo netplan generate
Netplan с откатом sudo netplan try
Состояние networkd networkctl status
DNS resolvectl status
Системный DNS-запрос getent hosts example.com
Открытые порты ss -tulpn
Трассировка tracepath example.com
Захват пакетов sudo tcpdump -ni enp1s0

Рекомендации