如何在 Centos 7 上为 KVM 路由桥配置防火墙

gul*_*chi 1 networking firewall bridge centos kvm

我想设置多个虚拟机来运行 webserver、postfix 等。

我有一些来自 ISP 的公共 IP 地址。我的主机系统运行 Centos 7,我的虚拟机运行 Debian Wheezy。由于我的主机根据 MA​​C 地址限制对交换机的访问,因此我不能使用“完整”网桥。

相反,我配置了一个路由桥(见 http://wiki.hetzner.de/index.php/Proxmox_VE

我已成功设置两台机器,但如果主机上的防火墙处于活动状态,则虚拟机无法连接到 Internet。如果我的防火墙处于活动状态,我可以从我的虚拟机 ping 互联网上的机器,但没有别的。

如何在 Centos 7 下配置我的防火墙以让 br0 上的虚拟机访问互联网?

任何帮助表示赞赏。非常感谢。

网络配置主机

主机:/etc/sysconfig/network-scripts/ifcfg-enp2s0

 BOOTPROTO=none
 DEVICE=enp2s0
 ONBOOT=yes
 IPADDR=A.A.A.42
 NETMASK=255.255.255.255
 SCOPE="peer A.A.A.1"
Run Code Online (Sandbox Code Playgroud)

主机:/etc/sysconfig/network-scripts/route-enp2s0

 ADDRESS0=0.0.0.0
 NETMASK0=0.0.0.0
 GATEWAY0=A.A.A.1
Run Code Online (Sandbox Code Playgroud)

主机:/etc/sysconfig/network-scripts/ifcfg-br0

 DEVICE=br0
 TYPE="Bridge"
 ONBOOT=yes
 BOOTPROTO=none
 IPADDR=A.A.A.42
 NETMASK=255.255.255.255
 STP=off
 DELAY=0
Run Code Online (Sandbox Code Playgroud)

主机:/etc/sysconfig/network-scripts/route-br0

 ADDRESS0=B.B.B.160
 NETMASK0=255.255.255.255
Run Code Online (Sandbox Code Playgroud)

网络配置虚拟机

虚拟机:/etc/network/interfaces

 auto lo
 iface lo inet loopback
 allow-hotplug eth0
 iface eth0 inet static
         address B.B.B.160
         netmask 255.255.255.255
         pointopoint A.A.A.42
         gateway A.A.A.42
Run Code Online (Sandbox Code Playgroud)

防火墙设置 主机 firewall-cmd --list-all

public (default, active)
  interfaces: br0 enp2s0
  sources: 
  services: dhcpv6-client ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 
Run Code Online (Sandbox Code Playgroud)

非常感谢您提前。

小智 5

要实现这一目标,您有两个选择。

Option1 :(从安全角度推荐这种方法)

在配置的网桥上禁用 netfilter

# vi /etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 0

net.bridge.bridge-nf-call-iptables = 0

net.bridge.bridge-nf-call-arptables = 0

检查之前/之后的值。

# sysctl -p /etc/sysctl.conf

选项2:

添加直接防火墙规则

firewall-cmd --direct --add-chain ipv4 filter FORWARD 0 -m physdev --physdev-is-bridged -j ACCEPT