使用 nftables 进行路由(Fedora33、nmcli、brctl)

使用 nftables 进行路由(Fedora33、nmcli、brctl)

A/ 主机(Fedora 33)配有以太网eth0。ip 192.168.18.11(/24)

B1/ Kvm 客户机与 ifvnet0一起被奴役virbr101。ip 192.168.101.88(/24)(手动路由,静态 IP)
或者
B2/ Kvm 客户机被vnet1从属于virbr102. ip 192.168.102.210(/24) (virt-manager 路由,DHCP)

按照下面显示的配置,我似乎缺少一个步骤才能使其正常工作。不确定如何调试我的设置。

发生的事情是:

  1. 从 A,我可以 ping B,也可以 ssh 进入 B
  2. 从 B 可以 ping A
  3. 从 A,我可以 ping 192.168.18.1
  4. 从 B 端,我无法 ping 192.168.18.1,这就是我现阶段想要解决的问题

B1 和 B2 之间的区别是,如果我 ping 一个命名服务器,例如 google.com,使用 B1 它会说没有到主机的路由,而使用 B2 它会找到 IP 地址,但没有 ping 回复。

路由网络使用nmcli++brctlnft

在主机上virbr101

ip link add virbr101-mac address 52:54:41:0b:00:01 type dummy
brctl addif virbr101 virbr101-mac

文件ifcfg-virbr101

DEVICE=virbr101
NAME=virbr101
# Change to 'no' to disable NetworkManager for this interface.
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Bridge
DELAY=2
STP=on

IPADDR=192.168.101.1
NETMASK=255.255.255.0

激活该接口:

nmcli connection load /etc/sysconfig/network-scripts/ifcfg-virbr101
nmcli connection up virbr101

启用IP转发:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.forwarding=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
sysctl -p

使用以下nft命令路由接口:

delete table ip filter
add table ip filter
add chain ip filter INPUT
add chain ip filter FORWARD
add chain ip filter OUTPUT
add rule ip filter FORWARD oifname "virbr101" ip daddr 192.168.101.0/24 counter accept
add rule ip filter FORWARD iifname "virbr101" ip saddr 192.168.101.0/24 counter accept
add rule ip filter FORWARD iifname "virbr101" oifname "virbr101" counter accept
add rule ip filter FORWARD iifname "virbr101" counter reject
add rule ip filter FORWARD oifname "virbr101" counter reject

使用路由网络virt-manager

网络:

<network>
  <name>bridged102</name>
  <uuid>2e8d6e42-b70e-43c8-8523-02008070f03c</uuid>
  <forward dev="ens3" mode="route">
    <interface dev="ens3"/>
  </forward>
  <bridge name="virbr0" stp="on" delay="0"/>
  <mac address="52:54:00:42:1d:e4"/>
  <domain name="bridged102"/>
  <ip address="192.168.102.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.102.128" end="192.168.102.254"/>
    </dhcp>
  </ip>
</network>

访客界面:

<interface type="network">
  <mac address="52:54:00:ee:a6:67"/>
  <source network="bridged102" portid="238df934-14ac-422e-bfbd-a4047a9444fb" bridge="virbr0"/>
  <target dev="vnet1"/>
  <model type="virtio"/>
  <link state="up"/>
  <alias name="net1"/>
  <address type="pci" domain="0x0000" bus="0x00" slot="0x08" function="0x0"/>
</interface>

对于virt-manager解决方案,我遵循了这个例子:libvirt 文档 // 网络 XML 格式 // 路由网络配置

答案1

缺少的是route从我的 LAN 上的各种设备返回到我的 VM 的 NW。

例如:

route add -net 192.168.102.0/24 gw 192.168.18.11
# Or other gateway as appropriate for the device and nw distance

相关内容