Настройка маршрутизации и сети в Linux

В этой статье вы узнаете, как настроить расширенные сетевые функции. Статья начинается с объяснения конфигурации агрегирования канала для создания избыточности сетевых интерфейсов, увеличения пропускной способности или того и другого. Во второй части этой статьи показано, как настроить адреса IPv6, а в последней части вы узнаете, как настроить маршрутизацию в Linux.

Настройка агрегирования канала в Linux

На сетевых серверах важно обеспечить постоянную доступность сетевого интерфейса. В Linux вы можете создавать объединенные сетевые интерфейсы.

Настройка NIC в режиме bonding

Для того, чтобы создать связанный сетевой интерфейс, вы можете использовать утилиты nmtui или nmcli. В этом разделе описывается, как использовать утилиту nmcli, которая относительно проста, потому что есть хорошая справочная страница man 5 nmcli-examples, которая ясно описывает, как настроить сетевой интерфейс.

Ниже процитирована часть примера из man 5 nmcli-examples
Example 6. Adding a bonding master and two slave connection profiles
$ nmcli con add type bond ifname mybond0 mode active-backup
$ nmcli con add type bond-slave ifname eth1 master mybond0
$ nmcli con add type bond-slave ifname eth2 master mybond0
This example demonstrates adding a bond master connection and
two slaves. The first command adds a master bond connection, naming
the bonding interface mybond0 and using active-backup mode. The
next two commands add slaves connections, both enslaved to mybond0.
The first slave will be bound to eth1 interface, the second to
eth2.

Давайте подробно рассмотрим, что объясняет пример на странице руководства. Для начала используется команда nmcli con add type bond ifname mybond0 mode active-backup. В этой команде добавляется соединение, и тип этого соединения устанавливается как bond. Интерфейс, который будет создан для этого соединения, будет известен как mybond0, а режим настроен как active-backup. Поскольку имени для соединения не назначено, nmcli установит это имя автоматически, что можно проверить с помощью nmcli con show. Имя по умолчанию - bond-mybond0.

При настройке связанного интерфейса (bonded interface) у вас есть семь различных доступных режимов. В таблице 1 представлен обзор этих режимов, но в целом вы можете использовать режим active-backup, который является одним из наиболее распространенных режимов для создания связанных интерфейсов.

РежимПояснение
balance-rr (0) Этот режим передает пакеты в последовательном порядке от первого до последнего интерфейса. Этот режим обеспечивает балансировку нагрузки и отказоустойчивость.

active-backup (1) Один интерфейс активен, а другой интерфейс становится активным только в случае сбоя этого интерфейса. MAC-адрес доступен только для одного интерфейса. Этот метод обеспечивает отказоустойчивость, а не балансировку нагрузки.

balance-xor (2) В этом режиме передача пакетов распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.

broadcast (3) Все пакеты передается на все интерфейсы. Обеспечивает отказоустойчивость, а не балансировку нагрузки.

802.3ad (4)Это режим Link Agregation 802ad. Настраивается одновременно в Linux и на коммутаторе, который поддерживает этот режим.

balance-tlb (5) Адаптивная балансировка нагрузки передачи. Исходящий трафик распределяется между активными интерфейсами  в соответствии с текущей нагрузкой, а входящий трафик принимается только на один интерфейс. Этот режим используется не часто.
balance-alb (6)Как и в методе 5, но добавляет балансировку нагрузки при входящем трафике. Этот режим используется не часто.

После создания и настройки bonded-интерфейса вам необходимо добавить к нему физические интерфейсы. Для этого вам понадобится следующая команда на каждом из физических интерфейсов, которые вы хотите назначить для связи: nmcli con add type bond-slave ifname eth1 master mybond0. (Обязательно замените eth1 именем устройства, которое используется на вашем оборудовании.) Это создает новое соединение поверх физического устройства, которое вы хотите использовать, и назначает его ранее созданному интерфейсу mybond0.

После того, как вы создадите связь таким образом, будут созданы связанные файлы конфигурации. После создания связанного интерфейса с помощью этих команд вы можете посмотреть его текущее состояние с помощью nmcli dev show mybond0. Результат этой команды показан в листинге 1.

Таблица 1
[root@server1 ~]# nmcli dev show mybond0
GENERAL.DEVICE:                       mybond0
GENERAL.TYPE:                           bond
GENERAL.HWADDR:                    DE:8A:A4:7E:DC:05
GENERAL.MTU:                            1500
GENERAL.STATE:                         70 (connecting (getting IP configuration))
GENERAL.CONNECTION:             bond-mybond0
GENERAL.CON-PATH:                  /org/freedesktop/
NetworkManager/ActiveConnection/2

