virt-install
を使用して、CentOS7ホストコンピューター上に2つのCentOS7仮想マシンゲストを作成しました。 1つの仮想マシンはwebvm
と呼ばれ、プライベートネットワーク上でWebサイトをホストします。もう1つの仮想マシンはdatavm
と呼ばれ、webvm
でホストされるWebアプリの仮想データベースサーバーになることを唯一の目的としています。 datavm
がwebvm
からのデータ接続のみを許可し、それらのデータ接続が物理サーバーボックス内で発生するようにネットワークを設定するにはどうすればよいですか?作成したいwebvm
とdatavm
の間のデータベーストランザクションがローカルネットワークを通過しないようにしてください。
ブリッジネットワークはすでにホストOSを各ゲストOSにリンクしていることに注意してください。
webvm
のローカルエリアネットワークIPは10.0.0.6
であり、datavm
のネットワークIPは10.0.0.5
です。 webvm
でホストされている一般的なWebアプリの接続文字列は次のとおりです。
jdbc:mysql://localhost:3306/somedb?autoReconnect=true
localhost
がwebvm
を参照していることがわかります。接続文字列がjdbc:mysql://10.1.1.1:3306/somedb?autoReconnect=true
になるように、10.1.1.xアドレスを使用して新しい2番目のブリッジネットワークを設定する必要があるようです。
追加する新しいブリッジネットワークコードは、既存のブリッジネットワークと競合してはなりません。
では、datavm
とwebvm
の間に1対1の排他的データ接続を設定するにはどうすればよいですか?
進行中の更新された作業:
@derobertは、次の手順を提案しました。
1.) Add a second bridge to the Host.
2.) Add a second network interface to webvm, connected to the new Host bridge.
3.) Add a second network interface to datavm, connected to the new Host bridge.
4.) Configure the new network interfaces inside each guest.
この目的に向けて、Hostで以下を実行してベースラインを取得しました。
[root@localhost ~]# nmcli con show
NAME UUID TYPE DEVICE
bridge-slave-eno1 c36fd051-cacc-4e91-944f-a98f4fee26ff 802-3-ethernet eno1
bridge-br0 d472bc86-0f75-4dd5-bfee-5b8208b3fed2 bridge br0
System eno1 abf4c85b-57cc-4484-4fa9-b4a71689c359 802-3-ethernet --
vnet1 ea985e89-94fb-403c-af33-7daefb378ca5 generic vnet1
vnet0 06deb20d-b0b7-4233-8abc-cbb285165082 generic vnet0
[root@localhost ~]#
次に、次の内部を実行しましたwebvm
:
[root@localhost ~]# nmcli con show
NAME UUID TYPE DEVICE
eth0 71bf7ff1-7574-4364-8c83-5878ed30d028 802-3-ethernet eth0
[root@localhost ~]#
次に、次の内部を実行しましたdatavm
:
[root@localhost ~]# nmcli con show
NAME UUID TYPE DEVICE
eth0 d976f7ca-ab7f-4fd0-ab2b-6213815bd1a1 802-3-ethernet eth0
[root@localhost ~]#
次に、ホストに次のコマンドを実装しました。
[root@localhost ~]# nmcli con add type bridge ifname br1
Connection 'bridge-br1' (8b9fd6d9-bcb4-4e1c-85ab-55905d08667e) successfully added.
[root@localhost ~]# nmcli con show
NAME UUID TYPE DEVICE
bridge-slave-eno1 c36fd051-cacc-4e91-944f-a98f4fee26ff 802-3-ethernet eno1
bridge-br0 d472bc86-0f75-4dd5-bfee-5b8208b3fed2 bridge br0
System eno1 abf4c85b-57cc-4484-4fa9-b4a71689c359 802-3-ethernet --
bridge-br1 8b9fd6d9-bcb4-4e1c-85ab-55905d08667e bridge br1
vnet1 ea985e89-94fb-403c-af33-7daefb378ca5 generic vnet1
vnet0 06deb20d-b0b7-4233-8abc-cbb285165082 generic vnet0
[root@localhost ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
virsh # list
Id Name State
----------------------------------------------------
2 public4-centos7 running
4 data-centos7 running
virsh # attach-interface data-centos7 bridge br1
Interface attached successfully
virsh # attach-interface public4-centos7 bridge br1
Interface attached successfully
virsh #
次に、各仮想マシンに個別にログインすると、ブリッジネットワークへの新しい接続が次のようにWired connection 1
という名前で表示されました。
Web VMの場合:
[root@localhost ~]# nmcli con show
NAME UUID TYPE DEVICE
Wired connection 1 44f1f791-0d86-4587-8a2d-48dfa217ee99 802-3-ethernet ens7
eth0 71bf7ff1-7574-4364-8c83-5878ed30d028 802-3-ethernet eth0
[root@localhost ~]# nmcli con modify 'Wired connection 1' ipv4.addresses "10.1.1.2"
そして、データvmでは:
[root@localhost ~]# nmcli con show
NAME UUID TYPE DEVICE
Wired connection 1 448101d7-1f8f-4b78-ad90-7efd5be23b08 802-3-ethernet ens7
eth0 d976f7ca-ab7f-4fd0-ab2b-6213815bd1a1 802-3-ethernet eth0
[root@localhost ~]# nmcli con modify 'Wired connection 1' ipv4.addresses "10.1.1.1"
しかし、その後、ping 10.1.1.1
からのweb vm
が失敗し(宛先ホストに到達できません)、ping 10.1.1.2
からのdata vm
も失敗しました(宛先ホストに到達できません)。
web vm
では、vi /etc/sysconfig/network-scripts/ifcfg-Wired_connection_1
の内容は次のとおりです。
HWADDR=52:54:00:8F:3B:14
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="Wired connection 1"
UUID=44f1f791-0d86-4587-8a2d-48dfa217ee99
ONBOOT=yes
IPADDR=10.1.1.2
PREFIX=16
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
data_vm
では、vi /etc/sysconfig/network-scripts/ifcfg-Wired_connection_1
の内容は次のとおりです。
HWADDR=52:54:00:1F:FE:27
TYPE=Ethernet
BOOTPROTO=dhcp
IPADDR=10.1.1.1
PREFIX=32
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME="Wired connection 1"
UUID=448101d7-1f8f-4b78-ad90-7efd5be23b08
ONBOOT=yes
@ derobertが提案したことを完了するには、他に何を入力しますか?すべてのデータトラフィックは物理ボックス内にとどまる必要があるため、新しいブリッジにはdatavmとwebvmが使用する新しいIPアドレスを含める必要があります新しい橋でのみ。
@garethTheRedのコメントによると、ip route
にweb vm
と入力すると、次のようになります。
[root@localhost network-scripts]# ip route
default via 10.0.0.1 dev eth0 proto static metric 100
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.6 metric 100
10.1.1.0/30 dev ens7 proto kernel scope link src 10.1.1.2
10.1.1.2/31 dev ens7 proto kernel scope link src 10.1.1.2 metric 100
169.254.0.0/16 dev ens7 scope link metric 1003
[root@localhost network-scripts]#
次に、ip route
にdata vm
と入力すると、次のようになります。
[root@localhost network-scripts]# ip route
default via 10.0.0.1 dev eth0 proto static metric 100
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5 metric 100
10.1.1.0/31 dev ens7 proto kernel scope link src 10.1.1.1 metric 100
10.1.1.0/30 dev ens7 proto kernel scope link src 10.1.1.1
169.254.0.0/16 dev ens7 scope link metric 1003
[root@localhost network-scripts]#
ifcfg-*
ファイルを回答の6行まで削除すると、systemctl restart network
を試したときに失敗しました。 hardware
またはuuid
引数が原因である可能性があると思いますが、それは単なる推測です。上記の追加の引数に加えて@garethTheRedの編集を含めるためにifcfg-*
ファイルを復元すると、systemctl restart network
はエラーなしで実行されましたが、pingは失敗しました。
これには2つの原因が考えられます。
考えられる原因の1つは、プライベートネットワークの構築方法(ホスト上のブリッジを使用)です。 virt-manager
を使用してこれを構成する方がはるかに安全で簡単です。ホストがCLIのみの場合は、リモートデスクトップ/ラップトップにインストールし、SSH経由でホストに接続します。
インストールしたら、ハイパーバイザーに接続し、リスト内のハイパーバイザーの名前を右クリックして、「詳細」を選択します。 [仮想ネットワーク]タブで、[+]ボタン(下、左)をクリックして新しいネットワークを追加できます。ウィザードがプロセスをガイドしますが、IPv4アドレスとIPv6アドレスのオプションのチェックを外し(ポイントツーポイントリンクであるため、これらは必要ありません)、[プライベートネットワーク]のラジオボタンを選択してください。 。ウィザードを続行して終了します。
あなたが頑固なコマンドラインのみの人なら、上記はvirsh net-define
コマンドラインインターフェースを使用して実行できます。以下の例のようなXMLファイルを作成します(virbr2
は未使用のブリッジ名です。brctl show
を使用してリストしてください):
<network>
<name>private</name>
<bridge name="virbr2" />
</network>
次に、次のコマンドでインポートします。
# virsh net-define <XML filename>
上記が完了したら、各VMを編集して、この新しいプライベートネットワークを使用できます(これを有効にするには、VMを再起動する必要があります)。 VM構成を編集すると、それぞれにログインして、関連するIPの詳細(OPから)を使用してOSを構成する準備が整います。しかし、最初に読んでください...
次に、2つのVM間に新しいインターフェイスを指すルートがありません。もう1つこれは、IPアドレスに/32
プレフィックスを設定したためです。
接続を編集するときは、フォーマットa.b.c.d/p
を使用してプレフィックスを設定します。それ以外の場合、プレフィックスがないと、デフォルトで/32
になります。
# nmcli con edit "Wired connection 1"
nmcli> set ipv4.addresses 10.1.1.1/30
nmcli> save
nmcli> quit
# systemctl restart network
ネットワークを手動で構成することもできます。
NM_CONTROLLED=no
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
IPADDR=10.1.1.1
PREFIX=30
他のVM(10.1.1.2/30
)でも同様の手順を実行すると、機能するはずです。
注:/31
を使用できますが、IPアドレスを10.1.1.0
および10.1.1.1
に変更した場合に限ります。通常、範囲の最初のアドレスはネットワークアドレス用に予約され、最後のアドレスはブロードキャスト用に予約されているため、これにより問題が発生する可能性があります。 /31
のアドレスは2つしかないため、ホスト用にアドレスが残っていません。 /30
を使用することをお勧めします。これにより、4つのアドレス(2つは予約済み、2つはホスト用)が提供されます。
それらを別のブリッジに接続する場合、別のサブネット上の別のIPアドレスを指定する必要があることをご存知ですか?おそらく、1台のマシンからのトラフィックのみを受け入れ、デフォルトのブリッジを使用するようにファイアウォールルールを設定する方がよいでしょう。
それ以外の場合は、virt-manager
を使用してvmネットワーク設定を構成し、デフォルトの自動管理ブリッジの代わりに指定したインターフェイスを使用するように設定し、/ etc/network/interfacesを手動で編集して専用のブリッジインターフェイスを作成します。この目的。
Xen用に手動で構成したブリッジは次のとおりです。
auto xenbr0
iface xenbr0 inet static
bridge_ports em2
address 10.1.1.8
netmask 255.255.255.0
network 10.1.1.0
broadcast 10.1.1.255
gateway 10.1.1.1
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8