tap0 上没有 ARP 回复(KVM 桥接网络)

tap0 上没有 ARP 回复(KVM 桥接网络)

我想为我的 KVM 客户端分配一个外部 IP 地址,并使用桥接网络方式。不幸的是,客户端没有网络连接,我不知道原因。经过调查,似乎它没有收到任何 ARP 请求的回复。

我有一个物理接口:eth0,桥接接口:br0 和 tap 接口:tap0,它们由 kvm 的 qemu-ifup 脚本启动。主机运行最新的 Ubuntu Server。客户机运行 GKRML live-cd(基于 slackware)。

可能存在的问题是主机和客户机位于不同的网络中。不幸的是,这两个 IP 地址都是数据中心分配给我的,我无法更改它们。

配置详细信息如下。以下xx.xx对于主机和客户机都相同。

主机的 /etc/network/interfaces:

# Loopback device:
auto lo
iface lo inet loopback

# Device: eth0
auto eth0
iface eth0 inet manual

# Device: br0
auto br0
iface br0 inet static
  address   xx.xx.110.69
  netmask   255.255.255.224
  network   xx.xx.110.64
  broadcast xx.xx.110.95
  gateway   xx.xx.110.65
  bridge_ports eth0
  bridge_fd 9
  bridge_hello 2
  bridge_maxage 12
  bridge_stp off

主机的路由表:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
xx.xx.110.64    0.0.0.0         255.255.255.224 U     0      0        0 br0
0.0.0.0         xx.xx.110.65    0.0.0.0         UG    100    0        0 br0

主机的 /etc/qemu-ifup 脚本(未修改,随 qemu 包一起提供):

#!/bin/sh
switch=$(/sbin/ip route list | awk '/^default / { print $5 }')
/sbin/ifconfig $1 0.0.0.0 up
/usr/sbin/brctl addif ${switch} $1

brctl show客户机运行时的输出:

bridge name     bridge id               STP enabled     interfaces
br0             8000.4061862b90d5       no              eth0
                                                        tap0

KVM 命令行:

kvm -cdrom grml_2009.10.iso -boot d -m 256 -vnc localhost:0 -net nic,macaddr=DE:AD:BE:EF:11:14 -net tap,script=/etc/qemu-ifup

客户机网络设置(单个eth0接口):

$ ifconfig eth0 xx.xx.129.69/28 up
$ route add default gw xx.xx.129.65

tcpdump -i tap0尝试从来宾 ping 任何内容时的结果:

tcpdump: WARNING: tap0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 96 bytes
23:38:13.659655 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:14.659687 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:15.659655 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:16.666350 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:17.666319 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28
23:38:18.666324 ARP, Request who-has xx.xx.129.65 tell xx.xx.129.69, length 28

... 等等,没有回复。

提前感谢你的帮助!

答案1

  1. 您正在运行 iptables 吗?如果是,您是否启用了桥接流量?例如,以下是在 Fedora/Red Hat 上有效的解决方案之一:

iptables -F 转发

iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

iptables-保存 > /etc/sysconfig/iptables

  1. 您是否已在 sysctl.conf 中启用 IPv4 转发?在 Fedora/Red Hat 中/etc/sysctl.conf你需要设置

net.ipv4.ip_forward = 1

答案2

您的客户机位于一个网络中,而主机位于另一个网络中。流量通过 tap 设备并桥接到 eth0,是否应该并有望能够到达 xx.xx.129.69/28 网络?典型的工作设置是将桥接 IP 和连接到它的 VM 放在同一个网络中,如果您希望主机看不到该网络,则让桥接器完全没有 IP。您可以通过检查桥接器本身的 tcpdump 以及可能检查底层 eth0 来跟踪流程

相关内容