次のようなネットワークがあるため、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 domU
、virsh console domU
該当する場合、または、ゲストのVNCセッションに接続)。
ゲスト
Hereい部分があります。ネットワークの健全性チェックを無効にする方法は、オペレーティングシステムによって異なります。私が取り上げるのDebian / Ubuntuの、RHEL / CentOSの、およびマイクロソフトの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
iproute2のコマンドは、それが別のサブネット上にあるにもかかわらず、とにかくゲートウェイを適用するには、オペレーティング・システムに伝えます。post-up
post-down
実行後sudo service networking restart
、ゲストIPを介してゲストにアクセスできるようになります10.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
、ゲストIPを介してゲストにアクセスできるようになります10.0.0.1
。
上のMicrosoft Windows NT、インターフェイスを右クリックし、「プロパティ」をクリックし、[コントロールパネル]の[ネットワーク接続]にアクセスしてください。[ネットワーク]タブで、[インターネットプロトコルバージョン4(TCP / IPv4)]を選択し、[プロパティ]をクリックします。次のようにフィールドに入力します。
[OK]をクリックすると、次の警告が表示されます。
[OK]をクリックして、ゲートウェイを使用することを確認します。
数秒後、ゲストIPを介してゲストに到達できるはず10.0.0.1
です。
DHCPダイナミックアドレッシング
残念ながら、これは不可能です。何らかの方法でゲストのDHCPDISCOVERをインターセプトした場合でも、DHCPサーバーはユーザーを割り当てて10.0.0.1/32
、ゲートウェイが192.168.0.1
であることを通知しません。また、この奇妙な構成を受け入れるDHCPクライアントはありません。
DHCPをセットアップするには、サブネット内にゲートウェイを持つ適切に構成されたネットワークが必要です。これを行う唯一の方法は、プライベートネットワーク(172.16.0.0/12
)を作成し、ゲートウェイ()を介してゲストのプライベートIPアドレス(172.16.0.2
)とパブリックIPアドレス(10.0.0.1
)間のネットワークアドレス変換を行うことです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
その後、ホストはゲストゲートウェイを介してゲストパブリックIP 10.0.0.1
とゲストプライベートIPの間でトラフィックを転送します。172.16.0.2
172.16.0.1
OpenStack(libvirtを介してXenをサポート)は、ネットワーク抽象化OpenStack Neutronを介してこのNATセットアップとプライベートサブネットDHCPサーバーを提供できる可能性がありますが、OpenStack自体のセットアップは非常に面倒です。
Novaインスタンス/ゲスト/サーバー用に実行されているシングルノードOpenStackインストールとNeutronプライベートネットワークを取得できましたが、プライベートIPアドレス(172.16.0.0/12
)を外部ネットワークIPアドレス(10.0.0.1/32
、10.0.0.2/32
など)にNAT変換する方法がわかりませんでした)OpenStackは、すぐに使用できる仮想マシン向けのHetzner、OVH、およびOnline.netの珍しいネットワーク構造をサポートしていないためです。これは未解決の問題のままです。
追加のリソース