На этом этапе вам необходимо создать конфигурацию IP-адреса, которую вы хотите использовать на интерфейсе mybond0. Для этого выполните nmcli con mod bond-mybond0 ipv4.addresses 192.168.4.210/24. Затем используйте nmcli con up bond-mybond0, чтобы включить интерфейс.

В результате все ваши настройки будут сохранены в каталоге /etc/sysconfig/network-scripts, где вы должны увидеть три разных файла конфигурации:
  • ifcfg-bond-mybond0
  • ifcfg-bond-slave-eno16777736
  • ifcfg-bond-slave-eno33554992
Если вы все еще видите файл конфигурации, который ссылается на старое соединение, которое использовалось на физической сетевой карте (например, ifcfg-eno16777736), вы можете безопасно удалить его. В листинге 2 вы можете увидеть, как выглядит содержимое файла конфигурации ifcfg-bond-mybond0, а в листинге 3 показано содержимое одного из файлов backup bond-интерфейса.

Листинг 2
[root@server1 network-scripts]# cat ifcfg-bond-mybond0
DEVICE=mybond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=bond-mybond0
UUID=98e61443-cd2a-4eb6-9a9f-c652d95c22fa
ONBOOT=yes
BONDING_OPTS=mode=active-backup
IPADDR=192.168.4.210
PREFIX=24
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

Листинг 3
[root@server1 network-scripts]# cat ifcfg-bond-slave-eno16777736
TYPE=Ethernet
NAME=bond-slave-eno16777736
UUID=7621cc16-86eb-408a-afbf-3ca4d56c1752
DEVICE=eno16777736
ONBOOT=yes
MASTER=mybond0
SLAVE=yes

Когда интерфейс активен вы можете проверить текущий статус через /proc/net/bonding, где будет создан файл конфигурации для каждого соединения, которое было добавлено в конфигурацию. С помощью этого файла вы можете легко увидеть текущее состояние интерфейса, включая используемые MAC-адреса и текущее состояние интерфейсов. В листинге 4 показано, как может выглядеть содержимое этого файла.

Листинг 4
[root@server1 ~]# cat /proc/net/bonding/mybond0
Ethernet Channel Bonding Driver:  v3.7.1 (April 27, 2011)
Bonding Mode:  fault-tolerance (active-backup)
Primary Slave:  None
Currently Active Slave:  eno33554992
MII Status:  up
MII Polling Interval (ms):  100
Up Delay (ms):  0
Down Delay (ms):  0
Slave Interface:  eno33554992
MII Status:  up
Speed:  1000 Mbps
Duplex:  full
Link Failure Count:  0
Permanent HW addr:  00:0c:29:46:f3:fc
Slave queue ID:  0

NIC в режиме teaming

Network teaming) - это еще один метод объединения различных физических сетевых интерфейсов в один логический интерфейс, чтобы обеспечить отказоустойчивость или более высокую пропускную способность. Как упоминалось ранее, вы можете использовать любой из них для достижения той же цели использования агрегированного сетевого интерфейса.

В более ранних версиях Linux сетевое соединение использовалось для достижения тех же целей. В предыдущем разделе вы узнали, как настроить сетевое соединение. Network Teaming- это новое в CentOS 7. Решение состоит из небольшого драйвера ядра и демона, доступного в userspace: teamd. Ядро заботится об обработке сетевых пакетов, в то время как командный драйвер обрабатывает логику и обработку интерфейса. Чтобы определить, как именно это происходит, используются разные переключатели(runners). Переключатели в teaming эквивалентны режимам соединения, перечисленным в таблице 2. Они используются для определения логики обработки трафика между интерфейсами, которые участвуют в конфигурации. Таблица 3 дает сводку доступных переключателей.

ПереключательКак работает

broadcastВсе пакеты передаются на все порты.

roundrobinПакеты передаются в циклическом режиме из каждого порта в team.

activebackupСредство аварийного переключения при сбое, которое наблюдает за изменениями линков и выбирает активный интерфейс.

loadbalanceПереключатель, который использует хеш-функцию для достижения оптимального распределения нагрузки при выборе сетевых интерфейсов для передачи пакетов.

