web-dev-qa-db-ja.com

tap0でARP応答がありません(KVMブリッジネットワーク)

KVMゲストに外部IPアドレスを割り当てて、ブリッジネットワークを使用しました。残念ながら、ゲストにはネットワーク接続がないため、理由がわかりません。調査したところ、そうではないようです。 ARPリクエストに対する応答はありません。

物理インターフェイスが1つあります:eth0、ブリッジインターフェイス:br0、tapインターフェイス:kvmによるqemu-ifupスクリプトによって起動されたtap0。ホストマシンは最新のUbuntuサーバーを実行します。ゲストマシンはGKRMLlive-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 scirpt(変更なし、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

ゲストから何かにpingを実行しようとしたときのtcpdump -i tap0の結果:

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

...などは返信なしで。

助けてくれてありがとう!

4
MasterM
  1. Iptablesを実行していますか?もしそうなら、ブリッジトラフィックを有効にしましたか?たとえば、以下はFedora/RedHatで機能する1つのソリューションです。

iptables -F FORWARD

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

ゲストは1つのネットワークにあり、ホストは別のネットワークにあります。トラフィックはタップデバイスを通過してeth0にブリッジしますが、xx.xx.129.69/28ネットワークに到達できると想定されていますか?一般的な作業設定は、同じネットワーク内でブリッジIPとVMを接続することです。ホストにそのネットワークを表示させたくない場合は、IPなしでブリッジを離れます。ブリッジ自体、および場合によっては基盤となるeth0でtcpdumpをチェックすることにより、フロースルーを追跡できます。

2
dyasny