Linux облегченные туннели
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...). Похоже, что тип encap определяется автоматически в зависимости от устройства. Так что вместо того, чтобы делать
$ 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 (но, к сожалению, нет способа изменить dstport по маршруту).
Но я не совсем понимаю, как это должно работать для туннелей ipip и gre / gretap. Единственная документация, которую мне удалось найти, находится на китайском языке https://linux.cn/article-10672-1.html где они используют эти команды для gre-tap:
$ 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. Что делает в этом случае encap, как он угадывает, какой тип инкапсуляции использовать?
2 ответа
(Я не уверен, что означает в этом случае src 0.0.0.0.)
В сети обычно эта нотация служит неопределенным / неограниченным параметром.
Используется при привязке слушающих сокетов по всему хосту без особых ограничений сетевого интерфейса.
Это также используется для default route
численное представление.
Итак, возвращаясь к этому самому случаю, я на 99% уверен, что это будет означать использование таблицы маршрутов узла для поиска подходящего адреса источника для локальной стороны инкапсуляции туннеля, поскольку в противном случае это явно не указано.
Таким образом, я могу догадаться, что "удаленный ADDR" - это 172.168.0.1, но каким будет "локальный ADDR" облегченного gre-туннеля в этом случае?
Должно быть очень же 0.0.0.0
с тем же значением, как описано выше.
Что ip id означает для gre или ipip tunnel?
Просто различимый идентификатор туннеля, который будет заполнен в информации о маршруте под 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 года прошло. Я думаю, что это объясняет противоречие, которое вы видите.