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 id 和 enpoint 配置不同的路由(但不幸的是,似乎没有办法通过路由更改 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
因此我可以猜测是remote ADDR
,但是在这种情况下,路由轻量级 gre 隧道的172.168.0.1
是什么? gre 或 ipip 隧道是什么意思?local ADDR
ip id
gre 可以有一个密钥,并且将key
关键字添加到的补丁ip route encap
是这里
但是这只是设置了一个标志,这里没有key
关键字的参数。
我还测试了,我可以向标准以太网接口添加“encap ip”路由。在这种情况下,encap 会做什么?它如何猜测要使用哪种封装?
答案1
(在这种情况下我不确定 src 0.0.0.0 是什么意思。)
在网络中,这种符号通常用作未指定/不受限制的参数。
它用于在主机范围内绑定监听套接字,不受特定网络接口限制。
它也用于default route
数字表示。
所以回到这个案例,我 99% 确定这意味着使用节点的路由表来查找适合隧道本地封装的源地址,因为没有明确给出。
因此我可以猜测“远程 ADDR”是 172.168.0.1,但是在这种情况下路由轻量级 gre 隧道的“本地 ADDR”是什么?
0.0.0.0
应该与上面解释的含义完全相同。
ip id 对于 gre 或 ipip 隧道意味着什么?
仅可区分的隧道 ID,它将被填入下面的路线信息中LWTUNNEL_IP_ID
,然后用于隧道查找。
答案2
在上面链接的补丁系列中,语法是 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 <[email protected]>
Date: Mon Jul 8 11:11:36 2019 -0700
明确地告诉我们现在是 2019 年。—4年已经过去了。我认为这解释了你所看到的矛盾。