Сетевые интерфейсы в «С-Терра Шлюз»

Скачать в формате PDF

Назначение документа

Настоящий документ содержит описание логики работы с сетевыми интерфейсами в «С-Терра Шлюз» версии 4.2 (далее Продукт).

Введение

На «С-Терра Шлюз» запрещено несанкционированное изменение состава ПАК. Любые изменения должны быть согласованы с производителем Продукта.

«С-Терра Шлюз» может иметь произвольное количество сетевых карт (NIC – англ. network interface controller/card), функционирующих, как на шине PCIe, так и на шине USB (USB-модемы, USB-Ethernet адаптеры).

Сетевые карты представлены в операционной системе (далее ОС) физическими сетевыми интерфейсами (например, eth0, usb0). При необходимости может быть создано произвольное количество виртуальных сетевых интерфейсов (например, 802.1Q интерфейс с VLAN ID 123 - eth0.123 или GRE интерфейс – gre1).

Каждая сетевая карта однозначно соответствует физическому сетевому интерфейсу в ОС. Виртуальный интерфейс может соответствовать физическому интерфейсу в ОС (а, следовательно, – сетевой карте), например 802.1Q интерфейс, или группе физических, например Bonding интерфейс, но может и не соответствовать ни одному физическому интерфейсу, например GRE интерфейс. Вопрос соответствия сетевых карт и виртуальных интерфейсов интерфейсам в ОС рассмотрен далее.

Функции создания и удаления сетевых интерфейсов могут быть осуществлены только средствами ОС. Конфигурирование сетевых интерфейсов может быть выполнено как средствами ОС, так и при помощи консоли Cisco-like. Особенности создания, удаления и конфигурирования сетевых интерфейсов будут описаны далее.

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

Доверенные и недоверенные сетевые интерфейсы

В начале эксплуатации «С-Терра Шлюз» все сетевые интерфейсы, в зависимости от того, к какому сегменту сети они будут подключены, необходимо поделить на две группы. К группе недоверенных сетевых интерфейсов должны относиться интерфейсы недоверенного (публичного или WAN) сегмента. К группе доверенных сетевых интерфейсов должны относиться интерфейсы доверенного (защищаемого или LAN) сегмента.

Контролируемые и неконтролируемые сетевые интерфейсы

Помимо деления сетевых интерфейсов на группы доверенных и недоверенных, существует деление на два класса сетевых интерфейсов. Разделение интерфейсов на классы происходит с точки зрения наличия или отсутствия возможности СКЗИ и МЭ контролировать трафик на них в зависимости от конфигурации интерфейсов. Если СКЗИ и МЭ может контролировать трафик на сетевом интерфейсе, то такой интерфейс будет называться «контролируемым» и, соответственно, относиться к классу контролируемых, в противном случае – «неконтролируемым» и входить в класс неконтролируемых.

Сетевые интерфейсы, подключенные к недоверенным (например, WAN) сетям, не должны переводиться в неконтролируемое состояние.

Таблица 1 показывает возможные состояния интерфейса с точки зрения подконтрольности и допустимые переходы между ними.

Таблица 1. Классификация состояний интерфейса

Группа  \  Класс

Контролируемый

Неконтролируемый

Доверенный

По умолчанию

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

Недоверенный

По умолчанию

Недопустимо

Настройки сетевых интерфейсов, при которых они могут стать неконтролируемым с точки зрения СКЗИ и МЭ, описаны в главе «Настройка и создание виртуальных сетевых интерфейсов».

Процедура добавления и удаления сетевых интерфейсов

Если интерфейс добавлен в Продукт, то данный интерфейс отображается в консоли Cisco-like, а также может быть описан в LSP (соответственно, к таким интерфейсам можно применять политику СКЗИ и правила МЭ). Важно понимать, что интерфейс, добавленный в Продукт, может быть неконтролируемым, то есть прикрепление политики СКЗИ и правил МЭ к таким интерфейсам будет возможно, но они не будут выполнены (подробнее см. главу «Настройка и создание виртуальных сетевых интерфейсов»).

Если интерфейс не добавлен в Продукт, то данный интерфейс не отображается в консоли Cisco-like и не может быть описан в LSP.

Не для всех интерфейсов, добавленных в Продукт, можно изменять сетевые параметры (MTU/IP адрес/состояние) при помощи Cisco-like консоли (подробнее описано в главе «Настройка и создание виртуальных сетевых интерфейсов»).

При добавлении и удалении физических интерфейсов нужно использовать утилиту netifcfg, входящую в Продукт, а для виртуальных – файл /etc/ifaliases.cf. Далее будет описано использование утилиты netifcfg и файла /etc/ifaliases.cf.

Физическим считается интерфейс, который представлен в виде сетевой карты (NIC). В «С-Терра Шлюз» версии 4.2 USB-модемы и USB-Ethernet адаптеры являются исключением из правил. Для их добавления и удаления следует редактировать файл /etc/ifaliases.cf (подробнее про использование USB-модемов можно прочитать в документе «Использование USB-модемов в С-Терра Шлюз»).

Для «С-Терра Шлюз» в виртуальном исполнении физическими являются интерфейсы, которые указываются в параметрах виртуальной машины.

Применение утилиты netifcfg

Утилита netifcfg имеет множество опций:

root@Hub1-n2:~# netifcfg

usage:

        /bin/netifcfg save ethX ...

        /bin/netifcfg save-all

        /bin/netifcfg reset

        /bin/netifcfg enum

        /bin/netifcfg map <config>

        /bin/netifcfg version

В документе будут рассмотрены только две опции, а именно enum и map.

Все опции, за исключением enum и map, не предназначены для применения администратором Продукта и используются для внутренних нужд.

Опция enum

Опция enum генерирует специальное описание для физических сетевых интерфейсов, которое после анализа администратором подается на вход утилите netifcfg (опция map с параметром <config>).

Пример вывода netifcfg enum:

root@Hub1-n2:~# netifcfg enum

#Unique ID           iface type   OS name          Cisco-like name

0000:03:00.0 phye eth0 GigabitEthernet0/0

