我正在尝试在 mininet 上使用 MPLS 我能够安装 iproute2 并且当我尝试这样的事情时
ip route add 192.168.10.187/32 encap mpls 101 via 10.10.0.187
我得到错误:
Error: either "to" is duplicate, or "encap" is a garbage.
还有当我尝试这样的事情时
ip -f mpls route add 101 dev lo
我得到错误:
RTNETLINK answers: Operation not supported
我检查了我的配置文件并设置了所有这些,但没有成功:
CONFIG_NETFILTER_NETLINK=y
CONFIG_NETFILTER_NETLINK_QUEUE=y
CONFIG_NETFILTER_NETLINK_LOG=y
CONFIG_NF_CT_NETLINK=y
CONFIG_SCSI_NETLINK=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_SCHED=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
我有 linux 镜像 4.4.0-97-generic,任何帮助将不胜感激。
更新
阅读之后我发现我缺少目录/proc/sys/net/mpls
更新 2
在以某种方式进行更多挖掘之后,不要问我如何,我终于安装了丢失的模块,现在我有这个错误:
RTNETLINK answers: Invalid argument
更新 3
我仍然遇到更新 2 中所述的先前问题,但我注意到当我尝试添加新路由时,我没有收到任何投诉,它实际上显示在路由表上。但是当我这样做时:
ip -f mpls route show
没有结果
我认为你必须先加载内核 mpls 模块,
modprobe mpls_router
modprobe mpls_iptunnel
然后,允许网络接口(interface)处理 mpls 标记的数据包(默认禁用)
echo 1 > /proc/sys/net/mpls/conf/IFNAME/input
(其中 IFNAME 是将发送/接收 mpls 数据包的网络接口(interface)的名称)
最后,指定内核应该为标签分配的条目数(默认为 0)
echo 2048 > /proc/sys/net/mpls/platform_labels
否则 iproute2 会很乐意处理你的路由,但内核不会知道它们中的任何一个(我也曾被它咬过)。
引用资料:
我是一名优秀的程序员,十分优秀!