Есть несколько способов настройки сети в современных версиях Ubuntu. В
настоящее время используют Network Manager, Systemd Networkd и Netplan. В
прошлом за настройку отвечал файл конфигурации /etc/network/interfaces.
Файл /etc/network/interfaces
Интерфейсы, настроенные с помощью файла /etc/network/interfaces, можно включать и выключать с помощью команд ifup и ifdown.
$ sudo ifdown enp7s0
$ sudo ifup enp7s0
При внесении больших изменений в сеть — например, при добавлении
виртуальных интерфейсов — можно повторно инициализировать сеть,
перезапустив службу
$ sudo systemctl restart networking.service
При использовании DHCP файл /etc/network/interfaces будет совсем простым
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
Директива iface описывает сетевой интерфейс, inet означает семейство интернет-протоколов (IPv4), lo означает виртуальный сетевой интерфейс, которому мы назначаем ip-адрес 127.0.0.1. Директива auto eth0 предписывает автоматически включить сетевой интерфейс eth0 во время загрузки.
При назначении статического ip-адреса файл /etc/network/interfaces будет таким
iface lo inet loopback
auto eth0
iface eth0 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
Есть возможность выполнить команду или скрипт перед или после включения-выключения интерфейса
pre-up command
post-up command
pre-down command
post-down command
Служба systemd-networkd
Перед настройкой и активацией systemd-networkd.service потребуется отключить применение сетевых настроек из файла /etc/network/interfaces. Для этого достаточно просто переименовать данный конфигурационный файл.
$ sudo mv /etc/network/interfaces /etc/network/interfaces.save
Файлы конфигурации systemd-networkd.service находятся в директории /etc/systemd/network и могут быть трех видов
- *.link — конфигурация физических параметров интерфейсов (имя, MAC, MTU и т.д.)
- *.network — конфигурация сети (IP-адрес, DHCP, маршруты, DNS и т.д.)
- *.netdev — для настройки виртуальных интерфейсов (VLAN, мосты, туннели, VPN и т.п.)
Файлы *.link в обязательном порядке создавать необходимости
нет. Они нужны, когда необходимо изменить физические параметры
интерфейсов. Например, если не устраивает системное именование
интерфейсов, управляемое udev, то можно прописать новое правило именования интерфейса, отталкиваясь от его MAC-адреса или адреса на шине PCI.
Пример конфигурационного файла /etc/systemd/network/90-nic1-port0.link, в котором изменяется имя интерфейса с определённым MAC адресом
[Match]
MACAddress=04:01:50:23:1f:02
[Link]
Name=nic1-port0
Пример конфигурационного файла /etc/systemd/network/80-lan0-dhcp.network для настройки интерфейса eth0 с помощью DHCP
[Match]
Name=eth0
[Network]
DHCP=ipv4
LinkLocalAddressing=no
Опция LinkLocalAddressing поможет избежать появления в системе IPv6 адреса, если есть желание отключить IPv6 в системе полностью.
Обратите внимание на то, что если мы изменили имя интерфейса с помощью *.link файла, как в примере выше, то при последующей настройке этого интерфейса в *.network файле, в директиве Name нужно использовать именно изменённое имя интерфейса.
Пример конфигурационного файла /etc/systemd/network/80-lan0-dhcp.network для настройки IPv4/v6 на всех интерфейсах, имена которых подпадают под маску eth*, с помощью DHCP
[Match]
Name=eth*
[Network]
DHCP=ipv4
DHCP=ipv6
Пример конфигурационного файла /etc/systemd/network/50-lan0-static.network для статической настройки интерфейса enp8s0
[Match]
Name=enp8s0
[Network]
Description=Local network
Address=192.168.1.20/24
Gateway=192.168.1.1
DNS=192.168.1.1 192.168.2.1
Domains=sub1.holding.com sub2.holding.com
LinkLocalAddressing=no
То есть, для минимальной конфигурации сети, например, с указанием
статического ip-адреса на основном интерфейсе сервера, нам достаточно
настроить один *.network файл.
Включаем автоматический запуск службы systemd-networkd при старте системы
$ sudo systemctl enable systemd-networkd.service
Запускаем службу
$ sudo systemctl start systemd-networkd
Проверяем статус интерфейсов
$ networkctl list
Проверяем статус настроек сети
$ networkctl status
Проверяем лог службы
$ journalctl -u systemd-networkd.service
Netplan
Netplan — новый уровень абстракции над сетевыми менеджерами. В Ubuntu Server для настроки сети используется systemd-networkd.service, в Ubuntu Desktop для той же цели используется NetworkManager.service, а завтра может появится что-то еще.
Все конфигурационные файлы Netplan находятся в директории /etc/netplan.
Во время запуска системы, конфигурация Netplan преобразуется в
конфигурацию той службы, которая будет управлять сетью и помещается в
каталог /run. По умолчанию в Ubuntu Desktop есть только один конфигурационный файл со следующим содержимым.
$ cat /etc/netlan/01-network-manager-all.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
Первые две строчки конфигурации стандартны. Первая указывает, что мы
будем иметь дело с сетью, а вторая указывает версию стандарта
конфигурации, которая будет использоваться. Третья строка означает, что
управление всей сетью передаётся NetworkManager.
Сетевой интерфейс enp0s3 получает все настройки от DHCP-сервера
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: yes
Переопределим часть настроек, которые приходят от DHCP-сервера
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: yes
dhcp4-overrides:
use-dns: no
use-domains: no
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
Формат YAML допускает блочный и строчный формат для списков
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: yes
dhcp4-overrides:
use-dns: no
use-domains: no
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
Теперь для интерфейса enp0s3 назначим статический ip-адрес
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.1.10/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
Обсудить эту статью можно в Телеграм канале: https://t.me/linautonet