如何在没有 eth* 链接的情况下为 KVM 创建桥接并授予对互联网的访问权限

如何在没有 eth* 链接的情况下为 KVM 创建桥接并授予对互联网的访问权限

我有一个任务,我应该创建不带 eth* 链接的 br1,并让这个 br1 访问互联网。我有 CentOS7。我创建了接口 br1:

DEVICE=br1
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NM_CONTROLLED=no

在 iptables 中我写了以下内容:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.122.1

192.168.122.1 例如我的主界面,可以访问互联网。

我的问题是:从 KVM 上的虚拟机访问互联网就足够了,或者我需要做其他事情。也许我需要一些 FORWARD 规则。因为 virbr0 接口可以工作,但我的 br1 不行。

答案1

使用伪装在 Linux 服务器上分配 NAT 而不是 SNAT:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

允许将数据包转发到 Internet:

iptables -A FORWARD -i br1 -o eth0 -j ACCEPT
iptables -A FORWARD -i virbr0 -o eth0 -j ACCEPT

允许转发来自 Internet 的数据包:

iptables -A FORWARD -i eth0 -o br1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT

要允许在两个虚拟网络之间转发数据包:

iptables -A FORWARD -i br1 -o virbr0 -j ACCEPT
iptables -A FORWARD -i virbr0 -o br1 -j ACCEPT

添加deny转发其他数据包的默认规则。它会丢弃从互联网到本地网络的所有不必要的连接:

iptables -P FORWARD DROP

不要忘记通过命令启用转发:

sysctl -w net.ipv4.conf.all.forwarding=1

相关内容