lacpПереключатель, который выполняет балансировку нагрузки на основе Lightweight Access Control Protocol (LACP), который также известен как 802.3ad. Убедитесь, что он поддерживается на ваших коммутаторах, прежде чем выбрать этот переключатель. Если этот переключатель используется, вам, вероятно, придется также выполнить некоторые дополнительные настройки на своих коммутаторах.


Конфигурирование в режиме team

Team интерфейс может быть создан с помощью утилит nmcli или nmtui.

Создание team интерфейса включает в себя несколько шагов:
  1. Создайте team интерфейс.
  2. Добавьте конфигурацию IP-адреса.
  3. Назначьте интерфейсы порта.
  4. Включите team интерфейс.
Как уже упоминалось, можно использовать nmcli или nmtui для настройки team. Но для большего понимания как это работает, сделаем это с помощью утилиты nmcli. Так же основываясь на вашем понимании работы утилиты nmcli, вы легко сможете настроить командный интерфейс с помощью утилиты nmtui.

Первый шаг в процедуре состоит в создании интерфейса team. Следующая команда дает пример того, как это сделать:
nmcli con add type team con-name team0 config '{ "runner": {"name": "loadbalance"}}'

■ Команда nmcli con add используется для добавления интерфейса типа team.
■ Часть команды con-name используется для задания имени  team0.
■ Часть команды config используется для указания дополнительной конфигурации. В этой части команды используется много кавычек, но это только потому, что это очень организованная команда:
   ■ Весь аргумент config находится между одинарными кавычками.
   ■ Каждый элемент конфигурации находится между фигурными скобками и двойными кавычками.
   ■ Каждый элемент, который назначен элементу конфигурации, также находится между фигурными скобками и двойными кавычками.

После создания подключения типа team используйте nmcli con show, чтобы показать текущую конфигурацию.
Вы можете посмотреть в справочной странице man 5 nmcli-examples несколько хороших примеров.
Теперь, когда соединение создано, вы можете назначить IP-адрес для него. Следующие две команды добавляют IPv4-адрес к интерфейсу:
nmcli con mod team0 ipv4.addresses 192.168.4.220/24

Обратите внимание, что с помощью этой команды вы назначили интерфейсу team0 IP адрес, который еще не работает. На данный момент не имеет смысла поднимать его, потому что сетевым интерфейсам еще не назначены сетевые устройства. Чтобы сделать это, используйте команду добавления nmcli con add type team-slave ifname <DEVICE> master <TEAM>. В этой команде вам нужно заменить часть <DEVICE> на имя сетевого устройства, которое вы хотите добавить (например eth0 eth1), а часть <TEAM> на имя только что созданного team интерфейса (в моем случае это team0).

Итак, следующая команда добавляет два сетевых устройства:
nmcli con add type team-slave ifname eno16777736 master team0
nmcli con add type team-slave ifname eno33554960 master team0

После этого вы можете включить интерфейс team0 командой nmcli con up team0.

В листинге 5 показана сводка всех команд, которые были выполнены.

Листинг 5
1 nmcli con add type team con-name team0 config '{ "runner": {"name": "loadbalance"}}'
2 nmcli con show
3 nmci con mod team0 ipv4.addresses 192.168.4.220/24
4 ip a
5 nmcli con add type team-slave ifname eno16777736 master team0
6 nmcli con add type team-slave ifname eno33554960 master team0
7 nmcli con up team0
8 ip a

Чтобы отслеживать доступность интерфейса team0, вы можете использовать команду nmcli con show. В качестве альтернативы, вы можете запросить состояние, используя команду teamdctl. Обратите внимание, что эта команда использует имя team устройства, а не team интерфейс. Выполните ip addr show, чтобы получить обзор используемых в настоящее время имен устройств. В листинге 6 показаны выходные данные этой команды.
[root@localhost ~]# teamdctl team0 state
setup:
   runner: loadbalance
ports:
   eno33554960
      link watches:
         link summary: up
         instance[link_watch_0]:
            name: ethtool
            link: up
  eno16777736
       link watches:
          link summary: up
          instance[link_watch_0]:
             name: ethtool
             link: up

Просмотр конфигурации team

Конфигурация team хранится в трех разных уровнях файлов. На вершине иерархии находится файл интерфейса team, показанный в листинге 6.

Вы можете напрямую менять содержимое файлов конфигурации в /etc/sysconfig/network-scripts. После внесения изменений используйте nmcli con reload, чтобы Network-Manager прочитал измененную конфигурацию.

