Создание GRE туннеля между Juniper и Freebsd

Реализован механизм контроля пакетов :

— Добавляет 24 байта к заголовку пакета (заголовки самого GRE тунеля )
— Может переносить любой протакол 3 го уровня
— Может переносить мультикастовый трафик
— Дополнительные опции могут разширить заголовок пакета до 12 байт (в стандарте 4 байта)

И так для начало поднимим туннель на Freebsd :

ifconfig gre0 inet 21.21.22.2 21.21.22.26 netmask 255.255.255.252 tunnel 21.21.22.254 21.21.22.190
ifconfig gre0 tunnel 21.21.22.254 21.21.22.190
ifconfig gre0 up

и далее в /etc/rc.conf добавляем :

ifconfig_gre0=inet 21.21.22.2 21.21.22.26 netmask 255.255.255.252 tunnel 21.21.22.254 21.21.22.190

Все это делалось на Freebsd 8 , поэтому этого достаточно для создания тоннеля , если у вас система менее Freebsd 7 , вам еще необходимо поднянуть модуль gre

find / -name if_gre.ko

/usr/obj/usr/src/sys/GENERIC/modules/usr/src/sys/modules/if_gre/if_gre.ko
/boot/kernel/if_gre.ko
/boot/kernel.old/if_gre.ko

вот что он нашел , далее

kldload /boot/kernel.old/if_gre.ko

и все……. проверяем  подтянулся или нет :

# kldstat

kernel

if_vlan.ko
ng_socket.ko
netgraph.ko
ng_mppc.ko
rc4.ko
ng_l2tp.ko
&nbsp;8&nbsp;&nbsp;&nbsp; 1 0xcaaf1000 5000&nbsp;&nbsp;&nbsp;&nbsp; ng_ksocket.ko<br />
&nbsp;9&nbsp;&nbsp;&nbsp; 1 0xcb289000 3000&nbsp;&nbsp;&nbsp;&nbsp; ng_tee.ko<br />
10&nbsp;&nbsp;&nbsp; 1 0xcb28d000 4000&nbsp;&nbsp;&nbsp;&nbsp; ng_iface.ko<br />
11&nbsp;&nbsp;&nbsp; 1 0xcb2ba000 7000&nbsp;&nbsp;&nbsp;&nbsp; ng_ppp.ko<br />
12&nbsp;&nbsp;&nbsp; 1 0xcb299000 4000&nbsp;&nbsp;&nbsp;&nbsp; ng_vjc.ko<br />
13&nbsp;&nbsp;&nbsp; 1 0xcb2a2000 3000&nbsp;&nbsp;&nbsp;&nbsp; ng_tcpmss.ko<br />
if_gre.ko

и теперь если выполнить ifconfig можно увидеть след :
UP,POINTOPOINT,RUNNING,LINK0,MULTICAST metric 0 mtu 1476

tunnel inet 21.21.22.254 — 21.21.22.190
inet 21.21.22.25 ; 21.21.22.26 netmask 0xfffffffc

Теперь поднимаем GRE  туннель со стороны Juniper :

{
gr-0/0/0
unit 0
tunnel
source 21.21.22.190
destination 21.21.22.254
}
family inet
address 21.21.22.26/30>
}
}
}

flow  tcp-mss {
all-tcp
mss 1280
}
}
}

DF-bit — в IP пакетах встречается данный флаг , который говорит оборудованию — не производить фрагментацию , а так как при инкапсуляции пакета происходит его фрагрементация по MTU&nbsp; , нам необходимо или убирать в IP пакетах флаг DF-bit или производить принудительную фрагментацию .На маршрутизаторах для решения данной проблемы есть опция path-mtu-discovery  она определяет TCP MSS (максимальный размер пакета на всем участке сети )Вот собственно и все , работает уже какой&nbsp; месяц — как часы . Немного отпишу о производительности . Принцип тунелей таков , что каждый пакет&nbsp; , который будет проходить через интерфейс тунеля будет принудительно запаковыватся , фрагметироватся (разбиватся) . По большому счету GRE в себе может инкапсулировать что угодно и грать это по IP сети . При этом GRE инкапсуливует пакет полностью