web-dev-qa-db-ja.com

Xenおよびルーテッドネットワーキングの問題

私はこれを機能させるために過去数日間を費やしましたが、この投稿の下部にあいまいまたは時代遅れのガイドがあります。私が従おうとしたいくつかのガイドへのリンクを追加しました。 hetznerに専用のマシンがあり、仮想化をセットアップしたいです。vmを作成できます。ネットワークに問題はありません。hetznerネットワークでは、追加のサブネットをホストメインにルーティングするため、単純なブリッジを使用できません。 IPであり、MACアドレスがホストマシンと一致しない場合はパケットを受け入れません。

ルーティングされたネットワークを使用して、eth0接続を介してサブネットをルーティングする必要があることがわかりました。何度も試しましたが、ネットワークを機能させることができず、仮想マシンからdom0にさえアクセスできません。通常、dom0から割り当てたアドレスからサーバーにSSH接続できます。tcpdumpを実行しましたが、domU用ではないのにpingパケットがdom0に到達していますが、そこで停止し、domUに到達していません。

私が試した1つの解決策は、virtualizorを使用することでした。それが最初に機能したのは、その構成を取得して、コントロールパネルなしで複製することでした。これは、必要がなく、不要なものにお金を払うのは無意味に思えるからです。私はこのマシンとその仮想マシンの唯一のユーザーであるため、私には。

私は主にDebianJessieを使用しているので、debianベースのオペレーティングシステムとxlツールを使用しています。OSをセキュリティアップデートの妥当なサポート範囲内に収めたいので、Ubuntuも14.04以降で試しました。問題はインターフェースファイルの設定だと思いますが、何が悪いのかわかりません。

どんな助けでも大歓迎です

ルーティングされたXEN VM LVMに基づく
Hetzner XenIPv4サブネット+ IPv6サブネット
Hetzner専用サーバーでのXENのセットアップ
HetznerでのUbuntu 12.04とXenのセットアップ

2
bobthemac

Hetzner、OVH、およびOnline.netサーバーでのルーテッドモードの仮想マシンネットワーク構成は、次のようなネットワークがあるため、直感に反します。

Host IP:       192.168.0.2
Host Netmask:  255.255.255.0 (/24)
Host Gateway:  192.168.0.1

Guest IP:      10.0.0.1
Guest Netmask: 255.255.255.255 (/32)
Guest Gateway: 192.168.0.1
Guest MAC:     02:00:00:01:02:03

上記の例は単なる例示であり、前述のホスティングプロバイダーのいずれかから期待できるサンプルIPアドレスではありません。

え?何? 1つのIPアドレス(10.0.0.1/32)だけのサブネットを作成するにはどうすればよいですか?ゲートウェイの余地はありません!ゲートウェイが非常に異なるサブネット(192.168.0.0/24)にあるのはなぜですか?

これらは、LinuxとWindowsがネットワークの健全性チェックに失敗する原因となる質問です。これは、ネットワークが意味をなさないためです。彼らは、ゲートウェイに到達できないと考えています。

Hetzner、OVH、およびOnline.Netとにかくゲートウェイに到達できるようにする、いくつかのネットワークトリックを使用します。

幸い、LinuxとWindowsの両方で、サニティチェックをオーバーライドし、上記のインターフェイス構成を設定できます。


可能な解決策

静的アドレス指定

これが最も簡単です。ホストで行う必要のあるほとんどの構成は、ブリッジを作成することです。

ホスト

Debian/Ubuntuで、管理/インターネットインターフェースがeth0の場合、/etc/network/interfacesを編集して、次のようにブリッジbr0を作成できます。

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.0.2   # Host IP
        netmask 255.255.255.0 # Host Netmask
        gateway 192.168.0.1   # Host Gateway
        metric 0
        bridge_ports eth0
        bridge_stp on
        bridge_fd 0
        bridge_maxwait 0

Sudo service networking restartを実行して、ブリッジネットワーク構成を有効にします。

RHEL/CentOSで、管理/インターネットインターフェイスがeth0の場合、/etc/sysconfig/network-scripts/ifcfg-eth0を編集して、次のようにブリッジbr0を使用できます。

TYPE="Ethernet"
BOOTPROTO="none"
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
BRIDGE="br0"

次に、新しいファイル/etc/sysconfig/network-scripts/ifcfg-br0を作成して、ブリッジを構成します。

DEVICE="br0"
BOOTPROTO="static"
IPADDR="192.168.0.2"    # Host IP
NETMASK="255.255.255.0" # Host Netmask
GATEWAY="192.168.0.1"   # Host Gateway
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"

Sudo service network restartを実行して、ブリッジネットワーク構成を有効にします。

サーバーに接続したままの場合は、おめでとうございます。ブリッジが機能しています。

ハイパーバイザー

純粋な Xen xl (libxenlight)では、仮想インターフェイス構成に書き込む必要があるのはこれだけです。

vif=[ 'mac=02:00:00:01:02:03,bridge=br0' ]

02:00:00:01:02:03は、Hetzner、OVH、またはOnline.netがゲストのネットワーク用に提供したMACアドレスであり、br0は、上記で構成したブリッジであることに注意してください。

libvirt を使用している場合は、<devices>タグ内に次のインターフェイスを追加します。

