Linux теперь поддерживает облегченные туннели https://lwn.net/Articles/650778/ что означает туннель, настроенный на маршрутах (поэтому нет необходимости настраивать один интерфейс по туннелю).
Но, к сожалению, мне не удалось найти по ним много документации. В серии патчей, указанной выше, синтаксис ip route add 40.1.1.1/32 encap vxlan id 10 dst 50.1.1.2 dev vxlan0
.
Но на моем текущем iproute-5.2.0
, здесь нет encap vxlan
, только encap ip id ...
(с mpls, bpf, seg6 ...). Похоже, что тип инкапсуляции определяется автоматически в зависимости от устройства. Поэтому вместо того, чтобы делать
$ ip link add dev vxlan1 type vxlan id 30001 remote 20.1.1.2 dstport 4789
$ ip link set dev vxlan1 up
$ ip addr add 20.1.1.1/24 dev vxlan1
$ ip route add 10.1.1.1 dev vxlan1
мы можем сделать вместо этого
$ ip link add vxlan1 type vxlan dstport 4789 external
$ ip link set dev vxlan1 up
$ ip addr add 20.1.1.1/24 dev vxlan1
$ ip route add 10.1.1.1 encap ip id 30001 dst 20.1.1.2 dev vxlan1
Это дает следующий маршрут:
10.1.1.1 encap ip id 30001 src 0.0.0.0 dst 20.1.1.2 ttl 0 tos 0 dev vxlan1 scope link
(Я не уверен, что src 0.0.0.0
означает в данном случае.)
Таким образом, преимущество в том, что мы можем настроить один интерфейс vxlan и настроить разные маршруты с разными идентификаторами vxlan и enpoints (но, к сожалению, нет способа изменить порт dstport по маршруту).
Но что я не совсем понимаю, как это должно работать для туннелей ipip и gre / gretap. Единственная документация, которую мне удалось найти, находится на китайском языке. https://linux.cn/article-10672-1.html где они используют эти команды для нажатия клавиш:
$ ip l add dev tun type gretap external
$ ifconfig tun 1.1.1.7/24 up
$ ip r r 2.2.2.11 via 1.1.1.11 dev tun encap ip id 1000 dst 172.168.0.1 key
Итак, я могу предположить, что «удаленный ADDR» - это 172.168.0.1, но какой в этом случае будет «локальный ADDR» облегченного gre-туннеля маршрута? Что это ip id
значит для туннеля gre или ipip?
Gre может иметь ключ, а патчи для добавления key
ключевое слово для ip route encap
здесь https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/commit/?id=0fb4d21956f4a9af225594a46857ccf29bd747bc но это только установка флага, нет аргумента для key
ключевое слово здесь.
Также я протестировал и могу добавить маршрут «encap ip» к стандартному интерфейсу Ethernet. Что делает в этом случае инкапсуляция, как она угадывает, какой тип инкапсуляции использовать?
(Я не уверен, что в данном случае означает src 0.0.0.0.)
В сети обычно это обозначение служит неопределенным / неограниченным параметром.
Он используется при привязке прослушивающих сокетов на уровне хоста, без определенных ограничений сетевого интерфейса.
Он также используется для default route
числовое представление.
Итак, вернемся к этому самому случаю, я на 99% уверен, что это будет означать использование таблицы маршрутов узла для поиска подходящего исходного адреса для локальной стороны инкапсуляции туннеля, поскольку иное явно не указано.
Итак, я могу предположить, что «удаленный ADDR» - это 172.168.0.1, но какой в этом случае будет «локальный ADDR» облегченного gre-туннеля маршрута?
Должно быть так же 0.0.0.0
с тем же значением, что и объяснено выше.
Что означает ip id для туннеля gre или ipip?
Просто различимый идентификатор туннеля, который будет указан в информации о маршруте в LWTUNNEL_IP_ID
и позже используется для поиска туннелей.
в упомянутой выше серии патчей синтаксис следующий: ip route add 40.1.1.1/32 encap vxlan id 10 dst 50.1.1.2 dev vxlan0.
…
Но на моем текущем iproute-5.2.0 нет encap vxlan
Серия патчей датирована Fri, 10 Jul 2015 16:19:02 +0200
, тем временем 5.2.0
совершить
tag v5.2.0
Tagger: Stephen Hemminger <stephen@networkplumber.org>
Date: Mon Jul 8 11:11:36 2019 -0700
ясно говорит нам, что это 2019 год. 4 лет прошли. Я думаю, это объясняет наблюдаемое вами противоречие.