Листинг 6
[root@localhost network-scripts]# cat ifcfg-team0
DEVICE=nm-team
TEAM_CONFIG="{ \"runner\": {\"name\": \"loadbalance\"}}"
DEVICETYPE=Team
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=team0
UUID=679b70f9-1445-4e25-9f66-93b358974627
ONBOOT=yes
IPADDR0=192.168.4.220
PREFIX0=24
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

Как вы можете видеть, содержимое этого файла очень похоже на содержимое обычного файла конфигурации сети, за исключением того, что оно содержит раздел TEAM_CONFIG. Сам интерфейс team не содержит никакой информации об отдельных интерфейсах, которые ему назначены.

Второй уровень файла конфигурации для подчиненного team устройства. В листинге 7 показано, как выглядит типичное содержимое этого файла.

Листинг 7
[root@localhost network-scripts]# cat ifcfg-team-slave-eno16777736
BOOTPROTO=none
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=team-slave-eno16777736
UUID=6ffc4eff-adde-474b-8ddc-1e6de1c5b3b5
DEVICE=eno16777736
ONBOOT=yes
TEAM_MASTER=679b70f9-1445-4e25-9f66-93b358974627
DEVICETYPE=TeamPort

Как вы можете видеть, есть две конкретные строки для конфигурации team. Строка TEAM_MASTER включает UUID руководителя группы, а строка DEVICETYPE идентифицирует тип устройства как team устройство. В этом файле строка DEVICE идентифицирует устройство, к которому подключен этот интерфейс.

Третий уровень состоит из файла устройства (Листинг 8). Единственное отличие от обычного содержимого файла устройства состоит в том, что для параметра ONBOOT установлено значение no. Это связано с тем, что устройство управляется не как отдельное устройство, а через team драйвер.

Листинг 8
[root@localhost network-scripts]# cat ifcfg-eno16777736
HWADDR=00:0C:29:88:D5:53
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=eno16777736
UUID=e94fe839-6fdf-4fc5-bf33-3c2a1cfbb90e
ONBOOT=no

В таблице 3 представлен обзор важных параметров конфигурации для групповых (team) устройств и интерфейсов. В упражнении 1 вы узнаете, как настроить агрегированный сетевой интерфейс на вашем сервере, используя teaming.

Таблица 3
Файл устройства

ПараметрОбъяснение
ifcfg-team 

TEAM_CONFIGИспользуется для определения значимых параметров, таких как тип раннера (runner).
ifcfg-team 


DEVICETYPEТип team.
ifcfg-team 

IPADDR0Конфигурация IP-адреса задается в team  интерфейсе.
ifcfg-team 


UUIDСодержит UUID, который используется подчиненными группами (team slaves) для определения того, к какому хозяину группы (team masters) они принадлежат.
ifcfg-team-slave

BOOTPROTOУстанавливается значение none, чтобы отключить конфигурацию IPv4.
ifcfg-team-slave

TEAM_MASTER Содержит UUID team интерфейса.
ifcfg-team-slave

DEVICEОпределяет устройство, к которому подключается этот интерфейс.
ifcfg-devicename

NAMEУстанавливает имя устройства.

Упражнение 1. Конфигурирование сети в режиме teaming

В этом упражнении вы создадите командный интерфейс на сервере server1. В предыдущем разделе вы подробно узнали, как настроить командное устройство с помощью nmcli. Чтобы показать альтернативный подход, вы узнаете в этом упражнении, как настроить командное устройство с помощью утилиты nmtui. Для выполнения этого упражнения вам понадобится виртуальная машина, настроенная на два сетевых устройства.

1. Войдите в режиме root и введите ip link show. Запомните названия устройств, которые вы найдете; они понадобятся позже. В этом упражнении я использую имена устройств eno16777736 и eno33554960 в качестве примеров. Используйте имена устройств в соответствии с вашей конкретной конфигурацией.

2. Введите nmtui, чтобы запустить утилиту nmtui.

3. Выберите "Edit a connection". Теперь вы увидите все ваши устройства.

4. Выделите первый интерфейс в списке и выберите "Edit".

5. В месте "IPv4 Configuration" убедитесь, что выбрано <Disabled>. Также выключите параметр "Automatically Connect" и примените конфигурацию, выбрав "ОК".

6. Повторите эту процедуру для другого интерфейса.

7. Перезапустите утилиту nmtui и выберите "Edit a Connection". Затем выберите "Add", чтобы добавить новое соединение. В раскрывающемся списке выберите тип подключения Team.

8. В окне "Edit Connection" установите имя устройства как team0. Затем выберите "Add", чтобы добавить подчиненное устройство (как на скриншоте ниже).