<interface type='bridge'>
  <mac address='02:00:00:01:02:03'/>
  <source bridge='br0'/>
</interface>

この仮想インターフェイスを適切なMACアドレスとブリッジで構成したら、ゲストを起動してコンソールに接続します(xl console domUvirsh console domU、または該当する場合はゲストのVNCセッションに接続します)。

ゲスト

ここに醜い部分があります。ネットワークの健全性チェックをオーバーライドする方法は、オペレーティングシステムによって異なります。 Debian/UbuntuRHEL/CentOS、およびMicrosoft Windows NT

Debian/Ubuntuで、インターフェースがeth0と呼ばれる場合は、これを/etc/network/interfacesに書き込みます。

auto eth0
iface eth0 inet static
        address 10.0.0.1    # Guest IP
        broadcast 10.0.0.1  # Guest IP
        netmask 255.255.255.255
        gateway 192.168.0.1 # Guest Gateway, a.k.a. Host Gateway
        post-up route add 192.168.0.1 dev eth0
        post-up route add default gw 192.168.0.1
        pre-down route del 192.168.0.1 dev eth0
        pre-down route del default gw 192.168.0.1

post-upおよびpost-downiproute2コマンドは、別のサブネット上にある場合でも、とにかくゲートウェイを適用するようにオペレーティングシステムに指示します。

Sudo service networking restartを実行すると、ゲストIP10.0.0.1を介してゲストにアクセスできるようになります。

RHEL/CentOSで、インターフェースがeth0と呼ばれる場合は、これを/etc/sysconfig/network-scripts/ifcfg-eth0に書き込みます。

DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
USERCTL="no"
PEERDNS="yes"
TYPE="Ethernet"
NETMASK="255.255.255.255"
IPADDR="10.0.0.1"          # Guest IP
GATEWAY="192.168.0.1"      # Guest Gateway, a.k.a. Host Gateway
ARP="yes"
HWADDR="02:00:00:01:02:03" # Guest MAC

次に、以下を/etc/sysconfig/network-scripts/route-eth0に書き込みます。

192.168.0.1 dev eth0
default via 192.168.0.1 dev eth0

このファイルは、別のサブネット上にある場合でも、とにかくゲートウェイを適用するようにiproute2に指示します。

Sudo service network restartを実行すると、ゲストIP10.0.0.1を介してゲストにアクセスできるようになります。

Microsoft Windows NTで、コントロールパネルの[ネットワーク接続]に移動し、インターフェイスを右クリックして、[プロパティ]をクリックします。 [ネットワーク]タブで、[インターネットプロトコルバージョン4(TCP/IPv4)]を選択し、[プロパティ]をクリックします。図のようにフィールドに入力します。

Internet Protocol Version 4 (TCP/IPv4) Properties

[OK]をクリックすると、次の警告が表示されます。

Microsoft TCP/IP: Warning - The default gateway is not on the same network segment (subnet) that is defined by the IP address and subnet mask. Do you want to save this configuration?

「OK」をクリックして、とにかくゲートウェイを使用することを確認します。

数秒後、ゲストIP10.0.0.1を介してゲストに連絡できるようになります。

DHCP動的アドレス指定

残念ながら、これは不可能です。どういうわけかゲストのDHCPDISCOVERを傍受したとしても、DHCPサーバーはあなたに10.0.0.1/32を割り当て、ゲートウェイは192.168.0.1であることを通知しません。そして、DHCPクライアントはこの奇​​妙な構成を受け入れるつもりはありません。

DHCPを設定するには、サブネット内にゲートウェイを備えた適切に構造化されたネットワークが必要です。これを行う唯一の方法は、プライベートネットワーク(172.16.0.0/12)を作成し、ゲートウェイ(172.16.0.2)を介してゲストのプライベートIPアドレス(10.0.0.1)とそのパブリックIPアドレス(172.16.0.1)の間でネットワークアドレス変換を行うことです。

プライベートネットワークとNAT

上記のすべての手順を確認しましたが、プライベートIPからパブリックIPへの1対1 /基本NATの作成に成功しませんでした。その理由の一部は、ネットワークを構築するためにやるべきことがたくさんあるということです。

ネットワークは次のようになります。

Guest Public IP:  10.0.0.1
Guest Private IP: 172.16.0.2
Guest Netmask:    255.240.0.0 (/12)
Guest Gateway:    172.16.0.1

次に、ホストは、ゲストゲートウェイ10.0.0.1を介してゲストパブリックIP172.16.0.2とゲストプライベートIP172.16.0.1の間でトラフィックを転送します。

OpenStacklibvirtを介してXenをサポート )は、ネットワークの抽象化を通じて、このNATセットアップとプライベートサブネットDHCPサーバーを提供する可能性があります OpenStack Neutron ですが、OpenStack自体のセットアップは非常に面倒です。

単一ノードのOpenStackインストールとNovaインスタンス/ゲスト/サーバー用のNeutronプライベートネットワークを実行することはできましたが、プライベートIPアドレス(172.16.0.0/12)を外部ネットワークIPにNATする方法がわかりませんでしたOpenStackはHetzner、OVH、およびOnline.netの仮想マシン用の通常とは異なるネットワーク構造をサポートしていないため、アドレス(10.0.0.1/3210.0.0.2/32など)。これは未解決の問題のままです。


追加リソース

1
Deltik