Linux gretap - net/ipv4/ip_gre.c - как установить значение ключа->tun_flags

Я пытаюсь перебросить через туннель gretap между двумя хостами Linux (Centos 6) несколько клонированных IP-пакетов, чтобы передать устройство в стиле IDS.

Учитывая, что обнаружение PMTU не будет работать на клонированных pkts, которые я пытаюсь перенести, я должен найти способ очистить бит DF в заголовке GRE pkt, чтобы он мог быть фрагментирован отправляющим хостом и повторно собран на другом конце. В противном случае, после добавления заголовка GRE будут сброшены большие pkts (... около отметки 1500 байт).

Я нашел рабочее решение, которое включает в себя настройку плагина iptables для очистки указанного бита DF, но это решение слишком запутанное. Смотрите здесь: http://backreference.org/2013/07/23/gre-bridging-ipsec-and-nfqueue/.

Я взглянул на исходный код net/ipv4/ip_gre.c, и там я нашел эти интересные строки (около строки 432 отсюда: https://github.com/torvalds/linux/blob/master/net/ipv4/ip_gre.c):

df = key->tun_flags & TUNNEL_DONT_FRAGMENT ?  htons(IP_DF) : 0;

iptunnel_xmit(skb->sk, rt, skb, fl.saddr, key->u.ipv4.dst, IPPROTO_GRE,
          key->tos, key->ttl, df, false);
return;

В частности, кажется, что первая строка позволяет некоторой логике условно установить бит DF на исходящем GRE pkt. Если я правильно понимаю код, это позволит pkts покинуть мой Linux-хост без установленного бита DF, что, в свою очередь, должно позволить фрагментацию.

Я пытался выяснить, как я мог бы установить значение key->tun_flags, чтобы условный оператор приводил к "0", но я не смог найти ни одного CLU, который позволил бы мне сделать это (ip li, ifconfig, udevadm и т.д...).

Кто-нибудь знает, как можно манипулировать значением key-> tun_flags?

1 ответ

"человек 8 ip-туннель"

                ignore-df
                 enable IPv4 DF suppression on this tunnel.
                 Normally datagrams that exceed the MTU will be
                 fragmented; the presence of the DF flag inhibits
                 this, resulting instead in an ICMP Unreachable
                 (Fragmentation Required) message.  Enabling this
                 attribute causes the DF flag to be ignored.

Например, «ip link add gretap1 type gretap remote xxx.yyy.zzz.ppp ignore-df nopmtudisc» удалит флаг DF. Обратите внимание, что вы также должны установить опцию «nopmtudisk».

Другие вопросы по тегам