9. В окне New Connection выберите Ethernet, чтобы добавить Ethernet подключение.

10. В поле "Device" введите имя сетевого подключения (eno16777736).

11. Повторите эту процедуру, чтобы добавить другой интерфейс.

12. Закройте утилиту nmtui и запустите ее снова. В меню выберите "Activate a Connection".

13. Выделите групповое соединение, которое вы только что создали. Выберите "Deactivate". Выделите его еще раз и выберите "Activate". (Иногда это может привести к зависанию утилиты. Если это произойдет, просто перезагрузите компьютер.)

14. Введите teamdctl team0 state view, чтобы проверить текущее состояние вашего нового группового соединения.

15. Снова запустите nmtui и выберите "Edit a Connection". Выберите групповое подключение, которое вы только что создали, и прокрутите вниз до параметра "IPv4 configuration". Установите для этого параметра значение "Manual" и введите IP-адрес 192.168.122.220/24. Сохраните конфигурацию и перезагрузитесь.

Теперь вы сможете подключиться по этому IP-адресу.

В упражнении 1 вы узнали, как создать объединенное сетевое соединение. Как вы уже видели, для этого требуется много шагов. Процедура может показаться запутанной, но она сводится к пяти основным шагам, которые следует применять в указанном порядке:
  • Записать названия локальных устройств.
  • Настроить локальные интерфейсы так, чтобы они не запускались автоматически.
  • Отключить IP-конфигурацию на локальных интерфейсах и включить ее в групповом соединении.
  • Создать team устройство, указать его имя.
  • Добавить типы устройств на основе их имен.

Устранение неполадок в team интерфейсе

Как вы уже читали ранее, team интерфейс состоит из нескольких портов (ports). В терминологии team, port - это единица физического сетевого интерфейса. При устранении неполадок team интерфейсов необходимо учитывать следующие особенности:
  • Team интерфейс запускается при запуске одного из его портов, но он не запускает все остальные порты.
  • Запуск team интерфейса не приводит к автоматическому запуску всех портов.
  • Остановка team интерфейса останавливает все задействованные порты.
  • Статические IP-соединения могут быть запущены на team интерфейсе, который не имеет активных портов.
  • DHCP-соединения могут быть запущены только при наличии портов.
Полезная утилита для отладки team сети - teamnl. Например, введите teamnl team0 ports для просмотра портов в team устройстве и их текущего состояния. Еще одна полезная команда teamnl - это команда teamnl team0 options, которая выводят параметры, которые в данный момент установлены для team интерфейса. В листинге 9 показано, как выглядит результат этой команды.

Листинг 9
[root@localhost ~]# teamnl team0 options
queue_id (port:eno33554960) 0
priority (port:eno33554960) 0
user_linkup_enabled (port:eno33554960) false
user_linkup (port:eno33554960) true
enabled (port:eno33554960) true
queue_id (port:eno16777736) 0
priority (port:eno16777736) 0
user_linkup_enabled (port:eno16777736) false
user_linkup (port:eno16777736) true
enabled (port:eno16777736) true
mcast_rejoin_interval 0
mcast_rejoin_count 0
notify_peers_interval 0
notify_peers_count 0
mode roundrobin

Вы также можете сделать дамп конфигурации устройств в team интерфейсе. Для этого воспользуйтесь командой teamdctl team0 config dump. Эта команда создает конфигурацию в формате JSON, который используется драйвером объединения (teaming driver). Когда конфигурация усложняется, вы можете перенаправить вывод этой команды в файл, чтобы его можно было легко применить к другим конфигурациям. В листинге 10 показаны выходные данные команды teamdctl team0 config dump.

Листинг 10
[root@localhost ~]# teamdctl team0 config dump
{
"device": "team0",
"ports": {
"eno16777736": {
"link_watch": {
"name": "ethtool"
}
},
"eno33554960": {
"link_watch": {
"name": "ethtool"
}
}
},
"runner": {
"name": "roundrobin"
}
}

Конфигурирование IPv6

Эксперты уже много лет говорят миру, что адреса IPv4 почти все розданы, и что администраторы должны начать думать об альтернативах. Похоже, что с помощью современных сетевых решений, таких как NAT, компании могут еще долго использовать свою ИТ-инфраструктуру на основе IPv4. Тем не менее, фактом является то, что существует недостаток адресов IPv4, и каждый администратор должен иметь хотя бы некоторые знания о работе IPv6.

Понимание IPv6

