Сегодня я хочу рассказать о сетевых настройках в системах CentOS и Debian. Прежде всего статья будет полезна новичкам в Linux. Все действия описываемые в этой статье, рекомендую сначала воспроизводить на виртуальной машине, для тренировки, во избежание неприятностей на реальной машине в сети.
Владельцам VPS/VDS как правило не приходится проводить настройку сети, обычно там все уже настроено при создании, но тем не менее для новичков статья лишней не будет.
Как узнать свой ip-адрес
Чтобы узнать ip-адрес системы можно выполнить следующие команды:
ifconfig | grep inet inet addr:93.170.169.118 Bcast:93.170.169.255 Mask:255.255.254.0 inet6 addr: fe80::5054:ff:fe8b:f117/64 Scope:Link inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host ip addr | grep inet inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host inet 93.170.169.118/23 brd 93.170.169.255 scope global ens3 inet6 fe80::5054:ff:fe8b:f117/64 scope link
На данный момент команда ifconfig является хоть и устаревшей, но еще работающей командой (В CentOS требуется установить пакет net-tools). Начиная с ядра версии 2.2 ей на смену пришел пакет iproute2, состоящий из утилит: ip, tc, ss.
Настройка сетевых интерфейсов в CentOS
Настройка сетевых интерфейсов в CentOS происходит правкой конфигурационных файлов. Файлы интерфейсов хранятся в директории /etc/sysconfig/network-scripts, каждый отвечает за свой интерфейс, таким образом сколько интерфейсов, столько и файлов. Во время установки создается дефолтный файл с именем - ifcfg-enp0s3.
Содержание файла ifcfg-enp0s3: TYPE="Ethernet" BOOTPROTO="dhcp" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no" NAME="enp0s3" UUID="cac20b32-66a0-46bd-9b68-ec786f52d2f8" DEVICE="enp0s3" ONBOOT="yes"
Рассмотрим самые важные параметры и значения, чтобы понимать что к чему. Более подробно все параметры описаны в официальной документации Red Hat.
- TYPE - задает тип сетевого адаптера, в данном случае "Ethernet".
- BOOTPROTO - способ назначения ip-адреса. Может иметь значения: dhcp — динамический ip-адрес, static или none — статический ip-адрес.
- DEFROUTE - использовать интерфейс в качестве маршрута по умолчанию. Значения yes или no.
- IPV4_FAILURE_FATAL - В случае отсутствия IPv4 протокола закрывать соединение, по умолчанию no.
- NAME - имя интерфейса.
- DEVICE - имя устройства.
- UUID - идентификационный номер интерфейса.
- ONBOOT - старт интерфейса при загрузке, значения yes или no.
- IPV6INIT - включение поддержки IPv6 протокола, значения yes или no.
- IPV6_AUTOCONF
IPV6_DEFROUTE
IPV6_PEERDNS
IPV6_PEERROUTES
IPV6_FAILURE_FATAL - дополнительные параметры для IPv6 протокола.
Подобная конфигурация означает получение динамического ip-адреса при каждом запуске. Для назначения статического адреса нужно изменить несколько параметров.
- BOOTPROTO=none - изменяем на none, тем самым указывая что ip будет статическим.
- IPADDR=192.168.1.6 - назначаем сам адрес.
- NETMASK=255.255.255.0 - задаем маску подсети.
- GATEWAY=192.168.1.1 - указываем адрес шлюза.
- DNS1=192.168.1.1 - задаем адреса DNS серверов.
После внесенных изменений файл должен принять следующий вид, естественно с поправками на ваши значения адресов.
TYPE=Ethernet BOOTPROTO=none IPADDR=192.168.1.6 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=192.168.1.1 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=enp0s3 UUID=cac20b32-66a0-46bd-9b68-ec786f52d2f8 DEVICE=enp0s3 ONBOOT=yes
Перезапустим интерфейс для применения изменений.
ifdown enp0s3 && ifup enp0s3
Настройка сетевых интерфейсов в Debian & Ubuntu
За конфигурацию интерфейсов в Debian отвечает файл interfaces, расположенный в каталоге /etc/network/. В Debian & Ubuntu все интерфейсы прописываются в одном файле. В Debian интерфейсы именуются eth0, eth1 и т.д. В Ubuntu - enp0s3 и т.д.
Содержание файла interfaces: # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet dhcp
Данная конфигурация обозначает получение динамического ip-адреса при загрузке системы.
- allow-hotplug eth0 - инициализация интерфейса eth0 при определении ядром, грубо говоря запуск.
- iface eth0 inet dhcp - назначение динамического адреса для eth0, значение inet dhcp.
- iface lo inet loopback - интерфейс обратной петли lo, локальный интерфейс другими словами.
- auto lo - старт при загрузке.
Строки начинающиеся со слов "auto", используются для идентификации интерфейсов при их подъеме командой ifup -a (c доп. опцией -a), именно так поднимает интерфейсы система при загрузке. Имена интерфейсов следуют за словом "auto" в этой же строке, ifup поднимет их в порядке перечисления. Строк начинающихся с "auto" может быть несколько.
Строки, начинающиеся со слов "allow-" используются для идентификации интерфейсов, которые должны быть подняты автоматически различными подсистемами.
Для задания интерфейса со статическим ip-адресом могут использоваться следующие опции.
- inet static - указывает на статический ip-адрес
- address - задает ip-адрес
- netmask - указание маски подсети
- gateway - указание шлюза
- network - указание адреса подсети
- broadcast - указание широковещательного канала.
- dns-nameservers - указывает имена DNS-серверов (Если установлен пакет resolvconf)
Интерфейс настроенный на получение статического ip-адреса будет выглядеть так.
Конечный вид файла с внесенными изменениями: # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.1.7 netmask 255.255.255.0 gateway 192.168.1.1 network 192.168.1.0 broadcast 192.168.1.255
Для применения изменений перезапустим интерфейс.
ifdown eth0 && ifup eth0
Изменение hostname в CentOS
Для изменения hostname в CentOS нужно проделать несколько манипуляций с конф. файлами. Чтобы узнать текущее имя выполним команду hostname.
[root@test ~]# hostname test
Текущее имя системы test. Я хочу изменить его на techlist, делаем следующее.
Вносим изменения в файл network: nano /etc/sysconfig/network Добавим в файл строку: HOSTNAME=techlist Вносим изменения в файл hosts: nano /etc/hosts Добавим ip-адрес и имя в файл: 192.168.1.6 techlist / ваш ip ваше имя Вносим изменения в файл sysctl.conf nano /etc/sysctl.conf Добавим в конец файла: kernel.hostname = techlist Перезапустим network для принятия изменений: systemctl restart network Проверяем изменения: [root@test ~]# hostname techlist
Изменение hostname в Debian
Существует несколько способов изменения hostname в Debian. Первый способ самый простой, но временный, он действует до первой перезагрузки. Выполните команду - hostname newname, где newname надо заменить на имя которое хотите присвоить системе.
Например я хочу изменить имя системы на techlist
hostname techlist # Проверяем root@Test:~# hostname techlist
Как я уже говорил, оно действует только до первой перезагрузки системы, так как при загрузке системы идет считывание имени из файла /etc/hostname.
Чтобы изменить имя системы при помощи файла /etc/hostname, отредактируем его:
nano /etc/hostname Добавить нужное имя: techlist
Чтобы применить изменения внесенные в файл hostname, надо выполнить скрипт hostname.sh
выполняем скрипт: /etc/init.d/hostname.sh start перезагружаем систему: reboot проверяем: root@techlist:~# hostname techlist
Настройка DNS в CentOS
За настройку DNS-серверов в CentOS отвечают два файла: сам файл сетевого интерфейса и файл resolv.conf в директории /etc.
Если править отдельно resolv.conf, то после перезапуска интерфейса изменения не сохранятся. Они будут автоматически заменены на значения указанные в файле ifcfg-enp0sX. Это из-за того что в файле интерфейса есть параметр "PEERDNS=yes", когда он включен происходит замена адресов DNS в файле resolv.conf, на значения из файла интерфейса.
Редактируем файл интерфейса: nano /etc/sysconfig/network-scripts/ifcfg-enp0s3 Добавляем несколько DNS серверов: DNS1=192.168.1.1 # роутер DNS2=8.8.8.8 # DNS Гугла Перезапускаем интерфейс: ifdown enp0s3 && ifup enp0s3 Смотрим resolv.conf: cat /etc/resolv.conf ; generated by /usr/sbin/dhclient-script nameserver 192.168.1.1 nameserver 8.8.8.8
Чтобы изменить значения DNS серверов в CentOS, достаточно внести правку в файл интерфейса, при включенном параметре PEERDNS.
Настройка DNS в Debian
Назначить DNS сервера в Debian можно несколькими способами. Правкой файла /etc/resolv.conf и использованием утилиты resolvconf, только не путайте, это совершенно разные вещи.
Прежде чем настраивать DNS нужно узнать стоит ли пакет resolvconf или нет. Узнать можно так:
dpkg -l Если есть такая строка в выводе, то resolvconf установлен: ii resolvconf 1.76.1 all name server information handler
Если resolvconf не установлен, то можно добавить адреса DNS сразу в файл /etc/resolv.conf, сохранить изменения и перезапустить интерфейс.
nano /etc/resolv.conf Содержание файла: nameserver 192.168.1.1 # тут у меня адрес шлюза/роутера Можно добавить столько серверов, сколько необходимо, например DNS гугла: nameserver 8.8.8.8 nameserver 8.8.4.4
Со временем система обживается, появляются новые программы изменяющие содержимое файла resolv.conf, поэтому лучше использовать утилиту resolvconf. Если утилита отсутствует, например при минимальной установке системы, то ее необходимо поставить.
apt-get install -y resolvconf
После установки файл /etc/resolv.conf заменяется ссылкой на /etc/resolvconf/run/resolv.conf. Если понадобится внести свои значения DNS, то сделать это можно через файл интерфейсов.
nano /etc/network/interfaces Добавляем свои DNS, прописываем значения dns-nameservers 8.8.8.8 8.8.4.4 # писать адреса через пробел Перезапустим интерфейс: ifdown eth0 && ifup eth0 Проверяем: cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 192.168.1.1
После чего добавленные DNS адреса, пропишутся в файл resolv.conf автоматически.
Отключение IPv6 протокола
Протокол IPv6 - технология предоставляющая более обширное пространство ip-адресов нежели привычный IPv4. На данный момент редко используется и поддерживается не всем сетевым оборудованием.
Если IPv6 не поддерживается вашим маршрутизатором или провайдером, то имеет смысл его отключить, поскольку замедляется общая работа сети; дольше определяются имена сайтов, выполняются ненужные попытки получения IPv6 адресов, это приводит к лишним задержкам.
Узнать свой IPv6 адрес можно следующим способом
ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:8b:f1:17 brd ff:ff:ff:ff:ff:ff inet 93.170.169.118/23 brd 93.170.169.255 scope global ens3 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe8b:f117/64 scope link valid_lft forever preferred_lft forever
Строка начинающаяся с - inet6 fe80::5054:ff:fe8b:f117/64 и есть искомый адрес. Поддержка IPv6 включена в Linux по умолчанию, но это не означает что его может поддерживать ваш провайдер. Чтобы проверить поддержку IPv6 вашим провайдером, можно выполнить пинг ipv6.google.com. Если обмен пакетами происходит, то протокол поддерживается, если нет, то будет следующее.
root@techlist:~# ping6 ipv6.google.com connect: Network is unreachable
Перед тем как отключить поддержку IPv6 протокола надо узнать какая из программ использует его на текущий момент.
netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1157/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1257/master tcp6 0 0 :::22 :::* LISTEN 1157/sshd tcp6 0 0 ::1:25 :::* LISTEN 1257/master udp 0 0 127.0.0.1:323 0.0.0.0:* 564/chronyd udp6 0 0 ::1:323 :::* 564/chronyd
Все что начинается с ::: это IPv6, его используют три демона: sshd, chronyd и master (postfix). Для того чтобы исключить ошибки в дальнейшей работе, надо отключить IPv6 для каждого.
sshd: nano /etc/ssh/sshd_config Раскомментируем строки и заменим any на inet: #AddressFamily any #ListenAddress 0.0.0.0 AddressFamily inet ListenAddress 0.0.0.0 postfix: nano /etc/postfix/main.cf Находим строку и меняем значение all на ipv4: inet_protocols = all inet_protocols = ipv4 Создадим файл chronyd: nano /etc/sysconfig/chronyd Добавим в него строку: OPTIONS=-4
В CentOS
Отключение поддержки IPv6 протокола в CentOS происходит следующим образом.
Редактируем sysctl.conf: nano /etc/sysctl.conf Добавим: net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 Редактируем network: nano /etc/sysconfig/network Добавим: NETWORKING_IPV6=no IPV6INIT=no Перезагрузим систему: reboot
Проверим настройки:
ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.6 netmask 255.255.255.0 broadcast 192.168.1.255 ether 08:00:27:71:cf:76 txqueuelen 1000 (Ethernet) RX packets 33 bytes 4394 (4.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 37 bytes 7067 (6.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 0 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 Строк вида inet6 fe80::5054:ff:fe8b:f117 inet6 ::1 нигде нет, значит порядок.
Также можно убрать все строки начинающиеся с IPV6 в конфигурационном файле интерфейса.
nano /etc/sysconfig/network-scripts/ifcfg-enp0s3 Убираем строки за ненадобностью: IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no
В Debian & Ubuntu
В Debian отключение поддержки IPv6 происходит правкой файла sysctl.conf или правкой файла grub.
Редактируем /etc/sysctl.conf
nano /etc/sysctl.conf Нужно добавить в файл: net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 Сохранить и выйти.
Применить изменения в файле sysctl.conf
sysctl -p
Проверим изменения.
ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:8b:f1:17 brd ff:ff:ff:ff:ff:ff inet 93.170.169.118/23 brd 93.170.169.255 scope global ens3 valid_lft forever preferred_lft forever
Иногда бывает что IPv6 приходится отключать путем редактирования параметров загрузки ядра.
nano /etc/default/grub Нужно найти строку GRUB_CMDLINE_LINUX="" и изменить ее следующим образом GRUB_CMDLINE_LINUX="ipv6.disable=1" Точно также можно изменить значение строки GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1" Эффект будет тот же самый
Теперь нужно обновить конфигурацию загрузчика.
update-grub2
Потом перезагрузить систему.
reboot
Проверяем.
ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:65:57:69 brd ff:ff:ff:ff:ff:ff inet 192.168.1.220/24 brd 192.168.1.255 scope global eth0 valid_lft forever preferred_lft forever
Тут тоже нет строк начинающихся с "inet6", значит порядок.