当我尝试在 Linux 系统上添加 IPv6 的 IP 规则时,出现错误:
$ ip -6 rule add fwmark 0xfab lookup 0xf
RTNETLINK answers: Address family not supported by protocol
我查看了IP规则代码;它向内核发出一条 netlink 消息。可能我需要加载一些模块,但我不知道是哪个。我需要做什么来解决这个问题?
我正在使用从内核源代码构建的 linux 2.6.37.3
解决方案:默认情况下,linux 版本不支持 IPv6 的多个路由表。您需要启用 CONFIG_IPV6_MULTIPLE_TABLES 才能支持多个 IPv6 路由表。
答案1
IPv6 功能可通过 ipv6 内核模块提供给系统。要检查该模块当前是否已加载到您的系统中,请以 root 身份发出以下命令:
lsmod | grep ipv6
如果您在其输出中看到 ipv6,则表明该模块已加载。
检查 /etc/modprobe.conf 并查看 ipv6 是否已禁用。
alias ipv6 off
options ipv6 disable=1
它应该是
alias net-pf-10 ipv6
进一步检查接口特定的配置文件:(如果您使用的是 RedHat 风格的发行版,如 Fedora、CentOS 等)
在/etc/sysconfig/network-scripts/ifcfg-eth0
IPV6INIT=yes
IPV6_AUTOCONF=yes
在/etc/sysconfig/network
文件中,如果存在:
NETWORKING_IPV6=yes
然后重新启动network
服务并重新启动系统以干净地加载ipv6内核模块。
答案2
我不认为lookup
这是任何对象的有效选项ip
。规则的操作包括table
、nat
、prohibit
recject
或unreachable
。realms
从你的命令形式来看我预计你想要的table
。尝试
ip -6 rule add fwmark 0xfab table 0xf