Темы
Преимущества systemd-networkd
Недостатки systemd-networkd
Настройка IPv4 и IPv6 с systemd-networkd
Пример настройки IPv4
Пример настройки IPv6
Основные команды для управления systemd-networkd
Демонстрационный пример
Реальный пример
Пример для TunnelBroker Hurricane Electric 6in4
Заключение
Настройка параметров Ethernet
Дополнительные материалы
Network-Scripts — Управление сетью
NetworkManager — Управление сетью
systemd-networkd — это сетевой менеджер, являющийся частью systemd, предназначенный для управления сетевыми интерфейсами в Linux. Он поддерживает различные типы сетевых конфигураций, включая проводные и беспроводные сети, VPN, VLAN, мосты и т.д. Этот инструмент особенно полезен для серверов и минималистичных систем, где не требуется графический интерфейс.
Преимущества systemd-networkd
- Интеграция с systemd:Поскольку systemd-networkd является частью systemd, он тесно интегрирован с остальными компонентами системы, что обеспечивает быструю и эффективную работу.
- Легковесность: systemd-networkd потребляет минимальные ресурсы, что делает его идеальным выбором для серверов и встроенных систем.
- Автоматизация: Он автоматически обнаруживает и настраивает сетевые интерфейсы при их подключении.
- Гибкость: Поддержка множества сетевых функций, таких как VLAN, мосты, туннели, статические и динамические IP-адреса, маршрутизация и другие.
- Управление через конфигурационные файлы: systemd-networkd использует простой и понятный формат конфигурационных файлов, что упрощает его настройку и управление.
Недостатки systemd-networkd
- Отсутствие GUI: В отличие от NetworkManager, systemd-networkd не имеет графического интерфейса для управления сетью, что может затруднить его использование для пользователей, предпочитающих работать в графической среде.
- Меньшая популярность: В Fedora и других дистрибутивах по умолчанию используется NetworkManager, поэтому для некоторых пользователей переход на systemd-networkd может потребовать изучения новых инструментов и подходов.
- Меньшая поддержка для сложных сетевых конфигураций в десктопных средах: Для продвинутых конфигураций и взаимодействия с Wi-Fi systemd-networkd может быть менее удобным по сравнению с NetworkManager.
Настройка IPv4 и IPv6 с systemd-networkd
Для настройки сетевых интерфейсов через systemd-networkd, конфигурационные файлы создаются в директории /etc/systemd/network/. Название файла может быть любым, но важно, чтобы он имел расширение .network. Например, файл 20-wired.network.
Пример настройки IPv4
- Создайте конфигурационный файл:
- Код: выделить все
nano /etc/systemd/network/20-wired.network
- Добавьте следующую конфигурацию для статического IP:
- Код: выделить все
[Match]
Name=enp1s0
[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8
- Для получения IP-адреса через DHCP:
- Код: выделить все
[Match]
Name=enp1s0
[Network]
DHCP=yes
- Перезапустите systemd-networkd для применения изменений:
- Код: выделить все
systemctl restart systemd-networkd
Пример настройки IPv6
- Для статической настройки IPv6:
- Код: выделить все
[Match]
Name=enp1s0
[Network]
Address=2000:2cc0:13b1:3333::4/64
Gateway=2000:2cc0:13b1:3333::1
DNS=2000:2cc0:13b1:3333::1
- Для получения IP-адреса через SLAAC:
- Код: выделить все
[Match]
Name=enp1s0
[Network]
IPv6AcceptRA=yes
- Для использования DHCPv6:
- Код: выделить все
[Match]
Name=enp1s0
[Network]
DHCP=yes
- Перезапустите systemd-networkd:
- Код: выделить все
systemctl restart systemd-networkd
Основные команды для управления systemd-networkd
- Запуск systemd-networkd:
- Код: выделить все
systemctl start systemd-networkd
- Автозапуск при загрузке:
- Код: выделить все
systemctl enable systemd-networkd
- Просмотр статуса сетевых интерфейсов:
- Код: выделить все
networkctl status
- Просмотр состояния конкретного интерфейса:
- Код: выделить все
networkctl status enp1s0
Переключение сетевого менеджера
- Код: выделить все
systemctl disable --now NetworkManager && systemctl enable --now systemd-networkd
После запуска системная служба systemd-resolved создаст свой собственный файл resolv.conf в одной из поддиректорий директории /run/systemd. Однако, обычной практикой является сохранение этого файла по пути /etc/resolv.conf, причем многие сетевые приложения все еще используют именно файл /etc/resolv.conf. Исходя из этого, вам придется создать символьную ссылку с именем /etc/resolv.conf следующим образом:
- Код: выделить все
rm /etc/resolv.conf && ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
Демонстрационный пример
Пример для демонстрации большинства необходимых опций конфигурирования.
- Код: выделить все
[Match]
Name=eth0
[Network]
#DHCP=yes
#DHCP=ipv6
Address=192.168.114.10/24
Address=2000:2cc0:13b1:3333::4/64
DNS=192.168.114.3
DNS=2000:2cc0:13b1:3333::1
DNSSEC=false
DNSSECNegativeTrustAnchors=tr-home.de
Domains=tr-home.de ~.
# overrides setting via sysctl
IPv6PrivacyExtensions=kernel
ManageTemporaryAddress=true
IPv6AcceptRA=true
LinkLocalAddressing=ipv6
IPv6LinkLocalAddressGenerationMode=eui64
[IPv6AcceptRA]
UseDNS=false
Token=eui64
[DHCPv6]
UseDNS=false
[Route]
Gateway=192.168.114.1
GatewayOnlink=yes
[Route]
Gateway=2000:2cc0:13b1:3333::1
В конфигурационном файле для systemd-networkd используются различные параметры для настройки сетевого интерфейса и его поведения. Давайте рассмотрим назначение опций:
- [Match]
- Name=eth0: Этот параметр указывает, что настройки из этого файла будут применяться только к сетевому интерфейсу с именем eth0. Если интерфейс имеет другое имя, настройки не будут применяться.
[Network] - DNSSEC=false: Отключает проверку подписей DNSSEC при разрешении доменных имен. DNSSEC обеспечивает защиту от подделки данных DNS, но если эта опция отключена, система не будет проверять подлинность записей DNS.
- DNSSECNegativeTrustAnchors=tr-home.de: Исключает домен tr-home.de из проверки DNSSEC, даже если DNSSEC включен. Это полезно, если домен не поддерживает DNSSEC, но вы все равно хотите использовать его без предупреждений о некорректных DNS-записях.
- Domains=tr-home.de ~.: Определяет домены поиска для интерфейса. В этом случае, при запросе неполного имени хоста (например, host1), система сначала попробует найти его в домене tr-home.de, а затем в корневом домене (.). Символ ~. указывает, что этот домен должен использоваться как резервный, если имя не удалось разрешить в других доменах.
- IPv6PrivacyExtensions=kernel: Управляет использованием временных IPv6-адресов, которые используются для повышения конфиденциальности. Значение kernel указывает, что конфигурация должна использовать параметры, заданные в ядре системы. Временные адреса помогают предотвратить отслеживание устройства на основе его MAC-адреса.
- ManageTemporaryAddress=true: Если установлено в true, systemd-networkd будет управлять временными IPv6-адресами, которые создаются для повышения конфиденциальности. Эти адреса часто используются для исходящих подключений, чтобы скрыть основной IPv6-адрес устройства.
- IPv6AcceptRA=true: Включает получение и обработку объявлений маршрутизаторов (RA) для настройки IPv6 через Stateless Address Autoconfiguration (SLAAC). Это позволяет устройству автоматически получать адреса и другую информацию от маршрутизаторов в сети.
- LinkLocalAddressing=ipv6: Указывает, что на интерфейсе будут использоваться только локальные IPv6-адреса. Локальные адреса используются для связи между устройствами в одной сети (например, fe80::/64). Вариантами также могут быть ipv4, both, или no (отключает локальные адреса).
IPv6LinkLocalAddressGenerationMode=eui64: Указывает, как генерировать локальный IPv6-адрес. Значение eui64 означает, что адрес будет сгенерирован на основе MAC-адреса интерфейса, что делает его стабильным и предсказуемым.
[IPv6AcceptRA] - UseDNS=false: Отключает автоматическую настройку DNS-серверов, полученных через объявления маршрутизаторов (RA). Это может быть полезно, если вы хотите использовать свои DNS-серверы, а не те, которые предоставляются маршрутизатором.
- Token=eui64: Использует механизм EUI-64 для генерации идентификатора интерфейса в IPv6-адресах, полученных через SLAAC. Это обеспечивает стабильность адресов, сгенерированных на основе MAC-адреса интерфейса.
[DHCPv6] - UseDNS=false: Отключает использование DNS-серверов, полученных через DHCPv6. Это позволяет использовать вручную настроенные DNS-серверы вместо тех, что предлагает DHCP-сервер.
[Route] - GatewayOnlink=yes: Этот параметр указывает, что шлюз, указанный для маршрута, может находиться в любой сети, не обязательно в сети, к которой подключен данный интерфейс. Это полезно, если шлюз находится за пределами прямого сетевого сегмента, но вы знаете, что он доступен через определённый интерфейс.
Обычное поведение при указании шлюза в маршрутах — это проверка, находится ли шлюз в одной и той же сети, что и интерфейс, на который назначен маршрут. Если эта проверка не проходит, маршрут не будет активирован. Параметр GatewayOnlink=yes игнорирует эту проверку, позволяя маршрутам с указанным шлюзом быть активированными, даже если он находится "вне" локальной сети.
Это может быть полезно в сложных сетевых конфигурациях, например, когда вы настраиваете маршрут через VPN или через многосегментные сети, где шлюз не принадлежит напрямую сети интерфейса.
Реальный пример
Пример конфигурационного файла с опциями максимально приближенными к реальным условиям использования
- Код: выделить все
[Match]
Name=enp0s3
[Network]
DHCP=no
DNS=192.168.114.254
DNS=2000:2cc0:13b1:3333::1
ManageTemporaryAddress=false
IPv6AcceptRA=false
LinkLocalAddressing=ipv6
IPv6LinkLocalAddressGenerationMode=eui64
Domains=free-adm.ru ~.
DNSSECNegativeTrustAnchors=free-adm.ru
[IPv6AcceptRA]
UseDNS=false
[Address]
Label=LANv4
Address=192.168.114.19/24
[Address]
Label=LANv6
Address=2000:2cc0:13b1:3333::19/64
[Route]
Gateway=192.168.114.254
[Route]
Gateway=2000:2cc0:13b1:3333::1
Пример для TunnelBroker Hurricane Electric 6in4
eth1.network
- Код: выделить все
# Это может быть любой общедоступный интерфейс, в основном тот, который подключен к Интернету (собственный или мостовой).
[Match]
Name=eth1
[Network]
#ваш обычный адрес интерфейса: 10.1.1.2/24
Address=<LOCAL_IPV4>/<NETMASK>
Gateway=<LOCAL_IPV4_GW> # local ip gw e.g 10.1.1.1
# ниже приведен адрес туннеля
Tunnel=he6
# Первый из ipv6-адресов маршрутизатора туннеля. ( 2001:470:xxx::1/64 or /48)
Address=<ROUTED_IPV6_ADDRESS>
he.netdev
- Код: выделить все
# Определение и создание туннельного интерфейса
[Match]
[NetDev]
Name=he6
Kind=sit
MTUBytes=1480
[Tunnel]
Remote=<SERVER_IPV4_ADDRESS>
Local=<LOCAL_IPV4>
TTL=255
he.network
- Код: выделить все
# Это конфигурация вашего туннельного интерфейса
[Match]
Name=he6
[Network]
Address=<CLIENT_IPV6_ADDRESS>
Gateway=<SERVER_IPV6_ADDRESS>
# опционально ip forward
IPForward=yes
# Приведенные ниже маршруты на основе политики необходимы только в том случае,
# если вы уже настроили ipv6 и хотите убедиться, что входящая маршрутизация работает правильно
[Route]
Gateway=<SERVER_IPV6_ADDRESS>
Destination=::/0
Table=200
Metric=20
[RoutingPolicyRule]
Table=200
Family=ipv6
From=<CLIENT_IPV6_ADDRESS>
[RoutingPolicyRule]
Table=200
Family=ipv6
From=<ROUTED_IPV6_PREFIX>
Заключение
systemd-networkd — это мощный инструмент для управления сетью, особенно полезный на серверах и в минималистичных окружениях. Он обеспечивает легкость, гибкость и интеграцию с системой, однако требует знания и работы с конфигурационными файлами без графического интерфейса. Fedora, как и другие современные дистрибутивы, поддерживает использование systemd-networkd, что позволяет гибко управлять сетевыми интерфейсами как для IPv4, так и для IPv6.
Настройка параметров Ethernet
# /etc/systemd/networkd/internet.link
- Код: выделить все
[Match]
MACAddress=a0:36:9f:6e:52:26
[Link]
BitsPerSecond=1G
Duplex=full
MTUBytes=1480