0000:0b:00.0 phye eth1 GigabitEthernet0/1

0000:13:00.0 phye eth2 GigabitEthernet0/2

Вывод netifcfg enum состоит из четырех колонок (слева направо):

·         Unique ID - Уникальный идентификатор сетевого интерфейса (адрес PCI шины, либо адрес USB-интерфейса для USB-модемов и USB-Ethernet адаптеров);

Как упомянуто выше, опция enum в качестве уникального идентификатора USB-модема/USB-Ethernet адаптера использует адрес USB-интерфейса, который может меняться при перезагрузке. Именно поэтому при добавлении USB-модема/USB-Ethernet адаптера в качестве интерфейса не следует осуществлять его привязку при помощи netifcfg (она осуществляется автоматически при помощи специальных правил udev) и менять следует уже сформированный файл /etc/ifaliases.cf.

·         iface type - Тип сетевого интерфейса (phye – физический интерфейс на PCI шине, hotp - физический интерфейс на USB шине);

·         OS name - Имя сетевого интерфейса в нотации Linux (имена интерфейсов в нотации Linux можно посмотреть при помощи команды ip link show);

·         Cisco-like name – Имя сетевого интерфейса в нотации Cisco.

Опция map

Опция map для своей работы использует вывод утилиты netifcfg, запущенной с опцией enum и предназначена для выполнения следующих функций:

·         Осуществление привязки физического сетевого интерфейса к его уникальному идентификатору (адрес PCI шины, либо адрес USB-интерфейса для USB-модемов и USB-Ethernet адаптеров). Цель данной привязки – обеспечение постоянного соответствия между именем сетевого интерфейса в нотации Linux и его уникальным идентификатором. Например, без данной привязки интерфейс eth0 после перезагрузки может получить имя eth1, что в свою очередь может привести к нарушению политики безопасности из-за того, что политика СКЗИ или правила МЭ были прикреплены к eth0.

·         Генерирование файла /etc/ifaliases.cf, который используется для сопоставления между именами интерфейсов в нотации Linux и Cisco. Пример файла /etc/ifaliases.cf:

root@Hub1-n2:~# cat /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")

interface (name="GigabitEthernet0/1" pattern="eth1")

interface (name="GigabitEthernet0/2" pattern="eth2")

interface (name="default" pattern="*")

Под именем в нотации Cisco интерфейс будет виден в консоли Cisco-like, а также представлен в LSP.

Пример использования enum и map на неинициализированном виртуальном шлюзе

Исходное состояние – неинициализированный «С-Терра Шлюз» после первого запуска.

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

Ниже приводится пример ручной привязки.

1.    Войдите в Linux bash.

2.    Посмотрите текущий список всех сетевых интерфейсов в нотации Linux (физические интерфейсы будут иметь имена, соответствующие шаблонам eth<N> и usb<N>):

root@Hub1-n2:~# ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000

    link/ether 00:90:0b:3e:03:3b brd ff:ff:ff:ff:ff:ff

3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000

    link/ether 00:90:0b:3e:03:3c brd ff:ff:ff:ff:ff:ff

4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000

    link/ether 00:90:0b:3e:03:3d brd ff:ff:ff:ff:ff:ff

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

root@Hub1-n2:~# netifcfg enum > map.txt

root@Hub1-n2:~# cat map.txt

0000:03:00.0 phye eth0 GigabitEthernet0/0

0000:0b:00.0 phye eth1 GigabitEthernet0/1

0000:13:00.0 phye eth2 GigabitEthernet0/2

Так как файл map.txt будет подан на вход утилите netifcfg с опцией map, то менять содержимое данного файла запрещено (чтобы исключить пользовательскую ошибку), за исключением случая, который описан в пункте Добавление и удаление физических сетевых интерфейсов.

4.    Осуществите привязку сетевых интерфейсов и перезагрузите устройство:

root@Hub1-n2:~# netifcfg map map.txt

 

 

SUCCESS:  Operation was successful.

root@Hub1-n2:~# reboot

5.    Убедитесь, что файл /etc/ifaliases.cf создан и соответствует выводу netifcfg enum:

root@Hub1-n2:~# cat /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")

interface (name="GigabitEthernet0/1" pattern="eth1")

interface (name="GigabitEthernet0/2" pattern="eth2")

interface (name="default" pattern="*")

Автоматически сгенерированные строки для физических интерфейсов в данном файле менять запрещено. Можно добавлять свои, но только для виртуальных интерфейсов (подробно описано в пункте Добавление и удаление виртуальных сетевых интерфейсов настоящего документа).

Если «С-Терра Шлюз» реализован в аппаратном исполнении, то привязка сетевых интерфейсов осуществляется на производстве компании «С-Терра СиЭсПи», для виртуальных шлюзов привязка не осуществляется, так как заранее неизвестно количество сетевых интерфейсов и их тип.

Политика безопасности и файл /etc/ifaliases.cf

В файле /etc/ifaliases.cf отражено соответствие имени интерфейса в нотации Cisco и имени интерфейса в нотации Linux . Данный файл также называют картой интерфейсов.

Соответствие описывается посредством структуры "interface" с двумя обязательными полями name и pattern, где

name          имя интерфейса в нотации Cisco, которое задается в LSP (в атрибуте LogicalName структуры Networkinterface) и в консоли Cisco-like

pattern       шаблон для имени интерфейса в нотации Linux.

Файл /etc/ifaliases.cf должен завершаться строкой:

interface (name="default" pattern="*")

Пример:

interface (name="GigabitEthernet 0/0" pattern="eth0")

interface (name="GigabitEthernet 0/1" pattern="eth1")

interface (name="default" pattern="*")

При задании политики безопасности как посредством консоли Cisco-like, так и при помощи LSP, используется имя сетевого интерфейса в нотации Cisco из файла /etc/ifaliases.cf.

Пример для консоли Cisco-like:

Hub1-n2#show running-config

...

interface GigabitEthernet0/0

 ip address 172.16.100.20 255.255.255.0

 crypto map VPN

...

Пример для LSP:

root@Hub1-n2:~# lsp_mgr show

...

