我有一个任务,我应该创建不带 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