Dump/Resore

Сейчас попробуем вместе рассмотреть варианты создания архивных копий.

Дамп в файл.

dump -0aLuf /samba/root.dump / 
где 0 — максимальный уровень сохранения информации при дампе, он гарантирует, 
что вся информация о системе будет сохранена 
a – авторазмер (пропуск всех проверок длины лент, пишет пока хватает места) 
L – ключ, используемый при снятии дампа с «живой» файловой системы. 
u – обновление файла dumpdates 
f – сохраняет дамп в файл 
/samba/root.dump – путь к файлу с дампом и, собственно, сам файл с дампом 
/ - файловая система для дампа (можно заменить на /dev/ad0s1a)

Листинг 01.

Дамп в файл.

iv# dump -0aLuf /samba/root.dump / 
 DUMP: Date of this level 0 dump: Mon Nov 17 09:53:14 2008 
 DUMP: Date of last level 0 dump: the epoch 
 DUMP: Dumping snapshot of /dev/ad4s1a (/) to /samba/root.dump 
 DUMP: mapping (Pass I) [regular files] 
 DUMP: mapping (Pass II) [directories] 
 DUMP: estimated 84435 tape blocks. 
 DUMP: dumping (Pass III) [directories] 
 DUMP: dumping (Pass IV) [regular files] 
 DUMP: DUMP: 85364 tape blocks on 1 volume 
 DUMP: finished in 9 seconds, throughput 9484 KBytes/sec 
 DUMP: level 0 dump on Mon Nov 17 09:53:14 2008 
 DUMP: Closing /samba/root.dump 
 DUMP: DUMP IS DONE
iv# ls -l /samba/root.dump 
-rw-r--r-- 1 root wheel 87408640 Nov 17 09:53 /samba/root.dump 
iv#

Дамп в файл с архивацией.

dump –0aLu -f - / | gzip -9 > /samba/root.dump.gz 
(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) 
где 1 — команда дампа 
2 – ключи команды, описаны чуть выше 
3 — ключ вывода в файл 
4 — стандартный вывод 
5 — предмет архивации — рутовый раздел 
6 — пайп smile 
7 — команда архивирования gzip 
8 – степень сжатия «-9» (для более подробного в man gzip) 
9 – перенаправление вывода в файл 
10 — файл в который перенаправлен вывод. Должен оканчиваться на gz.

Листинг 02.

Дамп в файл с сжатием файла.

iv# dump -0aLu -f - / | gzip -9 > /samba/root.dump.gz
 DUMP: Date of this level 0 dump: Mon Nov 17 09:54:20 2008
 DUMP: Date of last level 0 dump: the epoch
 DUMP: Dumping snapshot of /dev/ad4s1a (/) to standard output
 DUMP: mapping (Pass I) [regular files]
 DUMP: mapping (Pass II) [directories]
 DUMP: estimated 84435 tape blocks.
 DUMP: dumping (Pass III) [directories]
 DUMP: dumping (Pass IV) [regular files]
 DUMP: DUMP: 85364 tape blocks
 DUMP: finished in 40 seconds, throughput 2134 KBytes/sec
 DUMP: level 0 dump on Mon Nov 17 09:54:20 2008
 DUMP: DUMP IS DONE
iv# ls -l /samba/root.dump.gz 
-rw-r--r-- 1 root wheel 33622590 Nov 17 09:55 /samba/root.dump.gz

Дамп на фтп сервер

Грамотным решением будет соблюдение безопасности — ограничение для всех подключений для логина ”epbackup” – никто не обидится.

Листинг 03.

Проверка песочницы для подключений по фтп для логина epbackup.

www# cat /etc/ftpchroot | grep epbackup 
epbackup /var/backup/today 
www#

После этого можно дампить:

dump -0aLuf - / | ftp -u ftp://epbackup:pamelafktyf@192.168.0.2/root.dump - 
(1) (2) (3)(4) (5) (6) (7) (8) (9) 
где 1 — команда дампа 
2 — ключи к команде (описания смотри выше) 
3 — стандартный вывод 
4 — предмет дампа — рутовый раздел 
5 — пайп 
6 — команда ftp 
7 — ключ команды. В мане написано что ключ ”-u” нудно вписывать при использовании ссылки : «-u URL file [...]» 
8 — собственно ссылка. Состоит из следующих частей: 
[протокол]://[логин]:[пароль]@[сервер]/[путь/][файл_дампа] 
9 — значок тире (стандартный вывод для дампа)

Листинг 04.

Дамп с авторизацией и закачкой на фтп.

energoproekt# dump -0aLuf - / | ftp -u ftp://epbackup:pamelafktyf@192.168.0.2/root.dump - 
Connected to 192.168.0.2. 
220 www.enproekt.local FTP server (Version 6.00LS) ready. 
331 Password required for epbackup. 
230 User epbackup logged in, access restrictions apply. 
Remote system type is UNIX. 
Using binary mode to transfer files. 
200 Type set to I. 
remote: root.dump 
229 Entering Extended Passive Mode (|||61745|) 
150 Opening BINARY mode data connection for 'root.dump'. 
 DUMP: Date of this level 0 dump: Mon Nov 17 09:58:05 2008 
 DUMP: Date of last level 0 dump: the epoch 
 DUMP: Dumping snapshot of /dev/mirror/gm0s1a (/) to standard output 
 DUMP: mapping (Pass I) [regular files] 
 DUMP: mapping (Pass II) [directories] 
 DUMP: estimated 189380 tape blocks. 
 DUMP: dumping (Pass III) [directories] 
 DUMP: dumping (Pass IV) [regular files] 
 DUMP: DUMP: 192006 tape blocks 
 DUMP: finished in 21 seconds, throughput 9143 KBytes/sec 
 DUMP: level 0 dump on Mon Nov 17 09:58:05 2008 
 DUMP: DUMP IS DONE 
226 Transfer complete. 
196608000 bytes sent in 00:21 (8.63 MB/s) 
energoproekt#

Листинг 05.

Проверка размера файла на фтп-сервере.

www# ls -l root.dump 
-rw-r--r-- 1 epbackup wheel 196608000 Nov 17 09:58 root.dump 
www#

Дамп на фтп сервер со сжатием файла.

dump -0aLuf - / | gzip -9 - | ftp -u ftp://epbackup:pamelafktyf@192.168.0.2/root.dump.gz -

Расписывать подробно не буду, в предыдущих пунктах написал вроде бы достаточно подробно, единственное что стоит упомянуть — здесь ставим второй пайп, чтобы вывод команды дамп пошел на вход в качестве аргумента команды ”gunzip -9”, а уже через следующий пайп пошел на вход команде ”ftp -u”. Нагородили в общем :).

В общем, опять же, для экономии места можно сжимать дампы. Жмутся они хорошо, почему бы этим и не воспользоваться. Жать можно двумя способами: либо на самом сервере с которого делаются дампы, прямо здесь жмём и заливаем на фтп уже зажатый файл, либо жать уже на целевом сервере. Я напишу здесь про первый вариант, считаю его более правильным. Зачем писать несколько скриптов, если всё можно сделать одним. Соответственно будет похоже на строчку в разделе «дамп на фтп», только через пайп пропустим ещё и gunzip, а в названии конечного файла не забудем поставить gz. Итак:

Листинг 06.

Дамп на фтп сервер со сжатием файла.

energoproekt# dump -0aLuf - / | gzip -9 - | ftp -u ftp://epbackup:pamelafktyf@192.168.0.2/root.dump.gz - 
Connected to 192.168.0.2. 
220 www.enproekt.local FTP server (Version 6.00LS) ready. 
331 Password required for epbackup. 
230 User epbackup logged in, access restrictions apply. 
Remote system type is UNIX. 
Using binary mode to transfer files. 
200 Type set to I. 
remote: root.dump.gz 
229 Entering Extended Passive Mode (|||54755|) 
150 Opening BINARY mode data connection for 'root.dump.gz'. 
 DUMP: Date of this level 0 dump: Mon Nov 17 10:16:52 2008 
 DUMP: Date of last level 0 dump: the epoch 
 DUMP: Dumping snapshot of /dev/mirror/gm0s1a (/) to standard output 
 DUMP: mapping (Pass I) [regular files] 
 DUMP: mapping (Pass II) [directories] 
 DUMP: estimated 189380 tape blocks. 
 DUMP: dumping (Pass III) [directories] 
 DUMP: dumping (Pass IV) [regular files] 
 DUMP: DUMP: 192006 tape blocks 
 DUMP: finished in 53 seconds, throughput 3622 KBytes/sec 
 DUMP: level 0 dump on Mon Nov 17 10:16:52 2008 
 DUMP: DUMP IS DONE 
226 Transfer complete. 
80281692 bytes sent in 00:54 (1.40 MB/s) 
energoproekt# 

