Я пытаюсь понять, что именно происходит, когда я создаю туннель GRE.
Моя сеть выглядит так (-> означает прямое подключение):
Я выполнил следующие команды на маршрутизаторе B:
ip tunnel add Tunnel5 mode gre local 10.0.2.1 remote 10.0.3.2
ifconfig Tunnel5 192.168.33.2 netmask 255.255.255.0 up
ip route add 10.0.4.2/32 via 192.168.33.3
со следующей информацией о подключении:
conn routerD_eth0
type=tunnel
authby=secret
left=10.0.2.1
leftsubnet=10.0.2.1/32
right=10.0.3.2
rightsubnet=10.0.3.2/32
auto=start
И эквивалент на маршрутизаторе D:
ip tunnel add Tunnel5 mode gre local 10.0.3.2 remote 10.0.2.1
ifconfig Tunnel5 192.168.33.3 netmask 255.255.255.0 up
ip route add 10.0.1.1/32 via 192.168.33.2
с участием
conn routerb_eth1
type=tunnel
authby=secret
left=10.0.3.2
leftsubnet=10.0.3.2/32
right=10.0.2.1
rightsubnet=10.0.2.1/32
auto=start
Вот что я могу наблюдать на маршрутизаторе A, если я пингую с компьютера A на компьютер B:
Трафик входит в eth0 с пунктом назначения 10.0.4.2.
Трафик направляется на новый интерфейс Tunnel5: вызвано добавленным мной правилом маршрутизации (ip route add 10.0.4.2/32 через 192.168.33.3)
??? Магия ??? Каким-то образом трафик инкапсулируется и направляется обратно к маршрутизатору с новым адресом назначения 10.0.3.2.
Обычные правила маршрутизации OSPF заставляют трафик идти от eth1 к месту назначения.
Что происходит на шаге 3?
Дополнительная информация
Некоторые команды и их выходные данные выполняются на маршрутизаторе A:
$ ip tunnel show
Tunnel5: gre/ip remote 10.0.3.2 local 10.0.2.1
$ setkey -DP
10.0.3.2[any] 10.0.2.1[any] 255
...
/esp/tunnel/10.0.3.2-10.0.2.1/unique:3
...
10.0.2.1[any] 10.0.3.2[any] 255
...
/esp/tunnel/10.0.2.1-10.0.3.2/unique:3
...
Теория
Маршрутизатор просто знает, основываясь на информации в «ip tunnel show», что трафик, направляемый в Tunnel5, должен быть инкапсулирован с новыми адресами источника и назначения.
Инкапсулированный пакет следует маршрутизировать как обычно. В этом случае политики IPSec сопоставляют и шифруют пакет, сохраняя адреса источника и назначения.
Затем пакет направляется на маршрутизатор C на основе таблицы маршрутизации.
Просто предположение.
Когда пакет входит в маршрутизатор, он направляется через туннельный интерфейс из-за вашего статического маршрута. маршрутизатор инкапсулирует пакет в пакет GRE с пунктом назначения 10.0.3.2. Затем маршрутизатор направляет этот пакет в соответствии с таблицей маршрутизации (т. Е. Из eth 1). Когда он попадает в маршрутизатор D, пакет декапсулируется и затем маршрутизируется в обычном режиме.