В адресах IPv4 32 бита использовались для настройки сетевых адресов. Это допускает теоретический максимум около 4 миллиардов уникальных сетевых адресов. Поскольку количество доступных адресов IPv4 в настоящее время исчерпано, при разработке IPv6 для создания адресов IPv6 было зарезервировано 128 бит.

Чтобы упростить управление адресами IPv6, стандартная запись адреса IPv6 представляет собой шестнадцатеричное число. План шестнадцатеричной нумерации основан на 16 числах в диапазоне от 0 до 9, за которыми следуют от a до f. Поскольку шестнадцатеричные числа нелегко читать, адрес IPv6 помечается как 8 групп по 16 битов (что равно 4 шестнадцатеричным числам, как в следующем примере):

fe80:0000:0000:0010:29ff:fee4:714а:0001

Чтобы было легче читать, начальные нули не нужно записывать, а длинные строки состоящие из всех нулей можно суммировать как ::. Поэтому адрес предыдущего примера можно переписать следующим образом:

fe80::10:29ff:fee4:714а: 1

Так как доступный диапазон адресов IPv6 очень велик, IPv6 использует стандартную маску подсети /64. Поэтому для каждой подсети доступно 64 бита для адресации хостов, что означает, что подсеть может содержать столько хостов, сколько необходимо. Если организации необходимо назначить определенную подсеть, она должна запросить более короткий сетевой префикс, например /48 вместо /64, что оставило бы 16 бит для выделения подсети.

В IPv6 зарезервировано несколько определенных IP-адресов и диапазонов адресов. Таблица 4 содержит их обзор.

Таблица 4

Адрес

НазначениеОписание
::1/128

localhostЭквивалент 127.0.0.1/8.
::

Все адресаЭквивалент IPv4 0.0.0.0.
::/0


Шлюз по умолчаниюИспользуется в таблицах маршрутизации для обозначения шлюза по умолчанию.
2000::/3

Глобальный unicastПул адресов, которые выделены в данный момент.
fc00::/7



Уникальный локальный адресАдреса IPv6, которые доступны для использования в частных сетях и не могут маршрутизироваться в глобальной сети IPv6 (сравнимо с адресами 192.168.0.0/16 и т.д. в IPv4).
fe80::/64



Адреса link-localАдрес link-local - IP-адрес, который автоматически настраивается на каждом интерфейсе IPv6, но допускает использование только в пределах локального сегмента сети.
ff00::/8


MulticastМультикастный IPv6-адрес, что особенно важно, поскольку IPv6 не использует широковещательные адреса.
2001:db8/32 


Адреса, зарезервированные для использования в документацииВ примерах IPv6 следует использовать 2001:db8. Обычно они не назначаются непосредственно интерфейсам.

Конкретный адрес IPv6 - это link-local адрес. Это не маршрутизируемый адрес, который назначается интерфейсам IPv6 автоматически. Link-local создается автоматически на основе сетевого префикса fe80::/64, за которым следует MAC-адрес на сетевой карте, где fffe вставляется в середине части MAC-адреса.

Итак, если бы MAC-адрес был 02:0c:29:04:71:4a, link-local был бы fe80::20x:29ff:fee4:714a/64.

Если вам нужны адреса IPv6 только для внутреннего использования, и вы хотите, чтобы эти адреса не могли быть получены (случайно или преднамеренно) кем-либо во внешней сети, рассмотрите возможность использования уникальных локальных адресов. Как и частные адреса в IPv4, эти адреса можно использовать для подключения к узлам в Интернете, только если используется NAT.

В IPv6 больше нет трансляции. По этой причине многоадресная рассылка (multicast) играет гораздо большую роль в IPv6, чем в IPv4. Важным multicast адресом является ff02::1, который является локальным адресом для всех узлов. Если вы пингуете этот адрес, трафик отправляется на все узлы по этой конкретной ссылке. Чтобы избежать путаницы, вам нужно добавить интерфейс, который вы хотите использовать при использовании этого адреса, поэтому вы используете ping6 ff02::1%eth0 для пинга всех узлов локальной сети, подключенных к интерфейсу eth0.

Управление конфигурациями IPv6

Адреса IPv6 можно назначать вручную или через DHCP. При использовании DHCP узел IPv6 использует адрес многоадресной рассылки ff02::1:2 на порту 547/UDP, который принадлежит локальной многоадресной группе all-dhcp-servers. Сервер DHCPv6 отправляет ответ на порт 546 на клиенте, чтобы предоставить ему адрес IPv6.