Листинг 07.

Проверка размера закачанного файла на фтп сервере.

www# ls -l root.dump.gz 
-rw-r--r-- 1 epbackup wheel 80281692 Nov 17 10:17 root.dump.gz 
www#

Видим, что без архивации дамп занял в два раза больше. Причем это самый маленький раздел у меня. Дампил раздел размером 990 метров, а занято на нем было 185 метров. Вот и делаем вывод. Думаю полезно дампить параллельно с архивацией.

Для восстановления (скорее всего по этому поводу тоже будет статья, но здесь сделаю пометку) пользуемся :

gzip -d root.dump.gz | ( cd / ; restore -rf - )

Тестирование возможности восстановления из резервных копий.

Во первых, нужно перейти в раздел, дамп которого мы сейчас будем рассматривать. Например, если home.dump, то делаем cd /home. Для восстановления файлов из дампа в диалоговом режиме используем команду:

Листинг 08.

Интерактивное восстановление через restore.

www# restore -i -f root.dump 
restore > ls 
.: 
.cshrc cdrom/ home/ rescue/ ttt.sh 
.profile compat@ httpd.core root/ usr/ 
.snap/ dev/ lib/ sbin/ var/ 
COPYRIGHT dist/ libexec/ squid/ 
X11R6.tgz dump/ media/ sys@ 
bin/ entropy mnt/ testparm.core 
boot/ etc/ proc/ tmp/
restore > cd /etc 
restore > ls natd.conf 
natd.conf 
restore > add natd.conf 
restore > ls natd.conf 
*natd.conf 
restore > extract 
You have not read any tapes yet. 
If you are extracting just a few files, start with the last volume 
and work towards the first; restore can quickly skip tapes that 
have no further files to extract. Otherwise, begin with volume 1. 
Specify next volume #: 1 
set owner/mode for '.'? [yn] y 
restore > quit 
www#

Для ползания по каталогам пользуемся командой cd

Для просмотра файлов командой ls

Для добавления файла в список для извлечения пользуемся командой add с аргументом в виде названия файла. (для удаления файла из списка соответственно команду ”delete”).

