Сетевые настройки Linux.

Сегодня я хочу рассказать о сетевых настройках в системах 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", значит порядок.

Ответить:

Please enter your comment!
Please enter your name here