В качестве альтернативы использованию DHCP IPv6 также поддерживает автоматическую настройку адреса без сохранения состояния (SLAAC). Используя SLAAC, хост выводит свой интерфейс с локальным адресом fe80::/64.Затем он отправляет запрос на маршрутизатор ff02::2, которая является локальной многоадресной группой для всех маршрутизаторов. Маршрутизатор IPv6 по этой ссылке затем отвечает по локальному адресу с префиксом сети. Затем хост добавляет свой MAC-адрес с отступом fffe для создания уникального адреса IPv6.


Третий вариант предоставления адресов IPv6 - через ручную настройку. При использовании этого подхода нельзя использовать следующие части узла:
  • Все нулевые идентификаторы 0000:0000:0000:0000, которые используются в качестве произвольного адреса маршрутизатора подсети всеми маршрутизаторами на линии.
  • Идентификаторы от fdff:ffff:ffff:ff80 до fdff: ffff: ffff: ffff. 
Для назначения адресов IPv6 можно использовать утилиты nmtui и nmcli. Большинство команд работают так же, как настроен IPv4. Давайте посмотрим на некоторые примеры nmcli: 
  • nmcli con add con-name eno16777736 type ethernet ifname eno16777736 ip6 2001:db8:0:1::100/64 gw6 2001:db8:0:1::1 ip4 192.168.4.122/24 gw4 192.168.4.1 Эта команда одновременно добавляет адреса IPv4 и  IPv6.
  •  nmcli con show eno1 | grep ipv6 Эта команда показывает конфигурацию IPv6 на eno16777736 (см. листинг 11).

Листинг 11
[sander@lab ~]$ nmcli con show eno1 | grep ipv6
ipv6.method: auto
ipv6.dns:
ipv6.dns-search:
ipv6.addresses:
ipv6.routes:
ipv6.ignore-auto-routes:      no
ipv6.ignore-auto-dns:         no
ipv6.never-default:           no
ipv6.may-fail:                yes
ipv6.ip6-privacy:             -1 (unknown)
ipv6.dhcp-hostname:           --

  • nmcli con mod eno16777736 ipv6.address "2001:db8:0:1::1"Эта команда изменяет статически назначенный адрес IPv6.
  • nmcli con mod eno16777736 +ipv6.dns 2001:4860:4860::8888 Эта команда добавляет DNS-сервер Google в текущий список DNS-серверов. Обратите внимание на использование +, который добавляет значение к текущей конфигурации.
После настройки конфигурации IP-адреса вы можете проверить ее с помощью распространенных инструментов, таких как ip addr show и ip route show. Они показывают конфигурацию для IPv4 и IPv6.

Чтобы отслеживать только конфигурацию IPv6, вы можете использовать аргумент -6 для команды ip. Итак, ip -6 addr show показывает только адреса IPv6, а ip -6 router show показывает только конфигурацию маршрутизации IPv6.

Устранение неполадок IPv6

Для устранения неполадок IPv6 вы можете использовать несколько команд. Для начала есть команда ping6, которую можно использовать для проверки связи с IPv6-адресами. Например, используйте ping6 2001:db8:0:1::1 для проверки связи с конкретным адресом или ping6 ff02::%eth0 для проверки связи всех адресов многоадресной рассылки на ссылке, подключенной к eth0.

Для анализа информации о маршрутизации в сети IPv6 используйте команду tracepath6. Эта команда показывает все переходы между текущим узлом и узлом назначения.

Для получения информации о используемых портах и службах вы можете использовать команду ss или netstat, которые по умолчанию отображают информацию, связанную с IPv6.

В упражнении 2 вы узнаете, как работать с IPv6.

Упражнение 2

В этом упражнении вы работаете с адресами IPv6. Чтобы выполнить это упражнение, используйте хосты server1 и server2. Рекомендуется не использовать серверы с team интерфейсом, который вы использовали в предыдущем упражнении, поскольку это немного усложняет настройку.

1. На сервере server1 войдите под рутом и введите команду nmcli con show. Обратите внимание на имя сетевого подключения, которое используется на сервере. В этом упражнении я приму имя eno16777736; заменить в соответствии с вашей конфигурацией.

2. Введите ip addr show eno16777736 и обратите внимание на текущую конфигурацию IPv6.

3. Введите nmcli con show eno16777736 | grep -i ipv6. Вывод покажет текущую конфигурацию для вашего интерфейса.