NetworkInterface (

    LogicalName = "GigabitEthernet0/0"

    IPsecPolicy = IPsecPolicy:VPN

)

...

Добавление и удаление физических сетевых интерфейсов

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

Ниже рассмотрены конкретные примеры. Ваши условия могут отличаться, учитывайте это.

1.    Процедура добавления.

1.1.     Войдите в Linux bash.

1.2.     Если виртуальные сетевые интерфейсы были добавлены вручную в файл /etc/ifaliases.cf, - сохраните текущую версию файла (так как файл будет перезаписан), чтобы потом заново добавить ваши виртуальные интерфейсы:

root@Hub1-n2:~# cp /etc/ifaliases.cf /etc/ifaliases.cf.old

1.3.     Перед добавлением нового физического сетевого интерфейса получите список текущих интерфейсов в нотации Linux (это нужно для того, чтобы после добавления нового сетевого интерфейса можно было однозначно определить его имя в нотации Linux):

root@Hub1-n2:~# ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1

    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 group default qlen 1000

    link/ether 00:50:56:9e:7a:a9 brd ff:ff:ff:ff:ff:ff

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:5a:f9 brd ff:ff:ff:ff:ff:ff

4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:6f:d8 brd ff:ff:ff:ff:ff:ff

Вывод консоли свидетельствует о том, что в системе присутствуют три физических сетевых интерфейса eth0, eth1, eth2.

1.4.     Выключите шлюз и добавьте новый сетевой интерфейс (сетевая карта для аппаратного шлюза, либо сетевой адаптер для виртуального шлюза). После чего, включите шлюз, дождитесь загрузки и войдите в Linux bash.

Для виртуального шлюза рекомендуется добавлять сетевые адаптеры только одного типа. Например, для гипервизора ESXi либо все адаптеры с типом (Adapter Type) e1000, либо все Vmxnet3.

1.5.     Определите в нотации Linux имя нового сетевого интерфейса:

root@Hub1-n2:~# ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1

    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 group default qlen 1000

    link/ether 00:50:56:9e:7a:a9 brd ff:ff:ff:ff:ff:ff

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:5a:f9 brd ff:ff:ff:ff:ff:ff

4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:6f:d8 brd ff:ff:ff:ff:ff:ff

5: __err__eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:dd:57 brd ff:ff:ff:ff:ff:ff

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

При осуществлении привязки, имена интерфейсам назначаются исходя из сортировки по уникальным идентификаторам (в данном случае по адресу PCI шины). Чем больше значение идентификатора, тем больше номер интерфейса (здесь eth<N>).

Если по какой-то причине значение идентификатора окажется меньше, чем у интерфейсов, для которых ранее была осуществлена привязка, сначала интерфейс отобразится как __err__<название><номер>, но, после привязки и перезагрузки, он получит номер в соответствии с сортировкой по уникальным идентификаторам. Таким образом, могут поменяться названия интерфейсов, что в свою очередь нарушит конфигурацию.
Для того, чтобы избежать нарушения конфигурации, необходимо проверить привязки перед выполнением команды map и, в случае необходимости, изменить номера интерфейсов.

1.6.     Сгенерируйте описание для физических сетевых интерфейсов при помощи netifcfg с опцией enum и посмотрите результат:

root@Hub1-n2:~# netifcfg enum > map.txt

root@Hub1-n2:~# cat map.txt

0000:03:00.0 phye eth0 GigabitEthernet0/0

0000:0b:00.0 phye eth1 GigabitEthernet0/1

0000:13:00.0 phye eth2 GigabitEthernet0/2

0000:1b:00.0 phye eth3 GigabitEthernet0/3

1.7.     Осуществите привязку сетевых интерфейсов:

root@Hub1-n2:~# netifcfg map map.txt

 

 

SUCCESS:  Operation was successful.

1.8.     Если вы ранее вручную добавляли виртуальные интерфейсы в файл /etc/ifaliases.cf и сделали его копию /etc/ifaliases.cf.old, перенесите ваши виртуальные интерфейсы вручную из файла /etc/ifaliases.cf.old в /etc/ifaliases.cf и пересчитайте его контрольную сумму:

Автоматически сгенерированные строки для физических интерфейсов в данном файле менять запрещено.

root@Hub1-n2:~# integr_mgr calc -f /etc/ifaliases.cf

 

 

SUCCESS:  Operation was successful.

1.9.     Перезагрузите устройство:

root@Hub1-n2:~# reboot

2.    Процедура удаления.

2.1.     Процедура удаления выполняется аналогично процедуре добавления.

Добавление и удаление виртуальных сетевых интерфейсов

Для добавления или удаления виртуальных сетевых интерфейсов не нужно использовать утилиту netifcfg. Требуется вручную отредактировать файл /etc/ifaliases.cf.

Список поддерживаемых виртуальных интерфейсов представлен в главе «Настройка и создание виртуальных сетевых интерфейсов».

1.    Процедура добавления будет рассмотрена на примере 802.1Q интерфейса.

1.1.     Войдите в Linux bash.

1.2.     Создайте виртуальный 802.1Q интерфейс (данная процедура подробно описана в главе «Настройка и создание виртуальных сетевых интерфейсов»).

1.3.     Определите в нотации Linux имя нового виртуального сетевого интерфейса:

root@Hub1-0:~# ip link show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1

    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 group default qlen 1000

    link/ether 00:50:56:9e:84:31 brd ff:ff:ff:ff:ff:ff

3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast master br0 state UP mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:bf:69 brd ff:ff:ff:ff:ff:ff

4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:f5:ec brd ff:ff:ff:ff:ff:ff

5: eth1.4000@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UP mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:bf:69 brd ff:ff:ff:ff:ff:ff

Вывод консоли свидетельствует о том, что в системе присутствуют 802.1Q интерфейс с именем eth1.4000.

1.4.     Добавьте 802.1Q интерфейс eth1.4000 в файл /etc/ifaliases.cf (выделено жирным):

Место добавления интерфейса в файл /etc/ifaliases.cf влияет только на порядок отображения его в консоли cisco-like.

root@Hub1-0:~# vim.tiny /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")

