Примечание: Процедуры, описанные ниже, должны быть применены на обоих устройствах «С-Терра Шлюз».
Для того, чтобы осуществить процесс снятия 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”.