我正在设置一台笔记本电脑用于软件演示。该机器有 8GB RAM、Core i7 Intel CPU、128GB SSD,并运行 Ubuntu 12.04 LTS 64 位。该笔记本电脑用作 KVM 主机并运行几个 KVM 客户机。
所有此类客户机都使用virbr0
默认桥接器。为了使它们能够使用多播相互通信,我在主机中添加了以下内容/etc/sysctl.conf
,如下所示
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
随后man sysctl(8)
,我发布了以下内容:
sudo /sbin/sysctl -p /etc/sysctl.conf
我的理解是,这应该会使这些设置在重新启动后保持不变。我对其进行了测试,并惊讶地发现了以下内容:
root@sdn1 :/proc/sys/net/bridge# more *tables
::::::::::::::
bridge-nf-call-arptables
::::::::::::::
1
::::::::::::::
bridge-nf-call-ip6tables
::::::::::::::
1
::::::::::::::
bridge-nf-call-iptables
::::::::::::::
1
所有默认设置都将恢复!
是的。我可以使用一些笨拙的“解决方法”,例如将 放入/sbin/sysctl -p /etc/sysctl.conf
主机/etc/rc.local
,但我宁愿“正确执行”。我是否误解了手册页,或者我是否错过了什么?
谢谢任何提示。
-- 扎克
答案1
偶然间,我找到了一些额外的信息。即使是我最初想到的“笨拙的解决方法”,也是Debain 维基,它在我的 Ubuntu 12.04 机器上不起作用!唉 :-(
请参见一些 sysctl 在启动时被忽略- 有人在 2006 年报告过这个错误,但至今仍未修复!
注意设置桥接相关的内核变量也在上面第二个链接中被引用。
在我看来,这是一个相当令人失望的情况。
-- 扎克
答案2
在我的 Debian Jessie 安装中仍然遇到此问题。我编写了下面的 systemd 脚本作为解决方法。请注意,它将在读取 sysctl 配置后执行,但这对我来说不是问题。
[Unit]
Description=Bridge configuration
After=network.target
[Service]
WorkingDirectory=/root
User=root
Type=oneshot
ExecStart=/bin/bash -c "/bin/echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables"
ExecStart=/bin/bash -c "/bin/echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables"
[Install]
WantedBy=multi-user.target
不要忘记用 来启用它systemctl enable bridge-config.service
。