interface (name="GigabitEthernet0/1" pattern="eth1")

interface (name="GigabitEthernet0/1.4000" pattern="eth1.4000")

interface (name="GigabitEthernet0/2" pattern="eth2")

interface (name="default" pattern="*")

·         значение параметра name должно иметь следующий шаблон:

<имя физ. интерфейса в нотации Cisco>.<VLAN  ID>

·        значение параметра pattern должно совпадать с именем 802.1Q интерфейса в нотации Linux.

1.5.     Пересчитайте контрольную сумму файла /etc/ifaliases.cf:

root@Hub1-0:~# integr_mgr calc -f /etc/ifaliases.cf

 

 

SUCCESS:  Operation was successful.

1.6.     Перезапустите VPN сервис:

root@Hub1-0:~# service vpngate restart

Теперь интерфейс GigabitEthernet0/1.4000 должен быть доступен к заданию политики СКЗИ и правил МЭ посредством консоли Cisco-like и LSP, а также к конфигурированию посредством консоли Cisco-like. 

2.    Процедура удаления.

2.1.     Процедура удаления выполняется аналогично процедуре добавления.

Консоль Cisco-like и сетевые интерфейсы

Консоль Cisco-like может работать только с теми сетевыми интерфейсами, которые описаны в файле /etc/ifaliases.cf (за исключением интерфейса с именем default, он используется для внутренних нужд Продукта).

Если консоль Cisco-like может изменять параметры (MTU/IP адрес/состояние) для сетевого интерфейса, то чтобы эти изменения применялись после перезагрузки, консоль сохраняет параметры интерфейсов в файл /etc/network/interfaces, а именно в секцию, начало и конец которой помечены маркерами ###netifcfg-begin### и ###netifcfg-end###, например:

root@Hub1-0:~# cat /etc/network/interfaces

############################################################

# CAUTION: lines under special marker: ###netifcfg-*###

# contains autogenerated information. You can add/modify

# lines outside of those markers

############################################################

 

# loopback configuration

auto lo

iface lo inet loopback

 

###netifcfg-begin###

auto eth0

iface eth0 inet static

mtu 1500

address 172.16.100.2

netmask 255.255.255.0

broadcast 172.16.100.255

###netifcfg-end###

Изменять содержимое секции, начало и конец которой помечены маркерами ###netifcfg-begin### и ###netifcfg-end### можно только при добавлении 802.1Q интерфейса (подробнее описано в главе «Настройка и создание виртуальных сетевых интерфейсов»). Во всех остальных случаях изменение этой секции запрещено.

Посмотреть IP-адреса интерфейсов можно с использованием команды cisco-like консоли show running-config. Для настройки адресов требуется сначала войти в глобальный конфигурационный режим консоли, используя команду configure terminal, а затем – в режим interface configuration, задав команду interface type port/number. Данная команда позволяет управлять настройками только зарегистрированных сетевых интерфейсов. Изменения, сделанные в этом режиме, вступают в действие немедленно и сохраняются в загрузочных скриптах ОС. Команды консоли описаны в документе «Cisco-like команды».

Для просмотра IP-адресов интерфейсов в ОС используется команда ip a.

 

Настройка и создание виртуальных сетевых интерфейсов

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

1.    802.1Q (VLAN) интерфейсы;

2.    GRE интерфейсы;

3.    Bonding (port channel) интерфейсы;

4.    Loopback интерфейсы;

5.    Bridge интерфейсы.

Использование интерфейсов, не вошедших в разрешенный список, согласовывается с «С-Терра СиЭсПи».

Далее будут описаны создание и настройка перечисленных интерфейсов.

Подготовка к настройке

Далее, в настройках упоминается директория /etc/network/interfaces.d/. По умолчанию, в «С-Терра Шлюз» версии 4.2 файлы, находящиеся в данной директории, не считываются в качестве файлов конфигураций. Для того, чтобы сделать их считываемыми требуется добавить в файл /etc/network/interfaces перед строками с настройками интерфейсов следующую строку:

source /etc/network/interfaces.d/*

Затем, требуется создать данную директорию:

root@Hub1-0:~# mkdir /etc/network/interfaces.d

802.1Q (VLAN) интерфейсы

Интерфейсы 802.1Q являются виртуальными сетевыми интерфейсами. Они работают в соответствии со стандартом IEEE 802.1Q.

1.    Создание.

802.1Q интерфейсы описываются в файле /etc/network/interfaces в секции, начало и конец которой обозначаются маркерами ###netifcfg-begin### и ###netifcfg-end### соответственно.

Только 802.1Q интерфейсы могут быть описаны внутри данной секции, так как параметры (MTU/IP адрес/состояние) интерфейсов данного типа могут быть сконфигурированы при помощи Cisco-like консоли.

Пример. Создание 802.1Q интерфейса с VLAN ID 4000:

1.1.             Отредактируйте файл /etc/network/interfaces, добавив в него описание для 802.1Q интерфейса с VLAN ID 4000 (выделено жирным), например:

Для корректной работы настроек виртуального интерфейса должен быть задан IP адрес на родительском физическом интерфейсе.

root@Hub1-0:~# vim.tiny /etc/network/interfaces

...

 

###netifcfg-begin###

...

iface eth1 inet static

mtu 1500

address 10.0.0.254

netmask 255.255.255.0

broadcast 10.0.0.255

 

iface eth1.4000 inet static

mtu 1500

address 192.168.2.2

netmask 255.255.255.0

broadcast 192.168.2.255

...

###netifcfg-end###

...

Значение MTU для 802.1Q интерфейса не может быть больше значения MTU соответствующего физического интерфейса.

Внимание: в секции между ###netifcfg-begin### и ###netifcfg-end### не допускается наличие пустых строк, а синтаксис должен соответствовать приведенному выше примеру.

1.2.             Для того, чтобы интерфейс eth1.4000 появился в системе, выполните команду ifup eth1.4000, после чего убедитесь, что данный интерфейс действительно доступен в системе:

root@Hub1-0:~# ifup eth1.4000

root@Hub1-0:~# ip link show eth1.4000

129: eth1.4000@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000

    link/ether 00:50:56:9e:bf:69 brd ff:ff:ff:ff:ff:ff

Вывод консоли свидетельствует о том, что 802.1Q интерфейс eth1.4000 присутствует в системе.

1.3.             Добавьте интерфейс eth1.4000 в файл /etc/ifaliases.cf (выделено жирным):

root@Hub1-0:~# vim.tiny /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")

interface (name="GigabitEthernet0/1" pattern="eth1")

interface (name="GigabitEthernet0/1.4000" pattern="eth1.4000")

interface (name="GigabitEthernet0/2" pattern="eth2")

interface (name="default" pattern="*")

·                        значение параметра name должно иметь следующий шаблон:

<имя физ. интерфейса в нотации Cisco>.<VLAN  ID>

·                        значение параметра pattern должно совпадать с именем 802.1Q интерфейса в нотации Linux.

1.4.             Пересчитайте контрольную сумму файлa /etc/ifaliases.cf:

root@Hub1-0:~# integr_mgr calc -f /etc/ifaliases.cf

 

 

SUCCESS:  Operation was successful.

1.5.             Перезапустите VPN сервис:

root@Hub1-0:~# service vpngate restart

Теперь интерфейс GigabitEthernet0/1.4000 должен быть доступен к заданию политики СКЗИ и правил МЭ посредством консоли Cisco-like и LSP, а, также, к конфигурированию посредством консоли Cisco-like.

GRE интерфейсы

Интерфейсы GRE являются виртуальными сетевыми интерфейсами. Данные интерфейсы работают в соответствии со стандартом RFC 1701.

В сценарии GRE over IPsec при использовании динамических протоколов маршрутизации, например OSPF, в случае сбоя, создаются условия для утечки конфиденциальной информации. Для того, чтобы избежать утечки, необходимо на сетевых интерфейсах из недоверенного сегмента заблокировать при помощи МЭ тот трафик, который должен быть инкапсулирован в GRE (трафик защищаемых подсетей). При невыполнении данной рекомендации утечка произойдет в том случае, если будет нарушена работа динамического протокола маршрутизации и маршрут через GRE интерфейс будет удален. В этом случае, трафик не будет инкапсулирован в GRE и, следовательно, не попадет под фильтр шифрования (который в данном сценарии, как правило, настраивается только на GRE).

1.    Создание.

Точка-точка (point-to-point) GRE интерфейсы описываются в файлах /etc/network/interfaces.d/greN, а точка-многоточка (point-to-multipoint) в файлах /etc/network/interfaces.d/mgreN.

Cisco-like консоль не поддерживает изменение сетевых параметров (MTU/IP адрес/состояние) для GRE интерфейсов.

Примечание. Если настройка интерфейсов выполняется в файлах в директории /etc/network/interfaces.d/, то в файле /etc/network/interfaces должна быть ссылка на указанную директорию вида:

source-directory /etc/network/interfaces.d

 

Пример 1. Создание point-to-point GRE интерфейса:

Использовать в качестве имени GRE интерфейса gre0 запрещено, так как gre0 используется для внутренних нужд драйвера GRE.

1.1.             Отредактируйте файл /etc/network/interfaces.d/gre1, добавив в него описание для point-to-point GRE интерфейса, например:

root@Hub1-0:~# vim.tiny /etc/network/interfaces.d/gre1

auto gre1

iface gre1 inet static

address 10.10.10.1

netmask 255.255.255.0

pre-up ip tunnel add gre1 mode gre local 1.1.1.1 remote 2.2.2.2 ttl 64 tos inherit

pre-up ip link set gre1 mtu 1400

pre-up ip link set gre1 multicast on

post-down ip link del gre1

Если требуется изменить MSS для TCP, необходимо добавить команду (требуется для случаев, когда защищаемые устройства не поддерживают PMTUD или у них заблокирован протокол ICMP):

pre-up iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360

1.2.             Для того, чтобы GRE интерфейс gre1 появился в системе, выполните команду ifup gre1, после чего убедитесь, что данный интерфейс действительно доступен в системе:

root@Hub1-0:~# ifup gre1

root@Hub1-0:~# ip address show gre1

135: gre1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN

    link/gre 1.1.1.1 peer 2.2.2.2

    inet 10.10.10.1/24 brd 10.10.10.255 scope global gre1

root@Hub1-0:~# ip tunnel show gre1

gre1: gre/ip remote 2.2.2.2 local 1.1.1.1 ttl 64 tos inherit nopmtudisc

root@Hub1-0:~# ip link show gre1

135: gre1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc noqueue state UNKNOWN mode DEFAULT

    link/gre 1.1.1.1 peer 2.2.2.2

Вывод консоли свидетельствует о том, что GRE интерфейс gre1 присутствует в системе и сконфигурирован.

1.3.             Добавьте GRE интерфейс gre1 в файл /etc/ifaliases.cf (выделено жирным):

root@Hub1-0:~# cat /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")

interface (name="GigabitEthernet0/1" pattern="eth1")

interface (name="GigabitEthernet0/2" pattern="eth2")

interface (name="Tunnel1" pattern="gre1")

interface (name="default" pattern="*")

·                        значение параметра name должно быть задано в виде TunnelN;

·                        значение параметра pattern должно соответствовать имени GRE интерфейса в нотации Linux.

1.4.             Пересчитайте контрольную сумму файлa /etc/ifaliases.cf:

root@Hub1-0:~# integr_mgr calc -f /etc/ifaliases.cf

 

 

SUCCESS:  Operation was successful.

1.5.             Перезапустите VPN сервис:

root@Hub1-0:~# service vpngate restart

Теперь интерфейс Tunnel1 должен быть доступен к заданию политики СКЗИ и правил МЭ посредством консоли Cisco-like и LSP, а, также, к конфигурированию средствами ОС.

Для сценария IPsec over GRE политика прикрепляется непосредственно на GRE интерфейс. Для сценария GRE over IPsec политика СКЗИ должна быть прикреплена к тому интерфейсу, через который маршрутизируются пакеты с данного GRE интерфейса.

Пример 2. Создание point-to-multipoint GRE интерфейса:

Создание point-to-multipoint GRE интерфейса описано в сценарии «Настройка DMVPN (phase 2) dual cloud с протоколом динамической маршрутизации iBGP».

Bonding (port channel) интерфейсы

Интерфейсы Bonding являются виртуальными сетевыми интерфейсами, которые объединяют несколько физических сетевых интерфейсов для увеличения отказоустойчивости и пропускной способности канала. Данные интерфейсы работают в соответствии со стандартом IEEE 802.3ad (если настроен протокол LACP).

Запрещено объединять в один Bonding интерфейс физические интерфейсы, входящие в разные группы – доверенные и недоверенные (например, запрещено объединять интерфейсы из LAN и WAN сегментов), так как физические интерфейсы, объединенные в Bonding, становятся неконтролируемыми с точки зрения СКЗИ и МЭ. Соответственно, политику СКЗИ и правила МЭ нужно применять на виртуальный Bonding интерфейс, который является логическим объединением физических.

1.    Создание.

Bonding интерфейсы описываются в файлах /etc/network/interfaces.d/bondN.

Примечание. Если настройка интерфейсов выполняется в файлах в директории /etc/network/interfaces.d/, то в файле /etc/network/interfaces должна быть ссылка на указанную директорию вида: 

source-directory /etc/network/interfaces.d 

Cisco-like консоль не поддерживает изменение сетевых параметров (MTU/IP адрес/состояние) для Bonding (port channel) интерфейсов.

Пример 1. Объединение физических интерфейсов eth1/eth2 в bonding интерфейс с протоколом LACP:

Если в файле /etc/network/interfaces или в файлах директории /etc/network/interfaces.d/ присутствуют строки с настройками для интерфейсов eth1 и eth2, то необходимо их удалить (изменять файл /etc/ifaliases.cf относительно данных интерфейсов не нужно).

1.1.             Отредактируйте файл /etc/network/interfaces.d/bond0, добавив в него описание для Bonding (port channel) интерфейса, например:

root@Hub1-0:~# cat /etc/network/interfaces.d/bond0

auto bond0

iface bond0 inet static

address 192.168.2.1

netmask 255.255.255.0

mtu 1500

slaves eth1 eth2

bond_mode 802.3ad

bond_miimon 100

bond_xmit_hash_policy layer2+3

·                        address <IP адрес> – IP адрес логического интерфейса bond0;

·                        netmask <маска>– сетевая маска для IP адрес логического интерфейса;

·                        mtu <значение> – параметр для задания MTU интерфейса; значение по умолчанию – 1500; при изменении MTU интерфейса bond0 меняется MTU и объединяемых интерфейсов eth1 и eth2;

·                        slaves <интерфейсы> – имена физических интерфейсов, объединяемых в агрегированный канал;

·                        bond_mode – настройка, отвечающая за протокол, который обеспечивает работу агрегации каналов (в данном примере – это LACP, который основан на стандарте 802.3ad);

·                        bond_miimon <интервал> – параметр, определяющий интервал времени в миллисекундах. Через заданное время будет происходить проверка физических интерфейсов на их доступность;

·                        bond_xmit_hash_policy – параметр, определяющий уровень (в соответствии с эталонной моделью OSI), на котором будет происходить вычисление хеш-функции для последующей балансировки трафика.

1.2.             Для того, чтобы Bonding интерфейс bond0 появился в системе выполните команду ifup bond0, после чего убедитесь, что данный интерфейс действительно доступен в системе, а интерфейсы eth1/eth2 добавлены в bond0:

root@Hub1-0:~# ifup bond0

root@Hub1-0:~# ip address show bond0

136: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

    link/ether 00:50:56:9e:bf:69 brd ff:ff:ff:ff:ff:ff

    inet 192.168.2.1/24 brd 192.168.2.255 scope global bond0

root@Hub1-0:~# ip address show eth1

3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000

    link/ether 00:50:56:9e:bf:69 brd ff:ff:ff:ff:ff:ff

root@Hub1-0:~# ip address show eth2

4: eth2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000

    link/ether 00:50:56:9e:bf:69 brd ff:ff:ff:ff:ff:ff

Вывод консоли свидетельствует о том, что Bonding интерфейс bond0 присутствует в системе и сконфигурирован, а также интерфейсы eth1/eth2 добавлены в bond0. Расширенную информацию о bond0 можно посмотреть при помощи команды cat /proc/net/bonding/bond0.

1.3.             Добавьте Bonding интерфейс bond0 в файл /etc/ifaliases.cf (выделено жирным):

root@Hub1-0:~# cat /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")

interface (name="GigabitEthernet0/1" pattern="eth1")

interface (name="GigabitEthernet0/2" pattern="eth2")

interface (name="Port-channel1" pattern="bond0")

interface (name="default" pattern="*")

·                        значение параметра name должно быть задано в виде Port-channelN.

·                        значение параметра pattern должно соответствовать имени Bonding интерфейса в нотации Linux.

1.4.             Пересчитайте контрольную сумму файлa /etc/ifaliases.cf:

root@Hub1-0:~# integr_mgr calc -f /etc/ifaliases.cf

 

 

SUCCESS:  Operation was successful.

1.5.             Перезапустите VPN сервис:

root@Hub1-0:~# service vpngate restart

Теперь интерфейс Port-channel1 должен быть доступен к заданию политики СКЗИ и правил МЭ посредством консоли Cisco-like и LSP.

Пример 2. Объединение физических интерфейсов eth1/eth2 в Bonding интерфейс в режиме Active-Passive:

Объединение физических интерфейсов в режиме Active-Passive описано в инструкции «Агрегирование сетевых интерфейсов».

Loopback интерфейсы

Интерфейсы Loopback являются виртуальными сетевыми интерфейсами. Данные интерфейсы применяются для выставления заданного на Loopback интерфейсе IP адреса в качестве IP адреса источника для пакетов протоколов IKE/ESP/OSPF/BGP.

1.    Создание.

Loopback интерфейсы описываются в файлах /etc/network/interfaces.d/loopbackN.

Пример. Создание Loopback интерфейса:

1.1.             Отредактируйте файл /etc/network/interfaces.d/loopback0, добавив в него описание для Loopback интерфейса, например:

root@Hub1-0:~# cat /etc/network/interfaces.d/loopback0

auto loopback0

iface loopback0 inet static

address 1.1.1.1

netmask 255.255.255.255

pre-up ip link add loopback0 type dummy

post-down ip link set dev loopback0 down

Интерфейсы Loopback не предназначены для маршрутизации через них IP трафика.

1.2.             Для того, чтобы Loopback интерфейс loopback0 появился в системе, выполните команду ifup  loopback0, после чего убедитесь, что данный интерфейс действительно доступен в системе:

root@Hub1-0:~# ifup loopback0

root@Hub1-0:~# ip address show loopback0

17: loopback0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN

    link/ether da:7a:19:6e:31:72 brd ff:ff:ff:ff:ff:ff

    inet 1.1.1.1/32 brd 1.1.1.1 scope global loopback0

Вывод консоли свидетельствует о том, что Loopback интерфейс loopback0 присутствует в системе и сконфигурирован.

1.3.             Добавьте Loopback интерфейс loopback0 в файл /etc/ifaliases.cf (выделено жирным):

root@Hub1-0:~# cat /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")

interface (name="GigabitEthernet0/1" pattern="eth1")

interface (name="GigabitEthernet0/2" pattern="eth2")

interface (name="Loopback0" pattern="loopback0")

interface (name="default" pattern="*")

·                        значение параметра name должно быть задано в виде LoopbackN;

·                        значение параметра pattern должно соответствовать имени Loopback интерфейса в нотации Linux.

1.4.             Пересчитайте контрольную сумму файлa /etc/ifaliases.cf:

root@Hub1-0:~# integr_mgr calc -f /etc/ifaliases.cf

 

 

SUCCESS:  Operation was successful.

1.5.             Перезапустите VPN сервис:

root@Hub1-0:~# service vpngate restart

Теперь интерфейс Loopback0 должен быть доступен в консоли Cisco-like, но задавать на нем политику СКЗИ и правил МЭ посредством как консоли Cisco-like, так и LSP не имеет никакого смысла, так как IP пакеты через интерфейсы этого типа не могут маршрутизироваться. Конфигурирование осуществляется средствами ОС.

Bridge интерфейсы

Интерфейсы Bridge являются виртуальными сетевыми интерфейсами, которые объединяют несколько физических сетевых интерфейсов для выполнения функций коммутатора (физические интерфейсы, добавленные в коммутатор, становятся портами коммутатора).

Запрещено добавлять в один Bridge интерфейс физические интерфейсы, входящие в разные группы – доверенные и недоверенные (например, запрещено одновременно добавлять интерфейсы из LAN и WAN сегментов), так как физические интерфейсы, добавленные в Bridge становятся неконтролируемыми с точки зрения СКЗИ и МЭ. Соответственно, политику СКЗИ и правила МЭ нужно применять на виртуальный Bridge интерфейс, который является логическим объединением физических.

1.    Создание.

Bridge интерфейсы описываются в файлах /etc/network/interfaces.d/bridgeN.

Cisco-like консоль не поддерживает изменение сетевых параметров (MTU/IP адрес/состояние) для Bridge интерфейсов.

Пример. Создание программного коммутатора bridge0 на основе физических интерфейсов eth1/eth2:

Если в файле /etc/network/interfaces или в файлах директории /etc/network/interfaces.d/ присутствуют строки с настройками для интерфейсов eth1 и eth2, то необходимо их удалить (изменять файл /etc/ifaliases.cf относительно данных интерфейсов не нужно).

1.1.             Отредактируйте файл /etc/network/interfaces.d/bridge0, добавив в него описание для Bridge интерфейса, например:

root@Hub1-0:~# cat /etc/network/interfaces.d/bridge0

auto bridge0

iface bridge0 inet static

address 192.168.1.2

netmask 255.255.255.0

mtu 1500

bridge_ports eth1 eth2

pre-up ip link set dev eth1 mtu 1500

pre-up ip link set dev eth2 mtu 1500

·                        address <IP адрес> – IP адрес логического интерфейса bridge0;

·                        netmask <маска>– сетевая маска для IP адрес логического интерфейса bridge0;

·                        mtu <значение> – параметр для задания MTU интерфейса bridge0; значение по умолчанию – 1500; при изменении MTU интерфейса bridge0 значение MTU физических интерфейсов eth1 и eth2 не меняется;

·                        bridge_ports<интерфейсы> – имена физических интерфейсов, входящих в коммутатор;

·                        «pre-up ip link set dev ethN mtu <значение>» - выставление MTU для физических интерфейсов.

1.2.             Для того, чтобы Bridge интерфейс bridge0 появился в системе, выполните команду ifup bridge0, после чего убедитесь, что данный интерфейс действительно доступен в системе и он выступает коммутатором, а интерфейсы eth1/eth2 добавлены в bridge0:

root@Hub1-0:~# ifup bridge0

root@Hub1-0:~# ip address show bridge0

26: bridge0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

    link/ether 00:50:56:9e:bf:69 brd ff:ff:ff:ff:ff:ff

    inet 192.168.1.2/24 brd 192.168.1.255 scope global bridge0

root@Hub1-0:~# brctl show bridge0

bridge name     bridge id               STP enabled     interfaces

bridge0         8000.0050569ebf69       no              eth1

                                                        eth2

root@Hub1-0:~# ip address show eth1

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge0 state UNKNOWN qlen 1000

    link/ether 00:50:56:9e:bf:69 brd ff:ff:ff:ff:ff:ff

root@Hub1-0:~# ip address show eth2

4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge0 state UNKNOWN qlen 1000

    link/ether 00:50:56:9e:f5:ec brd ff:ff:ff:ff:ff:ff

Вывод консоли свидетельствует о том, что Bridge интерфейс bridge0 присутствует в системе и сконфигурирован, а также интерфейсы eth1/eth2 добавлены в bridge0. Расширенную информацию о bridge0 можно посмотреть при помощи утилиты brctl.

1.3.             Добавьте Bridge интерфейс bridge0 в файл /etc/ifaliases.cf (выделено жирным):

root@Hub1-0:~# cat /etc/ifaliases.cf

interface (name="GigabitEthernet0/0" pattern="eth0")

interface (name="GigabitEthernet0/1" pattern="eth1")

interface (name="GigabitEthernet0/2" pattern="eth2")

interface (name="Bridge0" pattern="bridge0")

interface (name="default" pattern="*")

·                        значение параметра name должно быть задано в виде BridgeN.

·                        значение параметра pattern должно соответствовать имени Bridge интерфейса в нотации Linux.

1.4.             Пересчитайте контрольную сумму файлa /etc/ifaliases.cf:

root@Hub1-0:~# integr_mgr calc -f /etc/ifaliases.cf

 

 

SUCCESS:  Operation was successful.

1.5.             Перезапустите VPN сервис:

root@Hub1-0:~# service vpngate restart

Теперь интерфейс Bridge0 должен быть доступен к заданию политики СКЗИ и правил МЭ посредством консоли Cisco-like и LSP, а также к конфигурированию средствами ОС.


 

Решение проблем при использовании GRE и IPsec

В случаях инкапсуляции поступающих пакетов в GRE, а, затем, в IPsec, пользователь может столкнуться с проблемой передачи пакетов большого размера (длина пакета значительно увеличивается при добавлении GRE и IPsec заголовков). По умолчанию, значение MTU на GRE-интерфейсе – 1400 байт. Значение MTU на физических интерфейсах – 1500 байт.

Может сложиться ситуация, при которой:

·                        Оконечные устройства генерируют пакеты, в которых выставлен флаг DF (do not fragmentation) в IP заголовке;

·                        Размер пакета больше, чем MTU GRE-интерфейса;

·                        ICMP-сообщение протокола PMTUD "Destination host Unreachable. Needed Fragment and DF set." по каким-то причинам до оконечного устройства не доходит.

В таком случае пакеты будут отбрасываться Шлюзом.

Существует несколько вариантов решения данной проблемы:

·         Снятие DF-флага с IP пакетов на С-Терра Шлюз;

·         Применение правил iptables, которые позволят изменять значение MSS в TCP SYN пакетах для контроля максимального размера пакетов в соединении.

Процедура снятия DF-флага с поступающих IP пакетов

Процедуры, описанные ниже, должны быть применены на обоих устройствах «С-Терра Шлюз».

Для того, чтобы осуществить процесс снятия DF-флага на поступающих пакетах при помощи утилиты tc (traffic control), необходимо:

1.    Создать файл с названием tc_rule_for_clear_df в директории /etc/network/if-pre-up.d/ (данная директория выбрана с целью применения настроек утилиты tc при поднятии сетевого интерфейса):

root@Hub1-0:~# vim.tiny /etc/network/if-pre-up.d/tc_rule_for_clear_df

2.    Скопировать содержимое ниже в этот файл:

#!/bin/bash

 

# This script, using the "tc" utility, allows you to clear the DF flag from incoming IP packets.

 

INTERFACE="eth1"

 

if [[ "$IFACE" = $INTERFACE ]]; then

        tc qdisc add dev $INTERFACE ingress 2>&1 1>/dev/null

        tc filter del dev $INTERFACE parent ffff: handle 800::1 pref 1 protocol ip u32 2>&1 1>/dev/null

        tc filter add dev $INTERFACE parent ffff: pref 1 protocol ip handle 800::1 u32 match ip df action pedit munge offset 4 u32 set 0x0 retain 0x00004000 pipe action csum ip || echo "ERROR: Can not add rule to clear DF bit."

fi

2.1.            Изменить значение переменной “INTERFACE” в зависимости от того, куда будут приходить пакеты с DF-флагом (обычно, это LAN-интерфейс);

2.2.            Дать файлу право на исполнение:

root@Hub1-0:~# chmod u+x /etc/network/if-pre-up.d/tc_rule_for_clear_df

 

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

root@Hub1-0:~# ifdown eth1; ifup eth1

2.4.            Убедиться в том, что правила применились:

root@Hub1-0:~# tc -s filter show parent ffff: dev eth1

filter protocol ip pref 1 u32

filter protocol ip pref 1 u32 fh 800: ht divisor 1

filter protocol ip pref 1 u32 fh 800::1 order 1 key ht 800 bkt 0 terminal flowid ???  (rule hit 256156 success 256156)

  match 00004000/00004000 at 4 (success 256156 )

        action order 1:  pedit action pipe keys 1

         index 2 ref 1 bind 1 installed 12173 sec used 11948 sec

         key #0  at 4: val 00000000 mask ffffbfff

        Action statistics:

        Sent 384226144 bytes 256156 pkt (dropped 0, overlimits 0 requeues 0)

        backlog 0b 0p requeues 0

 

        action order 2: csum (iph) action pass

        index 1 ref 1 bind 1 installed 12173 sec used 11948 sec

        Action statistics:

        Sent 384226144 bytes 256156 pkt (dropped 0, overlimits 0 requeues 0)

        backlog 0b 0p requeues 0

Данный скрипт будет выполняться при запуске/перезапуске Шлюза и при переходе назначенного в скрипте сетевого интерфейса в состояние “Up”.

Процедура ограничения MSS при передаче пакетов

Данная процедура применяется в том случае, если необходимо передавать TCP-пакеты большого размера.

Утилита iptables позволяет изменить значение MSS в генерируемых оконечными устройствами пакетах, образуя TCP-пакеты такого размера, при котором MTU трассы позволяет передавать их без фрагментации. Для того, чтобы выставить нужное значение MSS, необходимо воспользоваться командой:

root@Hub1-0:~# iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360

В данном случае, оконечными устройствами будут генерироваться пакеты, успешно проходящие через GRE-интерфейс (MTU которого – 1400) и через WAN-интерфейс (MTU которого – 1500).

Для того, чтобы сохранить добавленное правило, необходимо обратиться к инструкции «Использование утилиты iptables», которую можно получить в кабинете Партнёра (https://www.s-terra.ru/auth/).