4. Присвойте ipv6-адрес fddb:fe2a:badb:abe::1 интерфейсу, используя конфигурацию nmcli eno16777736 ipv6.addresses ‘fddb:fe2a:badb:abe::1/64’.

5. Настройте IP-конфигурацию на статический IP-адрес, введя nmcli con mod eno16777736 ipv6.method manual

6. Перезапустите интерфейс, используя nmcli con eno16777736; nmcli con up eno16777736.

7. Проверьте текущую конфигурацию IPv6, используя ip addr show dev eno16777736.

8. Повторите процедуру на сервере server2, чтобы назначить IP-адрес  fddb:fe2a:badb:abe::2/64.

9. На сервере server2 введите ping6 fddb:fe2a:badb:abe::1, чтобы убедиться, что server1 пингуется.

10. Введите ip -6 route, чтобы отобразить таблицу маршрутизации IPv6.

11. Проверьте связь с локальными адресами, по которым можно связаться через интерфейс eno16777736, используя  ping6 ff02::1%eno16777736.

Маршрутизация IP-трафика

В системе RHEL 7, которая имеет несколько сетевых интерфейсов, вам иногда потребуется настроить маршрутизацию. Для этого сначала нужно включить маршрутизацию. Затем можно создать собственные маршруты, чтобы указать, куда следует отправлять пакеты.

Включение маршрутизации

Каждая система RHEL 7 может быть настроена как маршрутизатор. Единственное требование - наличие нескольких сетевых устройств для маршрутизации сетевого трафика. Чтобы настроить сервер в качестве маршрутизатора, сначала необходимо установить значение в /proc/sys/net/ipv4/ip_forward равным 1. Это можно сделать вручную, используя echo 1 > /proc/sys/net/ipv4/ip_forward.

Чтобы сделать настройку постоянной, вам нужно создать файл в каталоге /etc/sysctl.d. Вы можете выбрать имя для файла, который хотите создать, но имя файла должно иметь .conf в конце.

Также убедитесь, что он содержит следующее содержимое
net.ipv4.ip_forward = 1

При перезапуске сервера эта команда делает настройку постоянной.

Настройка пользовательских маршрутов

На большинстве серверов единственным заданным маршрутом является шлюз по умолчанию. Здесь указывается IP-адрес маршрутизатора, который заботится обо всем трафике, который необходимо перенаправить во внешние сети. Команда ip route show показывает, для какого IP-адреса в настоящее время установлен маршрут по умолчанию (см. Листинг 12).

Листинг 12 
[root@server2 sysctl.d]# ip route show
default via 192.168.4.2 dev eno16777736 proto static metric 1024
10.0.0.0/24 via 192.168.4.1 dev eno16777736 proto static metric 10
192.168.4.0/24 dev eno16777736 proto kernel scope link src 192.168.4.220

Помимо маршрута по умолчанию, могут потребоваться определенные маршруты. Это необходимо, в частности, для сетей, которые не могут быть достигнуты по маршруту по умолчанию. Чтобы установить собственный маршрут, необходимо указать несколько параметров:
  • Сетевой IP-адрес.
  • Маска сети, которую следует использовать.
  • IP-адрес маршрутизатора, который адресован для доступа к конкретной сети.
  • Метрика, которая указывает относительную цену маршрута. Чем ниже показатель, тем больше вероятность использования определенного маршрута, если существует несколько путей к одному и тому же пункту назначения.

Самым простым способом настройки пользовательских маршрутов является использование графической утилиты NetworkManager или текстовой утилиты nmtui. Используя эту утилиту, вы можете указать маршруты, введя сетевой адрес, связанную маску сети, шлюз, который должен быть адресован, и метрику, связанную с этим маршрутом.

Результаты записываются в файл с именем /etc/sysconfig/network-scripts/route-interface. В листинге 13 показан пример содержимого этого файла.

[root@server2 network-scripts]# cat route-eno16777736
ADDRESS0=10.0.0.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.4.1
METRIC0=10

Подводим итоги

В этой статье вы узнали, как настроить расширенные сетевые функции. В первой части этой статьи вы узнали, как включить агрегирование сетевых линков. Вы узнали, как это сделать, используя режимы bond и team. Вы узнали, что объединение в team является современной альтернативой использованию драйвера связи в предыдущих версиях RHEL, который позволяет объединять сетевые устройства в один интерфейс для обеспечения большей избыточности, пропускной способности или обоих вариантов. Во второй части этой статьи было показано, как настроить адреса IPv6, а в последней части вы узнали, как настраивать пользовательские маршруты в RHEL 7.

Добавить комментарий