Процедура снятия 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 0x00 retain 0x00004000 pipe action csum ip || echo "ERROR: Can not add rule to clear DF bit."

fi

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

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

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

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

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

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

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”.