Настройка сети в Linux через конфиг-файлы, ч.1
Первое моё общение с Линуксом состоялось около шести лет назад. Тогда это был какой-то свежевышедший Red Hat, который мы с другом смогли установить, но при этом войти в него у нас так и не получилось.
Однако статья не об этом. Позже через мои руки и голову прошли почти все семейства дистрибутивов Linux, и везде я замечал свои подходы к автонастройке сети. И в этом цикле статей я постараюсь осветить наиболее популярные из них. Надеюсь, они будут полезны тем пользователям, которые пока ещё нажимают на кнопки и проставляют галочки в графических менеджерах настройки, но уже понимают, что это не true 🙂
Возможно познавательными эти статьи будут и тем, кто (не от большого знания) пишет свои скрипты управления сетью и помещает их в какой-нибудь rc.local
Итак, в первой части речь пойдёт о семействе номер один, одном из самых обширных по числу дистрибутивов, Red Hat based.
DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
Не все параметры, перечисленные здесь являются обязательными. Зачастую чтобы задать интерфейс достаточно указать IPADDR и NETMASK. Параметр DEVICE необходим, если вы хотите, чтобы в имени скрипта после «ifcfg-» стояло не имя интерфейса, а какое-нибудь другое слово. Здесь же можно указывать такие параметры как GATEWAY, BOOTPROTO (static или dhcp), HWADDR (если есть желание изменить mac-адрес интерфейса) и так далее. Полный список возможных параметров зависит от типа поднимаемого интерфейса и дистрибутива. А, учитывая скудность официальной информации, его можно узнать и познать только перелопатив скрипты.
Такими конфиг-файлами можно задавать различные ppp-интерфейсы, ip-туннели, vlan’ы и так далее.
Следующий пример показывает настройку ipip-туннеля (ifcfg-tun0):
DEVICE=tun0
MY_OUTER_IPADDR=172.16.0.2
PEER_OUTER_IPADDR=192.168.0.1
MY_INNER_IPADDR=10.0.0.2
PEER_INNER_IPADDR=10.0.0.1
TYPE=IPIP
TTL=255
В этом примере мы, имея адрес 172.16.0.2, создаём туннель с машиной 192.168.0.1, указывая TTL=255, и присваиваем туннелю адрес 10.0.0.2 peer 10.0.0.1.
Не все знают, что помимо файлов ifcfg-* в этом же каталоге можно помещать соответствующие им файлы rule-* и route-*
Они нужны, соответственно, чтобы прописывать правила маршрутизации и сами маршруты ( ip rule, ip route ), например при использовании source-policy routing.
Для указанного выше туннеля эти файлы могут выглядеть так.
rule-tun0:
from 10.0.0.2 lookup mytable
route-tun0:
default dev tun0 table mytable
192.168.0.0/24 dev tun0
Создав эти файлы мы снимаем с себя головную боль о том, чтобы соответствующие правила и маршруты создавались и удалялись при поднятии и опускании интерфейса соответственно.
Ещё одна интересная возможность — автоматическое создание алиасов. Если у вас есть интерфейс eth0 с адресом 192.168.0.1, а вы хотите повесить ещё и 192.168.0.2, то достаточно создать файл ifcfg-eth0:1, куда вписать помимо вышеперечисленных параметров (IPADDR, NETMASK и так далее), ещё один — REALDEVICE=eth0.
Если же вдруг возникла необходимость в создании большого числа алиасов, а отдельные файлы для каждого создавать не хочется, то и тут есть выход: нас спасёт ifcfg-eth0-range, который может выглядеть так:
IPADDR_START=192.168.0.5
IPADDR_END=192.168.0.15
CLONENUM_START=3
Этот пример создаст интерфейсы eth0:3 — eth0:13 с адресами от 192.168.0.5 до 192.168.0.15.
Ну и, наконец, нельзя не упомянуть о каталогах ifup.d и ifdown.d, лежащих там же (в /etc/sysconfig/network-scripts).
В эти каталоги вы можете поместить свои файлы, которые будут выполняться при поднятии и опускании интерфейса. Вашим скриптам будет передан один параметр $1 — это имя интерфейса, который был поднят или опущен.
Имея сеть, настроенную по этим принципам, вы всегда можете поднять/опустить отдельный интерфейс командой ifup name (ifdown name), где name — это ваш интерфейс. Чтобы перезагрузить всю сеть, достаточно набрать service network reload.
Следующая часть будет посвящена не семейству, а одному дистрибутиву — Alt Linux. Несмотря на его прямые RedHat-корни, разработчики практически полностью заново написали всю систему управления сетью, которая получила имя etcnet и заслужила (на мой взгляд) более пристального внимания 🙂
Sysadminium
Настройка сети – это один из важнейших навыков системного администрирования, и в этой статье мы научимся настраивать сеть на Ubuntu 22.04.
Получение информации о сетевых интерфейсах
В прошлой статье мы разобрали настройку сети в системе Debian 11, а в этой разберём всё тоже самое но для Ubuntu 22.04.
Посмотреть на доступные сетевые интерфейсы мы точно также можем с помощью утилиты lshw. И на сервере Ubuntu эта утилита предустановлена.
$ sudo lshw -C network *-network:0 description: Ethernet controller product: Virtio network device vendor: Red Hat, Inc. physical id: 12 bus info: pci@0000:00:12.0 version: 00 width: 64 bits clock: 33MHz capabilities: msix bus_master cap_list rom configuration: driver=virtio-pci latency=0 resources: irq:11 ioport:e0e0(size=32) memory:fea93000-fea93fff memory:fe40c000-fe40ffff memory:fea00000-fea3ffff *-virtio3 description: Ethernet interface physical id: 0 bus info: virtio@3 logical name: ens18 serial: 02:6e:f0:fb:d4:71 capabilities: ethernet physical configuration: autonegotiation=off broadcast=yes driver=virtio_net driverversion=1.0.0 ip=172.28.90.34 link=yes multicast=yes *-network:1 description: Ethernet controller product: Virtio network device vendor: Red Hat, Inc. physical id: 13 bus info: pci@0000:00:13.0 version: 00 width: 64 bits clock: 33MHz capabilities: msix bus_master cap_list rom configuration: driver=virtio-pci latency=0 resources: irq:10 ioport:e100(size=32) memory:fea94000-fea94fff memory:fe410000-fe413fff memory:fea40000-fea7ffff *-virtio4 description: Ethernet interface physical id: 0 bus info: virtio@4 logical name: ens19 serial: 82:dd:88:27:00:a5 capabilities: ethernet physical configuration: autonegotiation=off broadcast=yes driver=virtio_net driverversion=1.0.0 link=yes multicast=yes
В этом примере у меня два сетевых интерфейса: ens18 (02:6e:f0:fb:d4:71) и ens19 (82:dd:88:27:00:a5). При этом ip адрес назначен только на ens18 (172.28.90.34).
Мы уже знаем что утилита lshw в основном используется, чтобы узнать имя и возможности сетевой карты, то есть информацию о железе. А для получения настроек сетевых интерфейсов нужно использовать команду – ip. Работает эта команда точно также как в Debian, поэтому заострять на ней внимание не буду.
$ ip addr show ens18 2: ens18: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 02:6e:f0:fb:d4:71 brd ff:ff:ff:ff:ff:ff inet 172.28.90.34/20 brd 172.28.95.255 scope global dynamic ens18 valid_lft 258376sec preferred_lft 258376sec inet6 fe80::6e:f0ff:fefb:d471/64 scope link valid_lft forever preferred_lft forever $ ip addr show ens19 3: ens19: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 82:dd:88:27:00:a5 brd ff:ff:ff:ff:ff:ff inet6 fe80::80dd:88ff:fe27:a5/64 scope link valid_lft forever preferred_lft forever
В примере выше видно, что ens18 имеет назначенный ip адрес, а ens19 нет. Но оба интерфейса активны (state UP).
Настройка IP адреса
Вот настройка сетевых интерфейсов при помощи конфигурационных файлов в Ubuntu значительно отличается от Debian. Это потому-что в Ubuntu используется система для управления сетью — Netplan. И нужно будет изучить конфигурационные файлы и команды этой системы.
Конфигурационные файлы Netplan находятся в каталоге «/etc/netplan«, а конфигурационный файл созданный при установки системы — «/etc/netplan/00-installer-config.yaml«.
Посмотрим на этот конфиг с помощью утилиты cat:
$ cat /etc/netplan/00-installer-config.yaml # This is the network config written by 'subiquity' network: ethernets: ens18: dhcp4: true ens19: dhcp4: true version: 2
Такой формат конфигурационных файлов называется — YAML (произносится как «ямл»).
Разберём этот файл построчно:
- network: — говорит о том, что сейчас будем настраивать сеть;
- ethernets: — начинается настройка сетевых интерфейсов;
- ens18: — настраиваем интерфейс ens18;
- dhcp4: true — ip адрес будет получен по dhcp;
- dhcp4: true — ip адрес будет получен по dhcp;
Разбирать формат YAML не буду, просто покажу как назначить статичные ip адреса и отключить dhcp.
Число в имени файла — означает приоритет, и чем оно выше, тем выше приоритет у файла. Создадим новый конфиг, имя можно придумать любое, но чтобы этот файл стал главнее текущего, установим приоритет 02-:
$ sudo nano /etc/netplan/02-network.yaml network: ethernets: ens18: dhcp4: no addresses: [ 172.28.90.75/20 ] routes: - to: default via: 172.28.80.10 nameservers: addresses: [ 77.88.8.8, 77.88.8.1 ] ens19: dhcp4: no addresses: [ 192.168.0.10/24 ] version: 2
После создания конфигурационного файла проверим его на синтаксис:
Если в выводе пусто, значит конфигурация верна.
Теперь можно применить настройки:
После этого, вам придётся заново подключится к серверу по ssh, по другому ip адресу.
Итак, мы указали ip адреса для обоих интерфейсов, а также назначили на одном из низ шлюз по умолчанию (routes: — to default) и dns сервера (nameservers).
И запомните, на сервере Ubuntu 22.04, не нужно использовать утилиты ifdown и ifup. Здесь работает netplan, и применять настройки нужно с помощью этой утилиты, предварительно проверив конфигурацию.
Добавление статических маршрутов
Добавлять статические маршруты нужно также в уже знакомом файле «/etc/netplan/02-network.yaml«:
$ sudo nano /etc/netplan/02-network.yaml network: ethernets: ens18: dhcp4: no addresses: [ 172.28.90.75/20 ] routes: - to: default via: 172.28.80.10 - to: 192.168.5.0/24 via: 172.28.80.5 on-link: true nameservers: addresses: [ 77.88.8.8, 77.88.8.1 ] ens19: dhcp4: no addresses: [ 192.168.0.10/24 ] version: 2
При добавлении маршрута нужно указать:
- — to: 192.168.5.0/24 — префикс (сеть назначения);
- via: 172.28.80.5 — через какой шлюз нужно добираться до сети назначения;
- on-link: true — активировать маршрут при поднятии интерфейса.
Применим настройки и проверим маршрут с помощью команды ip:
$ sudo netplan apply $ ip route show default via 172.28.80.10 dev ens18 proto static 172.28.80.0/20 dev ens18 proto kernel scope link src 172.28.90.75 192.168.0.0/24 dev ens19 proto kernel scope link src 192.168.0.10 192.168.5.0/24 via 172.28.80.5 dev ens18 proto static onlink
В примере выше — 192.168.5.0/24 via 172.28.80.5 dev ens18 proto static onlink — и есть наш дополнительный статический маршрут.
Итог
Вот мы и прошли тему “Настройка сети на Ubuntu“.
Мы познакомились с системой Netplan. Научились настраивать сеть с помощью конфигурационных файлов /etc/netplan/**-имя.yaml. Узнали как проверить и применить настройки с помощью команды netplan.
Теперь можем указать ip адрес, адрес шлюза, адрес dns сервера, а также можем создать отдельные маршруты в системе Ubuntu 22.04
- ens18: — настраиваем интерфейс ens18;
- ethernets: — начинается настройка сетевых интерфейсов;