Для извлечения пользуемся командой extract (с последующими ответами «1» на вопрос какой том монтировать и «у» на вопрос восстанавливать ли владельцев файла и права доступа.
Примечание: после использования команды add список файлов полезно будет проверить ещё раз с помощью ls — те файлы, которые будут извлекаться, отмечены звездочкой.

Теперь посмотрим как можно использовать команду resore в более менее автоматическом режиме:

restore -vxNf root.dump 
где -v — заставляет выводить имя каждого файла (обычно restore работает тихо) 
-x — extract – вытащить из архива все файлы 
-N — производит извлечение, но не записывает изменения на диск. 
-f root.dump — использует в качестве входного файла root.dump.

Далее смотрим листинг 09 после выполнения команды:

Листинг 09.

Тестовое восстановление через restore с ключем N.

iv# restore -vxNf root.dump
Verify tape and initialize maps
Tape block size is 32
Dump date: Mon Nov 17 09:53:14 2008
Dumped from: the epoch
Level 0 dump of / on iv.local:/dev/ad4s1a
Label: none
Extract directories from tape
Initialize symbol table.
Make node ./.snap
Make node ./dev
Make node ./home
Make node ./samba
[i]< … поскипал … >[/i]
Make node ./tmp/ssh-0XhsufqEJC
Make node ./tmp/sarg
Extract requested files
You have not read any tapes yet.
If you are extracting just a few files, start with the last volume
and work towards the first; restore can quickly skip tapes that
have no further files to extract. Otherwise, begin with volume 1.
Specify next volume #: 1
Create symbolic link ./sys->usr/src/sys
extract file ./boot/mbr
extract file ./boot/boot0
extract file ./COPYRIGHT
extract file ./boot/boot0sio
extract file ./boot/boot
< … поскипал … >
Create hard link ./bin/link->./bin/ln
Create hard link ./bin/unlink->./bin/rm
Create hard link ./bin/[->./bin/test
Create hard link ./bin/tcsh->./bin/csh
Create hard link ./bin/red->./bin/ed
Set directory mode, owner, and times.
set owner/mode for ‘.’? [yn] y
iv#
Перенос системы на другой винчестер.

Тут будет только теория, сам я проделывал это на виртуалках, на серверах с рэйдами пока не представляю как это будет :).

Сначала посмотрим наши разделы в /etc/fstab с помощью
cat /etc/fstab. Потом, например, запишем соответствия разделов и точек монтирования:
b – /root
e – /home
g – /tmp
d – /usr
f – /var
(напоминаю что «с» характеризует весь слайс).

Итак, имеем диски ad0 и ad1(нулевой это наш старый, первый будет новым, и уже подключенным к системе), диск LiveCD (это первый диск с фрей). Загружаемся c LiveCD. Размечаем жесткий диск в sysinstall. Сохраняем. Потом выбираем пункт “fixit” – “cd/dvd”.

Для каждой точки монтирования каждый раздел должен быть сначала сконструирован (newfs), затем смонтирован. Затем для восстановления необходимо перейти в этот раздел и только после всего этого пускать dump+restore. Таким образом, после приглашения командной строки для каждого раздела (исходя из буквы девайса в fstab и точки монтирования), делаем следующее:

Листинг 10.

Типовая операция восстановления раздела.

# newfs /dev/ad1s1g 
# mount /dev/ad1s1e /mnt/home 
# cd /mnt/home 
# dump 0af - /home | restore xf - 
Внимание ! Не нужно ставить слэш в конце «/home». 
Посмотреть какие разделы смонтированы можно командой «mount -p». 
Смонтировать CD-ROM: mount -t cd0660 /dev/acd0 /mnt (ну на всякий случай написал smile )

Небольшой промежуточный вывод:
1.Подключаем второй винчестер
2.Размечаем диск в sysinstall
3.Создаем разделы
4.Конструируем новый раздел (newfs)
5.Монтируем новый раздел к точке монтирования на старом
6.Переходим в смонтированный раздел.
7.Дамп+Рестор
8.Пункты 4-8 повторить для каждого раздела (смотри листинг 10)

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

Скрипты для дампов.

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

Таблица 01.
Сравнительная таблица размеров архивированных дампов.

Раздел Gunzup(Mb) Bunzip2(Mb)
/root 80,2 75,2
/home 713,8 715,6
/usr 6,755,65 6,496,01
/var 2,486,97 2,355,72
Bunzip выигрывает практически во всех случаях, но не очень существенно, так что особенной разницы не увидим. Единственное, от
чего стоит отталкиваться — от вашей общей стратегии копирования, того единообразия, которое должно соблюдаться в любой в
здравом уме настроенной системе.

Сам скрипт с указанием полных путей (по кронтабу FreeBSD 6.2 у меня не понимала что такое dump и поначалу я получил рутом
такое письмо :

Quote

«dump: not found
‘EPSV’: command not understood.
dump: not found
‘EPSV’: command not understood.
dump: not found
‘EPSV’: command not understood.
dump: not found
‘EPSV’: command not understood.»

Листинг 11.

Типовой скрипт для дампа на фтп-сервер по кронтабу.

#!/bin/sh 
# File : /home/jsand/scripts/backup.sys.dump.sh 
# Computer: 192.168.0.1 
# Use: make dump of partitition 
# Created : 2008.11.11 
# Author : Andrey v Strukov 
# Changes : 
# 2009.01.14 - Added full path to exec files.
# Create, archive and send to ftp dump of / partitition. 
/sbin/dump -0aLuf - / | /usr/bin/bzip2 -9 - | /usr/bin/ftp -u ftp://jsand:pamela@192.168.11.63/today/root.gwsrv.dump.bz2 -
# var 
/sbin/dump -0aLuf - /var | /usr/bin/bzip2 -9 - | /usr/bin/ftp -u ftp://jsand:pamela@192.168.11.63/today/var.gwsrv.dump.bz2 -
# home 
/sbin/dump -0aLuf - /home | /usr/bin/bzip2 -9 - | /usr/bin/ftp -u ftp://jsand:pamela@192.168.11.63/today/home.gwsrv.dump.bz2 -
# usr 
/sbin/dump -0aLuf - /usr | /usr/bin/bzip2 -9 - | /usr/bin/ftp -u ftp://jsand:pamela@192.168.11.63/today/usr.gwsrv.dump.bz2 -

Соответственно, этот скрипт пихаем в кронтаб через «crontab -e». Строчка «1 0 * * 1-5» означает (если кто забыл или не знал) что скрипт будет запускаться в 00:01 каждый день месяца и каждый месяц в году, а «1-6» означает что дампы будут делаться с понедельника по субботу. НО, учитывайте что 00:01 в понедельник это практически воскресный дамп, а соответственно 00:01 в
субботу это пятничный..

Листинг 12.

Добавление задания скрипта в кронтаб.

# 
1 0 * * 1-5 /home/jsand/scripts/backup.sys.dump.sh

Ещё, кто не знает как работать с vi – вкратце: «а» – переход в режим вставки (типа можно печатать), «esc» – выход из режима вставки и вход в командный режим, тут действуют клавиши «х» – удаление букв по одной и «d» – удаление строчек целиком. Выйти из vi можно через зажатый «shift» и двойное нажатие «Z». За более подробным руководством всем обращаться к википедии (ссылка 4). После всего проверяем листинг заданий в кроне через «crontab -l».

Ссылки на ресурсы, с которых взято большинство информации:

1. http://www.opennet.ru
2. http://www.citforum.ru/operating_systems/manpages/CRONTAB.1.shtml
3. http://rus-linux.net/MyLDP/BOOKS/redhatsec/glava22.htm
4. http://ru.wikipedia.org/wiki/Vi

image_pdfimage_print

Dump

Я сделал так FreeBSD 10.1

#df -h
 Filesystem Size Used Avail Capacity Mounted on

/dev/ada0p2 222G 8,2G 196G 4% /

devfs 1,0K 1,0K 0B 100% /dev
 #cat /etc/fstab
 # Device Mountpoint FStype Options Dump Pass#

/dev/ada0p2 / ufs rw 1 1
/dev/ada0p3 none swap sw 0 0

1. создал дамп раздела (с ключем -L не захотел!)

#dump -0f - /dev/ada0p2 > /mnt/full_dump.img

2. подсоединил новый диск.
3. установил систему на нем по дефолту.
4. загрузился со старого винта.
5. подмонтировал новый винт (второй раздел)

#mount /dev/ada1p2 /mnt

6. restore

#cd /mnt
#restore -rf /путь_к_дампу/full_dump.img

7. отсоединил старый винт и загрузился!!! на все-провсе – около 1 часа.

*************************************************************

*************************************************************

После gpart делаем новую файловую систему для нового диска

 newfs /dev/ada1p1 //GPT
 newfs /dev/ada1p2 //ufs
 newfs /dev/ada1p3 //swap

Теперь можно монтировать

*************************
Есть два диска.
Первый с системой FreeBSD 10.1
Второй чистый – для бэкапа

Монтирую чистый диск
mount /dev/ada1 /mnt

Делаю дамп

#dump -0Lf - /dev/ada0 > /mnt/ad0.img

restore

# cd /mnt
#restore -rf /путь_к_дампу/ad0.img
/usr/home/lissyara/>dump -0 -f - /dev/ad0s1a > dump_ad0s1a.img
 DUMP: WARNING: should use -L when dumping live read-write filesystems!
 DUMP: Date of this level 0 dump: Sat Jan 14 23:37:12 2006
 DUMP: Date of last level 0 dump: the epoch
 DUMP: Dumping /dev/ad0s1a (/) to standard output
 DUMP: mapping (Pass I) [regular files]
 DUMP: mapping (Pass II) [directories]
 DUMP: estimated 56292 tape blocks.
 DUMP: dumping (Pass III) [directories]
 DUMP: dumping (Pass IV) [regular files]
 DUMP: DUMP: 56891 tape blocks
 DUMP: finished in 32 seconds, throughput 1777 KBytes/sec
 DUMP: DUMP IS DONE
/usr/home/lissyara/>ls -lah | grep img
 -rw-r--r-- 1 root wheel 56M Jan 14 23:37 dump_ad0s1a.img
/usr/home/lissyara/>df -h
 Filesystem Size Used Avail Capacity Mounted on
 /dev/ad0s1a 248M 55M 173M 24% /
 devfs 1.0K 1.0K 0B 100% /dev
 /dev/ad0s1f 145M 12K 133M 0% /tmp
 /dev/ad0s1d 1.4G 1.1G 190M 86% /usr
 /dev/ad0s1e 87M 17M 63M 21% /var
 /usr/home/lissyara/>

Во как. Для “живых” файловых систем есть специальный ключик, оказывается. Ладно, сделаем ещё раз, с ним.

 /usr/home/lissyara/>dump -0 -L -f - /dev/ad0s1a > dump_ad0s1a.img
 DUMP: Date of this level 0 dump: Sat Jan 14 23:39:05 2006
 DUMP: Date of last level 0 dump: the epoch
 DUMP: Dumping snapshot of /dev/ad0s1a (/) to standard output
 DUMP: mapping (Pass I) [regular files]
 DUMP: mapping (Pass II) [directories]
 DUMP: estimated 56293 tape blocks.
 DUMP: dumping (Pass III) [directories]
 DUMP: dumping (Pass IV) [regular files]
 DUMP: DUMP: 56892 tape blocks
 DUMP: finished in 32 seconds, throughput 1777 KBytes/sec
 DUMP: DUMP IS DONE
 /usr/home/lissyara/>ls -lah | grep img
 -rw-r--r-- 1 root wheel 56M Jan 14 23:39 dump_ad0s1a.img
 /usr/home/lissyara/>

 

 

 

image_pdfimage_print

Postfix + Dovecot + MySQL + Postfix Admin, часть 2 – установка и настройка Postfix

Приступаем к установке MTA Postfix:

 # cd /usr/ports/mail/postfix/
 # make config-recursive

 # make install clean

В процессе нам предлагает сконфигурировать и установить Dovecot:
В процессе установки будет вопрос:

 Would you like to activate Postfix in /etc/mail/mailer.conf [n]? y

Если устанавливаем как полную замену SMTP-сервера, то отвечаем Y. Sendmail использоваться в данном случае не будет вообще, так что заменяем.

Отредактируем файлы конфигурации, первым – /usr/local/etc/postfix/main.cf:

 # cat /usr/local/etc/postfix/main.cf | grep -v '^#' | sed '/^$/d' | more

 #Настройки каталогов
 queue_directory = /var/spool/postfix
 command_directory = /usr/local/sbin
 daemon_directory = /usr/local/libexec/postfix
 data_directory = /var/db/postfix

 #Системный пользователь, которому будет "принадлежать" почта
 mail_owner = postfix

 #Различные сетевые настройки
 myhostname = akira.domain.org.ua
 mydomain = domain.org.ua
 myorigin = $myhostname
 inet_interfaces = all
 mydestination = $myhostname, localhost.$mydomain, localhost, 77.120.106.40

 #Прочие настройки, достаточно описаны в самом файле
 local_recipient_maps = unix:passwd.byname $alias_maps
 unknown_local_recipient_reject_code = 550
 mynetworks_style = host
 mynetworks = 127.0.0.0/8
 relay_domains =
 alias_maps = hash:/etc/aliases
 alias_database = hash:/etc/aliases
 smtpd_banner = $myhostname ESMTP $mail_name
 debug_peer_level = 2
 debug_peer_list = 127.0.0.1
 debugger_command =
 PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
 ddd $daemon_directory/$process_name $process_id & sleep 5
 sendmail_path = /usr/local/sbin/sendmail
 newaliases_path = /usr/local/bin/newaliases
 mailq_path = /usr/local/bin/mailq
 setgid_group = maildrop
 html_directory = /usr/local/share/doc/postfix
 manpage_directory = /usr/local/man
 sample_directory = /usr/local/etc/postfix
 readme_directory = /usr/local/share/doc/postfix

 #Т.к. мы используем MySQL для хранения данных, то ящики и домены 
 #считаются "виртуальными", указываем где и как искать информацию о них
 virtual_mailbox_base = /usr/mail
 virtual_alias_maps = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_alias_maps.cf
 virtual_mailbox_domains = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_domains_maps.cf
 virtual_mailbox_maps = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf
 virtual_minimum_uid = 65534
 virtual_uid_maps = static:65534
 virtual_gid_maps = static:65534
 virtual_transport = dovecot
 dovecot_destination_recipient_limit = 1

 #Описываем аутентификацию, Т.к. в этих параметрах много чего важного - 
 #постараюсь описать все как можно подробнее.
 #Независимо от типа аутентификации этот параметр всегда должен быть включен
 smtpd_sasl_auth_enable = yes

 #Некоторые клиенты настаивают на использовании SASL аутентификации, 
 #если оно предлагается, даже если они не настроены на отправку учетных данных, 
 #и поэтому, они всегда терпят неудачу и отключаются. Для них скрываем свою 
 #возможность проводить аутентификацию
 smtpd_sasl_exceptions_networks = $mynetworks

 #Ограничиваем варианты аутентификации, как минимум noanonymous обязано быть
 smtpd_sasl_security_options = noanonymous

 #Не все клиенты проводят процесс аутентификации согласно RFC, 
 #для них делаем исключение
 broken_sasl_auth_clients = yes

 #По-умолчанию Postfix использует механизм аутентификации с Cyrus SASL, 
 #мы установим Dovecot
 smtpd_sasl_type = dovecot

 #Dovecot настроен на использование UNIX-сокета, указываем это Postfix-у
 smtpd_sasl_path = private/auth

 #Далее - настройки отсеивания нежелательной почты, хотя в этом варианте 
 #конфигурации блокируется только НЕ прошедшие проверку, 
 #используйте reject вместо permit в конце блока для изменения
 smtpd_client_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 reject_unauth_pipelining
 permit

 smtpd_helo_restrictions =
 permit

 smtpd_sender_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 reject_non_fqdn_sender
 reject_unknown_sender_domain
 permit

 smtpd_recipient_restrictions =
 permit_mynetworks
 permit_sasl_authenticated
 reject_non_fqdn_recipient
 reject_unauth_destination
 reject_unknown_recipient_domain
 reject_unverified_recipient
 permit

 smtpd_data_restrictions =
 permit

 smtpd_end_of_data_restrictions =
 permit

 smtpd_etrn_restrictions =
 permit

На этом файл сохраняем.

Файл для проверки синонимов почтовых ящиков, postfix – пользователь, а mypassword – пароль к базе данных, который указывали при конфигурировании Postfix Admin в первой части. Сам файл находится тут – /usr/local/etc/postfix/mysql_virtual_alias_maps.cf. ВАЖНО: параметр query может меняться в зависимости от версии сервера, в описываемом примере используется postfix-2.9.3,1!

 # cat /usr/local/etc/postfix/mysql_virtual_alias_maps.cf | grep -v '^#' | sed '/^$/d' | more
 user = postfix
 password = mypassword
 hosts = localhost
 dbname = postfix
 query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Файл для проверки почтовых доменов /usr/local/etc/postfix/mysql_virtual_domains_maps.cf:

 # cat /usr/local/etc/postfix/mysql_virtual_domains_maps.cf | grep -v '^#' | sed '/^$/d' | more
 user = postfix
 password = mypassword
 hosts = localhost
 dbname = postfix
 query = SELECT domain FROM domain WHERE domain='%u'

Файл для проверки почтовых ящиков /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf:

 # cat /usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf | grep -v '^#' | sed '/^$/d' | more
 user = postfix
 password = mypassword
 hosts = localhost
 dbname = postfix
 query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

В конец файла настройки процессов Postfix-а /usr/local/etc/postfix/master.cf добавляем указание работать с Dovecot через UNIX-сокет:

 dovecot unix - n n - - pipe
 flags=DRhu user=nobody:nobody argv=/usr/local/libexec/dovecot/deliver -d ${recipient}

Проверяем конфигурацию:

 # postfix check

Если ошибок нет – просто выдаст новую строку, если есть – укажет в какой строке и что именно:

 # postfix check
 postfix: fatal: /usr/local/etc/postfix/main.cf, line 30: missing '=' after attribute name: "sdcsdc"

Ещё вариант ошибки – такой:

 # postfix check
 postfix: fatal: /usr/local/etc/postfix/main.cf, line 702: missing '=' after attribute name: "permit"

В данном случае – не установлен отступ от начала строки в блоке:

 smtpd_etrn_restrictions =
 permit

Вариантов записи два. Первый – каждый параметр с новой строки, с отступом от начала:

 smtpd_etrn_restrictions =
 permit

Другой вариант – через запятую:

 smtpd_etrn_restrictions = permit,<другие параметры через запятую>,

Запятая после последнего параметра в списке – обязательна.

Добавляем Postfix в запуск при загрузке системы в файл /etc/rc.conf:

 postfix_enable="YES"

Запустим Postfix:

 # service postfix start
 postfix/postfix-script: starting the Postfix mail system

И проверим его состояние:

 # service postfix status
 postfix is running as pid 78100.

Часть 1 (PostfixAdmin)
Часть 3 (Dovecot)
Apache24, MySQL56, PhP5

image_pdfimage_print

Postfix + Dovecot + MySQL + Postfix Admin, часть 1 – установка и настройка Postfix Admin

Использоваться будут:

mysql-server-5.5.25
postfixadmin-2.3.5
postfix-2.9.3,1
dovecot-1.2.17

на системе FreeBSD 9.0-RELEASE-p3.

  • В первой – процесс установки и настройки Postfix Admin.
  • Во второй – процесс установки и настройки Postfix.
  • В третьей – процесс установки и настройки Dovecot.

Начнем с установки Postfix Admin и настройки MySQL для работы Postfix и Dovecot.

Обновим порты:

# portsnap fetch update

Начнем установку:

# cd /usr/ports/mail/postfixadmin/
# make config-recursive
# make install clean

Создадим виртуал-хост (мне кажется более правильным решением), доступ будет по адресу http://postfixadmin.domain.org.ua, в файл конфигурации веб-сервера Apache /usr/local/etc/apache22/httpd.conf добавляем строки:

Alias /postfixadmin/ "/usr/local/www/postfixadmin/"
 
<VirtualHost *:80>
  ServerAdmin postmaster@domain.org.ua
  DocumentRoot /usr/local/www/postfixadmin
  ServerName postfixadmin.domain.org.ua
 <Directory "/usr/local/www/postfixadmin">
   Options none
   AllowOverride Limit
   Order Allow,Deny
   Allow from all
 </Directory>
</VirtualHost>

Другой вариант – просто создать каталог “внутри” домена, в таком случае доступ к панели будет по адресу http://domain.org.ua/postfixadmin/

Alias /postfixadmin/ "/usr/local/www/postfixadmin/"

 <Directory "/usr/local/www/postfixadmin">
   Options none
   AllowOverride Limit
   Order Allow,Deny
   Allow from all
</Directory>

Проверяем на ошибки файл конфигурации:

 # apachectl configtest
 Syntax OK

Перезагружаем веб-сервер:

# apachectl restart

Если выбрали первый вариант, с отдельным субдоменом, то настроим его, отредактировав файл зоны /var/named/zones/master/domain.org.ua:

postfixadmin           IN            A             77.120.106.40

2012080403          ;  Serial

Если домен обслуживается, к примеру, NS-ами вашего регистратора домена – обратитесь к нему для создания субдомена.

Обновим записи зон сервера BIND:

# rndc reload

MySQL должен быть установлен и настроен. Хотя он должен будет установиться во время начала сборки Postfix Admin.

Приступим к настройке базы для почтовых ящиков.

Подключаемся к MySQL:

# mysql -u root -p
Enter password:

Создаем базу данных:

mysql> create database postfix;
Query OK, 1 row affected (0.01 sec)

Создаем пользователя postfix и даем ему доступ к базе postfix:

mysql> grant all on postfix.* to 'postfix'@'localhost' identified by 'mypassword';
Query OK, 0 rows affected (0.62 sec)

Выходим из управления MySQL:

 mysql> exit
 Bye

Редактируем файл конфигурации Postfix Admin, который находится тут – /usr/local/www/postfixadmin/config.inc.php:

Меняем строку:

 $CONF['configured'] = false;

на:

$CONF['configured'] = true;

Далее

 #Адрес, по которому будет работать наша панель:
 $CONF['postfix_admin_url'] = 'http://postfixadmin.domain.org.ua'
 #Задаем язык интерфейса по-умолчанию:
 $CONF['default_language'] = 'ru';
 #Тип базы данных, с которой будет работать панель:
 $CONF['database_type'] = 'mysql';
 #Адрес сервера MySQL:
 $CONF['database_host'] = '127.0.0.1';

Далее указываем данные доступа, которые указывали в mysql> при создании пользователя и базы:

 $CONF['database_user'] = 'postfix';
 $CONF['database_password'] = 'mypassword';
 $CONF['database_name'] = 'postfix';
 $CONF['database_prefix'] = '';

Сохраняем и закрываем файл.
Далее – переходим в панель и начинаем процесс установки:

http://postfixadmin.domain.org.ua/setup.php

Вводим пароль, который будет использоваться для конфигурирования и переходим на следующую страницу:
Снова открываем файл для редактирования, и меняем строку:

 $CONF['setup_password'] = 'changeme';

на

 $CONF['setup_password'] = 'циферки_буковки';

где “циферки_буковки” – хеш, указанный на странице, на которой вы находитесь.

Заполняем на странице поля – почтовый ящик будет использоваться как логин администратора.

Теперь переходим на http://postfixadmin.domain.org.ua/login.php вводим логин-пароль:
И попадаем в панель управления сервером:

Переходим “Список доменов – Новый домен“, добавляем наш домен:

Домен был добавлен!
(domain.org.ua)

Далее переходим “Обзор – Создать ящик“:

Сообщение отправлено!
Почтовый ящик был успешно создан!
(root@domain.org.ua)

Письмо мы сейчас, само собой, не получим – но панель работает.

Теперь приступим к установке и настройке самого SMTP-сервера (или MTA – Mail, он же Message, Transfer Agent) – Postfix.

Часть 2 (Postfix)
Часть 3 (Dovecot)
Apache24, MySQL56, PhP5

image_pdfimage_print

Router on a Stick

Router_on_Stick

Настраиваем субинтерфейс (в нашем случае для удобства .2 – по номеру vlan2)

Router(config)#int g0/1.2

Включаем энкапсуляцию для тегированного трафика, что бы роутер мог с ним работать
и назначаем IP

Router(config-subif)#encapsulation dot1q 2
Router(config-subif)#ip add 192.168.1.1 255.255.255.0

То же для второго субинтерфейса (.3 – по номеру vlan3)

Router(config-subif)#int g0/1.3
Router(config-subif)#encapsulation dot1Q 3
Router(config-subif)#ip addr 192.168.2.1 255.255.255.0

Смотрим

Router#sh ip int br
Interface IP-Address OK? Method Status Protocol 
GigabitEthernet0/0 unassigned YES unset administratively down down 
GigabitEthernet0/1 unassigned YES unset administratively down down ---
GigabitEthernet0/1.2 192.168.1.1 YES manual administratively down down --- пока down
GigabitEthernet0/1.3 192.168.2.1 YES manual administratively down down --- 
Vlan1 unassigned YES unset administratively down down

Так как на роутерах интерфейсы по умолчанию выключены – включаем интерфейс

Router(config)#int g0/1
Router(config-if)#no sh

Смотрим

Router#sh ip int br
Interface IP-Address OK? Method Status Protocol 
GigabitEthernet0/0 unassigned YES unset administratively down down 
GigabitEthernet0/1 unassigned YES unset up down 
GigabitEthernet0/1.2 192.168.1.1 YES manual up down --- все up
GigabitEthernet0/1.3 192.168.2.1 YES manual up down 
Vlan1 unassigned YES unset administratively down down
Router#

Делаем на интерфейсе свича 1 trunk и отключаем автосогласование

Switch(config)#int f0/1
Switch(config-if)#switchport mode trunk
Switch(config-if)#switchport nonegotiate

Теперь ПК из сети 192.168.1.0 может получить доступ в сеть 192.168.2.0 и наоборот.

image_pdfimage_print

Команда netstat: получение всевозможной информации о состоянии сети

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

Мы рассмотрим четыре наиболее распространенных варианта использования команды netstat.

Это:

  • проверка состояния сетевых соединений;
  • анализ информации о конфигурации интерфейсов;
  • изучение таблицы маршрутизации;
  • получение статистических данных о различных сетевых протоколах.

Контроль состояния сетевых соединений

Будучи вызванной без аргументов, команда netstat выдает информацию о состоянии активных TCP- и UDP-портов. Неактивные серверы, ожидающие запросов на установление соединений, как правило, не отображаются. О них можно узнать с помощью команды netstat -а . Результат выглядит так:

% netstat -а
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 *.6013 *.* LISTEN
tcp46 0 0 *.6013 *.* LISTEN
tcp4 0 0 nimi.ssh xor.com.4105 ESTABLISHED
tcp4 0 20 nimi.ssh xor.com.1612 ESTABLISHED
tcp4 0 0 *.13500 *.* LISTEN
tcp4 0 0 nimi.ssh 135.197.2.114.883 ESTABLISHED
tcp4 0 0 nimi.1599 xor.com.telnet ESTABLISHED
tcp4 0 0 *.ssh *.* LISTEN
tcp46 0 0 *.ssh *.* LISTEN
tcp4 0 0 nimi.ssh 135.197.2.114.776 ESTABLISHED
tcp4 0 0 *.cvsup *.* LISTEN
udp4 0 0 *.syslog *.*
udp4 0 0 *.ntalk *.*
...

Этот результат получен на компьютере nimi. Вывод команды свидетельствует о наличии нескольких входящих соединений по протоколу SSH, одного исходящего telnet-соединения и группы портов, ожидающих установления соединения. Обратите внимание на строки, в которых тип протокола — tcp46. Это сервисы, работающие в соответствии со стандартом IPv6.

Адреса представлены в формате имя_компьютера.сервис, где сервис — номер порта. Для известных сервисов порты указаны в символическом виде (соответствия между номерами портов и их именами определены в файле /etc/services). При наличии опции -n все адреса отображаются в числовом виде. Помните, что при нефункционирующей службе DNS команда netstat будет выполняться очень медленно, если не указать флаг -n.

В колонках Send-Q и Recv-Q показывается, сколько запросов находится во входящих и исходящих очередях на данном компьютере. На другом конце соединения размеры очередей могут быть другими. Желательно, чтобы эти значения были близки к нулю и не были ненулевыми постоянно. Конечно, если команда netstat запускается через сетевой терминал, для ее соединения размер исходящей очереди, скорее всего, никогда не будет равен 0.

Состояние соединения имеет значение только для протокола TCP. Протокол UDP не проверяет факт установления соединения. Наиболее распространенные состояния: ESTABLISHED (установлено) — для активных соединений, LISTENING (ожидание) — для серверов, ожидающих поступления запросов (при отсутствии опции -а обычно не показываются), TIME_WAIT (ожидание закрытия) — для соединений, находящихся в процессе закрытия.

Эта информация полезна главным образом для устранения проблем на более высоком уровне, если, конечно, базовые сетевые средства работают нормально. Команда netstat позволяет проверить правильность настройки серверов и диагностировать определенные виды нарушений связи, особенно при работе с протоколом TCP. Например, если соединение находится в состоянии SYN_SENT, это означает наличие процесса, который пытается установить контакт с несуществующим или недоступным сервером.

Если команда netstat сообщает о большом количестве соединений, находящихся в состоянии SYN_WAIT, то компьютер, вероятно, не в состоянии обработать запросы на установление соединений. Такая ситуация может быть вызвана ограничениями системного ядра или даже злонамеренными попытками вызвать перегрузку.

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

Команда netstat -i сообщает о состоянии сетевых интерфейсов. Вот, к примеру, результаты, полученные на компьютере evolve, работающем под управлением Solaris:

% netstat -i
Name Mtu Net/Dest Ipkts Ierrs Opkts Oerrs Collis
lo0 8232 loopback 11650 0 11650 0 0
hme0 1500 evolve 16438 0 18356 0 110
hmel 1500 evolve-bl 94852 7 379410 13 487

Указанный компьютер имеет два сетевых интерфейса. В колонках Ipkts и Opkts указывается количество пакетов, принятых и переданных через каждый интерфейс с момента начальной загрузки системы. В колонках Ierrs и Oerrs приводится число ошибок в принимаемых и передаваемых данных: здесь учитывается много разных типов ошибок, и наличие какого-то их числа вполне нормально.

Количество ошибок должно составлять менее 1% от числа пакетов. Если частота появления ошибок высока, сравните эти показатели на нескольких соседних компьютерах. Большое число ошибок на одном компьютере свидетельствует о наличии проблемы в его интерфейсе или соединении, тогда как высокая частота ошибок, возникающих на всех компьютерах, в большинстве случаев обусловлена наличием проблемы в среде передачи.

Количество коллизий — это показатель степени загруженности сети; наличие ошибок свидетельствует о проблемах с кабелями. Хотя коллизия является одной из разновидностей ошибки, их число команда netstat подсчитывает отдельно. В колонке Collis указывается число конфликтов, произошедших при отправке пакетов. Это число следует использовать для вычисления доли ошибочных пакетов от общего количества отправленных пакетов (Opkts). В приведенном выше примере частота конфликтов в интерфейсе hme0 составляет около 0,6%, а в интерфейсе hme1 — 0,13%. “Нормальным” считается значение менее 5%, а значение выше 15% говорит о серьезной перегрузке сети.

Работу сетевого интерфейса можно контролировать в реальном времени, однако соответствующие опции командной строки различаются в зависимости от системы. Показанные ниже команды выдают статистику с интервалом в одну секунду. Выводные данные взяты из FreeBSD.

solaris% netstat -i 1
hp-ux% netstat 1
redhat% netstat -i –c
freebsd% netstat 1
input (Total) output
packets errs packets errs colls
13971549 1216 14757869 16 1431629
512 0 99 1 27
464 1 94 0 40
516 0 101 0 26
452 1 87 0 14
336 0 71 0 19

В этом примере количество коллизий составляет от 20% до 30%. Видимо, сеть передает пакеты очень медленно или вообще не функционирует.

Непрерывный режим работы команды netstat особенно эффективен при выслеживании источника ошибок. Команда netstat -i может сообщить о существовании проблем, но она не скажет, какова причина ошибок: то ли это постоянно возникающая аппаратная проблема, то ли кратковременное, но фатальное событие. Наблюдение за сетью при различных уровнях загруженности позволит получить гораздо более полное представление о том, что происходит. Задайте команду ping с большой длиной пакетов и наблюдайте за выводом команды netstat.

Проверка таблицы маршрутизации

Команда netstat -r отображает таблицу маршрутизации ядра. Вот пример, полученный на компьютере, который работает под управлением Solaris и имеет два сетевых интерфейса:

% netstat -r -n
Routing Table
Destination Gateway Flags Ref Use Interface
192.225.44.0 192.225.44.88 U 3 1841 hme0
192.168.3.0 192.168.3.12 U 2 1317 hmel
10.0.0.0 192.168.3.252 UG 0 4 hmel
default 192.225.44.254 UG 0 91668
127.0.0.1 127.0.0.1 UH 0 543 lo0

Пункты назначения и шлюзы могут быть представлены либо доменными именами, либо IP-адресами. Опция -n задает вывод IP-адресов.

В колонке Flags отображаются флаги, характеризующие маршрут: U (up) — активный, G (gateway) — шлюз, H (host) — узловой (связан с конкретным адресом, а не сетью). Флаг D (не показан) обозначает маршрут, полученный в результате переадресации по протоколу ICMP. Флаги G и H вместе обозначают маршрут к компьютеру, проходящий через промежуточный шлюз. Остальные поля содержат статистические данные о маршруте: текущее число TCP-соединений по этому маршруту, количество отправленных пакетов и имя используемого интерфейса. Точный вид представленных данных зависит от конкретной операционной системы.

Приведенный вариант команды netstat полезен для проверки правильности таблицы маршрутизации. Особенно важно убедиться в наличии и корректности стандартного маршрута. Иногда он обозначается в виде адреса со всеми нулями (0.0.0.0), иногда — словом default.

Просмотр статистики функционирования различных сетевых протоколов

Команда netstat -s выдает содержимое всевозможных счетчиков, используемых в сетевых программах. Информация разбивается на разделы в соответствии с протоколами: IP, ICMP, TCP и UDP. Ниже приведены отдельные фрагменты листинга команды netstat -s, полученного на компьютере-шлюзе; они отредактированы так, чтобы были видны только наиболее интересные данные.

ip:
2313683 total packets received
0 bad header checksums
1642600 packets for this host
25743 packets sent from this host
0 output packets dropped due to no bufs, etc.

Отсутствие ошибок контрольных сумм говорит о том, что аппаратное соединение работает нормально. Также важен тот факт, что пакеты не отбрасывались из-за недостатка свободной памяти (последняя строка).

icmp:
57 calls to icmp_error
Output histogram:
echo reply: 157
destination unreachable: 57
Input histogram:
echo reply: 6
destination unreachable: 4
echo: 157
time exceeded: 14
157 message responses generated

Показатели числа эхо-запросов, сгенерированных ответов и эхо-ответов совпадают. Отметим, что сообщения “destination unreachable” (адресат недостижим) могут посылаться даже тогда, когда пакеты, казалось бы, маршрутизируются нормально. Например, дефектные пакеты рано или поздно достигают шлюза, который отклоняет их, и по цепи шлюзов возвращается сообщение об ошибке.

tcp:
25087 packets sent
25499 packets received
31 connection requests
30 connection accepts
56 connections established (including accepts)
64 connections closed (including 13 drops)
4 embryonic connections dropped

Рекомендуем определить приемлемые диапазоны этих показателей, чтобы можно было сразу же замечать необычное поведение сети.

image_pdfimage_print

OSPF – базовая настройка мультизонной структуры

 

 

 

Router(config)#router ospf 1
Router(config-router)#network 192.168.1.0 0.0.0.255 area 0
Router(config-router)#network 10.0.1.0 0.0.0.255 area 0
Router(config)#router ospf 1
Router(config-router)#network 192.168.3.0 0.0.0.255 area 0
Router(config-router)#network 10.0.1.0 0.0.0.255 area 0
Router(config)#router ospf 1
Router(config-router)#network 192.168.2.0 0.0.0.255 area 0
Router(config-router)#network 10.0.1.0 0.0.0.255 area 0

Настройка ABR (пограничного) роутера

ABR(config)#router ospf 1
ABR(config-router)#netw
ABR(config-router)#network 10.0.1.0 0.0.0.255 area 0
ABR(config-router)#
00:31:26: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.2.1 on GigabitEthernet0/0 from LOADING to FULL, Loading Done
00:31:26: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.3.1 on GigabitEthernet0/0 from LOADING to FULL, Loading Done

ABR(config-router)#network 10.0.2.0 0.0.0.255 area 1

Посмотреть DR роутер

Router#sh ip ospf nei

Neighbor ID Pri State Dead Time Address Interface
192.168.1.1 1 FULL/DROTHER 00:00:32 10.0.1.1 GigabitEthernet0/0
192.168.3.1 1 FULL/DR 00:00:31 10.0.1.3 GigabitEthernet0/0
10.0.2.1 1 FULL/DROTHER 00:00:38 10.0.1.4 GigabitEthernet0/0
Router#

Назначить приоритет

ABR(config-if)#ip ospf priority 100
ABR(config-if)#int g1/0
ABR(config-if)#ip ospf priority 100

Перезагрузить OSPF

ABR#clear ip ospf process 
Reset ALL OSPF processes? [no]: y

Это нужно сделать на всех роутерах.

Смотрим что получилось

Router#sh ip ospf nei
Neighbor ID Pri State Dead Time Address Interface
192.168.1.1 1 FULL/DROTHER 00:00:33 10.0.1.1 GigabitEthernet0/0
192.168.3.1 1 FULL/DROTHER 00:00:32 10.0.1.3 GigabitEthernet0/0
10.0.2.1 100 FULL/DR 00:00:39 10.0.1.4 GigabitEthernet0/0
Router#sh ip rou
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
 D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
 N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
 E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
 i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
 * - candidate default, U - per-user static route, o - ODR
 P - periodic downloaded static route

Gateway of last resort is not set

10.0.0.0/24 is subnetted, 2 subnets
C 10.0.1.0 is directly connected, GigabitEthernet0/0
O IA 10.0.2.0 [110/2] via 10.0.1.4, 00:04:24, GigabitEthernet0/0
 172.20.0.0/24 is subnetted, 3 subnets
O IA 172.20.1.0 [110/3] via 10.0.1.4, 00:04:24, GigabitEthernet0/0
O IA 172.20.2.0 [110/3] via 10.0.1.4, 00:04:24, GigabitEthernet0/0
O IA 172.20.3.0 [110/3] via 10.0.1.4, 00:04:24, GigabitEthernet0/0
O 192.168.1.0/24 [110/2] via 10.0.1.1, 00:04:14, GigabitEthernet0/0
C 192.168.2.0/24 is directly connected, GigabitEthernet2/0
O 192.168.3.0/24 [110/2] via 10.0.1.3, 00:56:34, GigabitEthernet0/0

* IA означает, что маршруты OSPF зародились в другом регионе
Router#sh ip ospf nei

Neighbor ID Pri State Dead Time Address Interface
10.0.2.1 100 FULL/DR 00:00:31 10.0.1.4 GigabitEthernet0/0
192.168.3.1 1 FULL/DROTHER 00:00:34 10.0.1.3 GigabitEthernet0/0
192.168.1.1 1 FULL/DROTHER 00:00:34 10.0.1.1 GigabitEthernet0/0
Router#

Neighbor ID – 32-х битное число, которое, роутер назначает сам, вибирая наибольший IP-адресс из своих интерфейсов.

Это поведение можно изменить. Хорошим тоном считается DR назначить наибольший ID

ABR(config)#router ospf 1
ABR(config-router)#router-id 20.20.20.20
ABR(config-router)#Reload or use "clear ip ospf process" command, for this to take effect

После этого нужно опять перегрузить OSPF

ABR#clear ip ospf process 
Reset ALL OSPF processes? [no]: y

Router#sh ip ospf ne
Neighbor ID Pri State Dead Time Address Interface
5.5.5.5 1 2WAY/DROTHER 00:00:39 10.0.2.3 GigabitEthernet0/0
20.20.20.20 100 FULL/DR 00:00:34 10.0.2.1 GigabitEthernet0/0
6.6.6.6 1 FULL/BDR 00:00:31 10.0.2.2 GigabitEthernet0/0

* BDR - запасной DR
** DROTHER - эти ни DR ни BDR, если упадут DR & BDR, то произойдут выборы
*** FULL - полное взаимодействие
*** 2WAY - просто соседские отношения, без обмена LSA, эти роутеры обмениваются LSA только с DR и BDR

Если роутеру установить приоритет 0 то он не будет вибираться ни DR ни BDR.

Router#sh ip ospf database 
 OSPF Router with ID (1.1.1.1) (Process ID 1)


Router Link States (Area 0)

Link ID ADV Router Age Seq# Checksum Link count |
20.20.20.20 20.20.20.20 1139 0x80000003 0x002073 1 |
3.3.3.3 3.3.3.3 1139 0x80000004 0x006639 2 | -- LSA первого типа 
1.1.1.1 1.1.1.1 1134 0x80000004 0x00b8fa 2 |
2.2.2.2 2.2.2.2 1134 0x80000004 0x008f1a 2 |

Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum |
10.0.1.4 20.20.20.20 1134 0x80000003 0x00328d | -- LSA второго типа

Summary Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
10.0.2.0 20.20.20.20 1175 0x80000001 0x00a061 |
10.0.3.0 20.20.20.20 1170 0x80000002 0x00946b |
172.20.1.0 20.20.20.20 1124 0x80000003 0x007eca |
172.20.3.0 20.20.20.20 1124 0x80000004 0x0066df |
172.20.2.0 20.20.20.20 1124 0x80000005 0x006fd6 | -- LSA третьего типа
172.16.1.0 20.20.20.20 1119 0x80000006 0x00a8a1 |
172.16.3.0 20.20.20.20 1119 0x80000007 0x0090b6 |
172.16.2.0 20.20.20.20 1119 0x80000008 0x0099ad |
Router#
Router#sh ip rout ospf 1
 10.0.0.0/24 is subnetted, 3 subnets
O IA 10.0.2.0 [110/2] via 10.0.1.4, 00:22:58, GigabitEthernet0/0
O IA 10.0.3.0 [110/2] via 10.0.1.4, 00:22:58, GigabitEthernet0/0
 172.16.0.0/24 is subnetted, 3 subnets
O IA 172.16.1.0 [110/3] via 10.0.1.4, 00:22:48, GigabitEthernet0/0
O IA 172.16.2.0 [110/3] via 10.0.1.4, 00:22:48, GigabitEthernet0/0
O IA 172.16.3.0 [110/3] via 10.0.1.4, 00:22:48, GigabitEthernet0/0
 172.20.0.0/24 is subnetted, 3 subnets
O IA 172.20.1.0 [110/3] via 10.0.1.4, 00:22:58, GigabitEthernet0/0 |
O IA 172.20.2.0 [110/3] via 10.0.1.4, 00:22:58, GigabitEthernet0/0 | -- маршруты полученные по LSA 3 типа 
O IA 172.20.3.0 [110/3] via 10.0.1.4, 00:22:58, GigabitEthernet0/0 |

O 192.168.2.0 [110/2] via 10.0.1.2, 00:22:58, GigabitEthernet0/0 |
O 192.168.3.0 [110/2] via 10.0.1.3, 00:22:58, GigabitEthernet0/0 | -- информация о маршрутах в нашем регионе по LSA первого типа

Посмотреть информацию о LSA

Router#sh ip ospf database router

OSPF Router with ID (1.1.1.1) (Process ID 1)

Router Link States (Area 0)

LS age: 181
 Options: (No TOS-capability, DC)
 LS Type: Router Links
 Link State ID: 1.1.1.1
 Advertising Router: 1.1.1.1
 LS Seq Number: 80000005
 Checksum: 0xb6fb
 Length: 48
 Number of Links: 2

Link connected to: a Transit Network
 (Link ID) Designated Router address: 10.0.1.4
 (Link Data) Router Interface address: 10.0.1.1
 Number of TOS metrics: 0
 TOS 0 Metrics: 1

Link connected to: a Stub Network
 (Link ID) Network/subnet number: 192.168.1.0
 (Link Data) Network Mask: 255.255.255.0
 Number of TOS metrics: 0
 TOS 0 Metrics: 1

LS age: 187
 --More--
Router#sh ip osp
 Routing Process "ospf 1" with ID 1.1.1.1
 Supports only single TOS(TOS0) routes
 Supports opaque LSA
 SPF schedule delay 5 secs, Hold time between two SPFs 10 secs
 Minimum LSA interval 5 secs. Minimum LSA arrival 1 secs
 Number of external LSA 0. Checksum Sum 0x000000
 Number of opaque AS LSA 0. Checksum Sum 0x000000
 Number of DCbitless external and opaque AS LSA 0
 Number of DoNotAge external and opaque AS LSA 0
 Number of areas in this router is 1. 1 normal 0 stub 0 nssa
 External flood list length 0
 Area BACKBONE(0)
 Number of interfaces in this area is 2
 Area has no authentication
 SPF algorithm executed 17 times | -- сколько раз делался перерасчет
 Area ranges are
 Number of LSA 13. Checksum Sum 0x05c771
 Number of opaque link LSA 0. Checksum Sum 0x000000
 Number of DCbitless LSA 0
 Number of indication LSA 0
 Number of DoNotAge LSA 0
 Flood list length 0
 --More--

Изменим схему сети, что бы посмотреть балансировку

 

 

Посмотреть стоимость маршрута

ABR#sh ip ospf int f4/0
FastEthernet4/0 is up, line protocol is up
Internet address is 20.0.1.2/24, Area 0
Process ID 1, Router ID 20.20.20.20, Network Type BROADCAST, Cost: 1 | -- стоимость
Transmit Delay is 1 sec, State DR, Priority 100
Designated Router (ID) 20.20.20.20, Interface address 20.0.1.2
Backup Designated Router (ID) 10.10.10.10, Interface address 20.0.1.1
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
   Hello due in 00:00:04
Index 2/2, flood queue length 0
Next 0x0(0)/0x0(0)
Last flood scan length is 1, maximum is 1
Last flood scan time is 0 msec, maximum is 0 msec
Neighbor Count is 1, Adjacent neighbor count is 1
   Adjacent with neighbor 10.10.10.10 (Backup Designated Router)
Suppress hello for 0 neighbor(s)

Посмотреть скорость интерфейса

ABR#sh int f4/0
FastEthernet4/0 is up, line protocol is up (connected)
Hardware is Lance, address is 0060.2f0a.8bed (bia 0060.2f0a.8bed)
Internet address is 20.0.1.2/24
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,  | -- скорость интерф.
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
ARP type: ARPA, ARP Timeout 04:00:00,
Last input 00:00:08, output 00:00:05, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0 (size/max/drops); Total output drops: 0
Queueing strategy: fifo
Output queue :0/40 (size/max)
5 minute input rate 54 bits/sec, 0 packets/sec
5 minute output rate 54 bits/sec, 0 packets/sec
760 packets input, 62204 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
0 input packets with dribble condition detected
574 packets output, 46216 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
--More--

Можно поменять стоимость интерфейса вручную, при этом он уже не будет просчитываться роутером автоматически по формуле

Router(config)#int f0/0
Router(config-if)#ip ospf cost 10

Посмотреть метрику

Router#sh ip rout
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, ia - IS-IS inter area
* - candidate default, U - per-user static route, o - ODR
P - periodic downloaded static route
Gateway of last resort is not set
10.0.0.0/24 is subnetted, 3 subnets
C 10.0.1.0 is directly connected, FastEthernet0/0
O IA 10.0.2.0 [110/2] via 20.0.1.2, 00:43:46, FastEthernet1/0
O IA 10.0.3.0 [110/2] via 20.0.1.2, 00:43:46, FastEthernet1/0
20.0.0.0/24 is subnetted, 2 subnets
C 20.0.1.0 is directly connected, FastEthernet1/0
O 20.0.2.0 [110/2] via 20.0.1.2, 00:27:01, FastEthernet1/0
[110/2] via 10.0.1.5, 00:27:01, FastEthernet0/0
172.16.0.0/24 is subnetted, 3 subnets
O IA 172.16.1.0 [110/3] via 20.0.1.2, 00:43:46, FastEthernet1/0     | -- метрика
O IA 172.16.2.0 [110/3] via 20.0.1.2, 00:43:46, FastEthernet1/0
O IA 172.16.3.0 [110/3] via 20.0.1.2, 00:43:46, FastEthernet1/0
172.20.0.0/24 is subnetted, 3 subnets
O IA 172.20.1.0 [110/3] via 20.0.1.2, 00:43:46, FastEthernet1/0
O IA 172.20.2.0 [110/3] via 20.0.1.2, 00:43:46, FastEthernet1/0
O IA 172.20.3.0 [110/3] via 20.0.1.2, 00:43:46, FastEthernet1/0
O 192.168.1.0/24 [110/2] via 10.0.1.1, 00:26:46, FastEthernet0/0
O 192.168.2.0/24 [110/2] via 10.0.1.2, 00:26:46, FastEthernet0/0
O 192.168.3.0/24 [110/2] via 10.0.1.3, 00:26:46, FastEthernet0/0

 

 

 

 

 

image_pdfimage_print

Статический маршрут в CentOS 7

Для управления маршрутизацией в CentOS может понадобиться добавить статический маршрут. Сделать это достаточно просто с помощью консольной команды. Для начала проверим существующие маршруты, используя netstat:

# netstat -nr

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.159.2 0.0.0.0 UG 0 0 0 eno16777728
192.168.159.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777728

В данном случае у нас один маршрут для адреса 0.0.0.0/0.0.0.0 шлюз используется 192.168.159.2, он же шлюз по-умолчанию. То есть по сути, статических маршрутов никаких нет. Добавим один из них.

Допустим, у нас есть подсеть 192.168.8.0 маска 255.255.255.0, трафик в эту подсеть маршрутизирует шлюз 192.168.159.5 Добавляем маршрут:

# route add -net 192.168.8.0/24 gw 192.168.159.5

Проверяем, появился ли добавленный маршрут в таблицу маршрутизации:

# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.159.2 0.0.0.0 UG 0 0 0 eno16777728
192.168.8.0 192.168.159.5 255.255.255.0 UG 0 0 0 eno16777728
192.168.159.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777728

Все в порядке, маршрут добавлен. Но после перезагрузки этот статический маршрут будет удален. Чтобы этого не произошло и добавленные маршруты сохранялись, необходимо их записать в специальный файл. В папке /etc/sysconfig/network-scripts создаем файл с именем route-eth0 следующего содержания:

# mcedit /etc/sysconfig/network-scripts/route-eth0

192.168.8.0/24 via 192.168.159.5

Перезагружаемся и проверяем, на месте ли маршрут:

# reboot
# netstat -nr

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.159.2 0.0.0.0 UG 0 0 0 eno16777728
192.168.8.0 192.168.159.5 255.255.255.0 UG 0 0 0 eno16777728
192.168.159.0 0.0.0.0 255.255.255.0 U 0 0 0 eno16777728

Все в порядке, статический маршрут добавлен.

image_pdfimage_print

Настройка 802.1Q VLAN в CentOS 7

Если коммутатор один, то все взаимодействие организуется достаточно просто – порты (например) fa0/3 и fa0/5 на уровне коммутатора объединяются в одну логическую группу, а порты fa0/2 и fa0/6 в другую. И все работает. Но в случае если коммутаторы разные и им нужно передавать по одному физическому каналу сразу несколько логических сетей, то весь трафик проходящий между коммутаторами нужно маркировать (или теггировать).

Теггирированный (маркированный, tagged) и не теггирированный (не маркированный, untagged) трафик, порт коммутатора через который проходят теггрированные фреймы называтеся транк (VLAN транк, 802.1Q транк).

Самый распространенный стандарт маркировки трафика IEEE 802.1Q, в кадр Ethernet или IEEE 802.3 инкапсулируется дополнительное двух байтовое поле содержащие TPID (идентификатор протокола 802.1Q) равный 0×8100, приоритет и номер VLAN к которому относится данный кадр.

Тег 802.1Q расположен сразу после MAC-адреса отравителя и TPID по сути заменяет поле типа или размера, поэтому L2-коммутаторы не поддерживающие 802.1Q могут доставить маркированные кадры до места назначения.

Если в VLAN транк попадает не маркированный трафик то он автоматически относится к специальному VLAN, который называется native VLAN и обычно это VLAN 1.

 

Для поднятия теггированного интерфейса на CentOS нужно в первую очередь проверить поддержку ядром 8021q:

# modprobe 8021q

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

# lsmod | grep 8021q
8021q 29022 0
garp 14384 1 8021q
mrp 18542 1 8021q

Все в порядке, модуль 8021q загружен, добавим его в автозагрузку:

# echo 8021q >> /etc/modules-load.d/8021q.conf

Теперь создаем файл конфигурации для vlan в /etc/sysconfig/network-scripts:

# mcedit ifcfg-eth0.2000

VLAN=yes
DEVICE=eth0.2000
BOOTPROTO=static
ONBOOT=yes
TYPE=Vlan
IPADDR=192.168.100.2
NETMASK=255.255.255.0

Обращаю внимание на выделенное жирным. Во всех инструкциях в интернете, что мне попались, этот параметр был указан как TYPE=Ethernet, но с такой настройкой интерфейс с vlan не поднимался, появлялась ошибка:

Error: no device found for connection 'System eth0.2000'.

Только после того, как я исправил, все заработало как надо. Так что сохраняем и активируем интерфейс:

# ifup eth0.2000

Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)

Проверяем наш vlan:

# ip l ls

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
 link/ether 00:15:5d:01:0f:06 brd ff:ff:ff:ff:ff:ff
3: eth0.2000@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
 link/ether 00:15:5d:01:0f:06 brd ff:ff:ff:ff:ff:ff

Все в порядке, тегированный интерфейс поднят. По аналогии можно создать еще несколько подобных интерфейсов, не забывая изменять им имена и адреса.

UPD. На Centos 7 Catatlist заработало с такими настройками:

# cat ifcfg-enp5s9.10
VLAN=yes
DEVICE=enp5s9.10
PHYSDEV=enp5s9
ONBOOT=yes
BOOTPROTO="static"
IPADDR=10.10.15.1
PREFIX=24
# cat ifcfg-enp5s9
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp5s9
UUID=38afe9ad-7f17-4bdc-a1d3-a909debda059
DEVICE=enp5s9
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.10.5.1
PREFIX=24
GATEWAY=10.10.5.1
DNS1=192.168.113.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: enp64s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:14:c2:03:4b:d2 brd ff:ff:ff:ff:ff:ff
inet 192.168.113.53/24 brd 192.168.113.255 scope global noprefixroute enp64s0
valid_lft forever preferred_lft forever
3: enp5s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:30:84:b3:9a:b0 brd ff:ff:ff:ff:ff:ff
inet 10.10.5.1/24 brd 10.10.5.255 scope global noprefixroute enp5s9
valid_lft forever preferred_lft forever
4: enp5s9.10@enp5s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:30:84:b3:9a:b0 brd ff:ff:ff:ff:ff:ff
inet 10.10.15.1/24 brd 10.10.15.255 scope global noprefixroute enp5s9.10
valid_lft forever preferred_lft forever
# nmcli con sh
NAME           UUID                                  TYPE      DEVICE 
enp5s9         38afe9ad-7f17-4bdc-a1d3-a909debda059  ethernet  enp5s9 
enp64s0        f1963841-564a-4e83-8417-89279a1ce0cd  ethernet  enp64s0 
Vlan enp5s9.10 a09a881e-c35d-491b-1244-59856eeac801  vlan      enp5s9.10
# nmcli dev status
DEVICE     TYPE       STATE          CONNECTION 
enp64s0    ethernet   подключено     enp64s0 
enp5s9     ethernet   подключено     enp5s9 
enp5s9.10  vlan       подключено     Vlan enp5s9.10 
lo         loopback   без управления --
# ip r
default via 192.168.113.1 dev enp64s0 proto static metric 100 
default via 10.10.5.1 dev enp5s9 proto static metric 101 
10.10.5.0/24 dev enp5s9 proto kernel scope link src 10.10.5.1 metric 101 
10.10.15.0/24 dev enp5s9.10 proto kernel scope link src 10.10.15.1 metric 400 
192.168.113.0/24 dev enp64s0 proto kernel scope link src 192.168.113.53 metric 100
Switch#sh vlan

VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1 default active Fa0/1, Fa0/2, Fa0/3, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12, Fa0/13, Fa0/14, Fa0/16
Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21, Fa0/22, Fa0/23
5 net5 active 
10 VLAN0010 active Fa0/15
50 net50 active 
150 net150 active 
1002 fddi-default active 
1003 token-ring-default active 
1004 fddinet-default active 
1005 trnet-default active

Текущие привязки интерфейсов и VLAN можно посмотреть

# cat /proc/net/vlan/config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
enp5s9.10      | 10  | enp5s9

При отладке очень полезной может оказаться статистическая информация о интерфейсах, которая хранится в /proc/net/vlan/<имя интрефейса>

# cat /proc/net/vlan/enp5s9.10
enp5s9.10  VID: 10       REORDER_HDR: 1  dev->priv_flags: 1
         total frames received         1384
          total bytes received       205461
      Broadcast/Multicast Rcvd            0

      total frames transmitted         2817
       total bytes transmitted      3418310
Device: enp5s9
INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0
 EGRESS priority mappings:

Если количество принятых кадров (frames received) равно 0, то скорее всего интерфейс enp5s9 не получает маркированный трафик для VLAN 10.

 

http://www.alsigned.ru/?p=3138

image_pdfimage_print