web-dev-qa-db-ja.com

一連のパブリックIPをDebian / Ubuntu上のKVM仮想マシンにブリッジする方法

私は何週間もの間、サーバー上で実行されているKVM仮想マシンとさまざまなパブリックIPを共有するための適切なネットワーク構成を見つけようとしてきましたが、 しかし、これまでのところほとんど運がありません そして、フレンドリーなServerFaultコミュニティの助けを借りて、私はそれを機能させることができました。あなたは私の作業設定を以下に見つけることができます:

私のISPはすべてのトラフィックを192.168.8.118にルーティングします(したがって、これはeth0のプライマリIPである必要があります)が、私は192.168.239.160/28を自分の処分に持っています。

ホストマシンの/etc/network/interfacesは次のとおりです。

# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
  address   192.168.8.118
  broadcast 192.168.8.127
  netmask   255.255.255.224
  gateway   192.168.8.97
  pointopoint 192.168.8.97
  # This device acts as gateway for the bridge, so provide a route.
  up ip route add 192.168.8.118/32 dev eth0 scope Host

# device: br0
auto  br0
iface br0 inet static
  bridge_stp      off
  bridge_maxwait  0
  bridge_fd       0
  address   192.168.239.174
  broadcast 192.168.239.175
  netmask   255.255.255.240
  gateway   192.168.8.118
  # Create and destroy the bridge automatically.
  pre-up brctl addbr br0
  post-down brctl delbr br0
  # Our additional IPs are allocated on the bridge.
  up ip route add to 192.168.239.160/28 dev br0 scope Host

次のような仮想マシンを構成しました。

Sudo ubuntu-vm-builder kvm precise \
                  --domain pippin \
                  --dest pippin \
                  --hostname pippin.hobbiton.arnor \
                  --flavour virtual \
                  --mem 8196 \
                  --user mikl \
                  --pass hest \
                  --bridge=br0 \
                  --ip 192.168.239.162 \
                  --mask 255.255.255.240 \
                  --net 192.168.239.160 \
                  --bcast 192.168.239.175 \
                  --gw 192.168.239.174 \
                  --dns 8.8.8.8 \
                  --components main,universe \
                  --addpkg git \
                  --addpkg openssh-server \
                  --addpkg vim-nox \
                  --addpkg zsh \
                  --libvirt qemu:///system ;

仮想マシンのXML定義を調べると、そのネットワークインターフェイスは次のように定義されています。

<interface type='bridge'>
  <mac address='52:54:00:b1:e9:52'/>
  <source bridge='br0'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

仮想マシンを(再)起動すると、/var/log/syslogは次の行を受け取ります。

Jul 20 03:13:02 olin kernel: [ 4084.652906] device vnet0 entered promiscuous mode
Jul 20 03:13:02 olin kernel: [ 4084.686388] br0: port 2(vnet0) entering forwarding state
Jul 20 03:13:02 olin kernel: [ 4084.686394] br0: port 2(vnet0) entering forwarding state

私のサーバーは、カーネル3.2.0-26-generic(Ubuntuから)でUbuntu 12.0464ビットを実行しています。 libvirt-bin 0.9.8-2ubuntu1qemu-kvm 1.0+noroms-0ubuntu13を実行しています。

ホストマシンのiptablesは現在、すべてのトラフィックを許可するように設定されており(問題の原因としてそれを排除するため)、ipv4とipv6の両方のトラフィックの転送を有効にしました。

ホストからSSH経由でゲストにログインすると、ゲストOS内にインターネット接続がありません。ゲストの/etc/network/interfacesは次のようになります。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.239.162
    netmask 255.255.255.240
    network 192.168.239.160
    broadcast 192.168.239.175
    gateway 192.168.239.174
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 8.8.8.8
    dns-search pippin

今それは動作します

上記の構成の概要は、実際には私が望むように機能します。以前の試みを確認したい場合は、編集履歴を参照してください。

1
mikl

ブリッジングする場合は、ホストマシン上のVMのIPアドレスに関連するものを構成する必要はありません。ブリッジに接続するように構成し、各VM)内のIPを通常の方法で構成します。ブリッジは、IPアドレスが重要ではないイーサネットレイヤーでネットワークを結合します。ISPから見方をすれば、ISPに直接接続されているスイッチに複数のコンピューターが接続されているように見えます。

ただし、ISPがルーティングホストの.118アドレスへのトラフィックである場合は、ルーターとして機能し、VMのトラフィックを転送するようにVMホストを構成する必要があります。 。これを行うには、インターフェイスファイルからbridge_ports eth0行、ip route add to 192.168.239.160/28 dev br0、およびecho 1 > /proc/sys/net/ipv4/ip_forwardを削除します。VMでは、デフォルトのゲートウェイとして192.168.8.118を構成する必要があります。 192.168.8.118がeth0を介して直接到達可能であるというルートを追加します(これは、ホストのeth0に接続するVMのbr0です)。

どちらの場合も、VMのアドレスをbr0インターフェイスに直接追加しないでください。ブリッジングの場合、ホストではなくVMがそれらのアドレスのARP要求に応答するようにし、ルーティングの場合、ホストがこれらのアドレスの1つのパケットを受信すると、ルーティングする必要があることを理解する必要があります。どこか別の場所で、ローカルに配信されていません。

4
Wyzard

VMのIPアドレスをホストのbr0インターフェイスに割り当てたくない場合は、そのアドレスがVMではなくホストに属するようにするだけです。

ただし、VMには、すべてのアウトバウンドパケットをルーティングするためのゲートウェイアドレスが必要です。その/ 28内の1つのIPをホストに割り当て、そのIPをデフォルトルートとして使用するようにVMを構成することをお勧めします。サブネットで最初または最後に使用可能なIPは、ゲートウェイアドレスの妥当な選択です。

ip addr add 192.168.239.161/28 dev br0

ip転送を有効にしましたか?例えば/etc/sysctl.confで以下のコメントを解除します(ipv4および/またはipv6の場合は一方または両方)。

#net.ipv4.ip_forward=1
#net.ipv6.conf.all.forwarding=1

最後に、VMのコンソールでログインしてみましたか(たとえば、virt-managerまたはvinagreやxvnc4viewerなどのVNCビューアを使用)?その場合、どのIPアドレスがありますか(ある場合) )?VMは静的IPまたはdhcpを持つように構成されていますか?後者の場合、VMのMACアドレスに適切なIPアドレスを与えるようにdhcpサーバーを構成しましたか?

1
cas