RHCEラボ:KVMネットワーキングとpingの問題

RHCEラボ:KVMネットワーキングとpingの問題

MichaeljangのRHCSA / RHCE設定ガイドに従ってRHCEラボを設定しようとしています。多くの情報が欠けているようですが、本のガイドに従いました(このような本の場合は、段階的に進むことをお勧めします)。

コアサマリー - KVM設定の同じサブネット上でVMが互いに通信できるようにすることはできません。私の学習ガイドはvirbr#デバイスでフォワードNATを使用するように言いますが、うまくいきません。

私が経験している主な問題は、私の仮想マシンがネットワーク上で何もpingできないことです。「ターゲットホストに接続できません」 server1は、デフォルトゲートウェイ、ホスト、または同じサブネットにあるtester1をpingできません。同じKVMホストPCの別のサブネットであるOutsider1にアクセスしたい場合も同様です。 VM tester1 と Outsider1 にも同じ動作があります。

セットアップのためにプライベートネットワーク(192.168.5.0/24)にホストがあり、本に基づいて2つのKVM仮想ネットワークと3つの仮想マシンを作成しました。以下は、各仮想マシンの構成をまとめたものです。

server1.example.com

  • 仮想ネットワーク「example.com」に接続:NAT
  • デバイスモデル: Virtio
  • vNIC MAC 52:54:00:86:51:d2
  • 固定 IP: 192.168.122.50/24, gw=192.168.122.1

tester1.example.com

  • 仮想ネットワーク「example.com」に接続:NAT
  • デバイスモデル: Virtio
  • vNIC MAC 52:54:00:89:20:c7
  • 固定IP:192.168.122.150/24、gw = 192.168.122.1

Outsider1.example.org

  • 仮想ネットワーク「example.org」に接続:NAT
  • デバイスモデル: Virtio
  • vNIC MAC 52:54:00:03:c3:0a
  • 固定IP:192.168.100.100/24、gw = 192.168.100.1

指示に従って仮想ネットワークを2つ作成し、仮想化ホストPCで見える設定は次のとおりです。

# virsh list
 Id    Name                           State
----------------------------------------------------
 1     outsider1                      running
 2     tester1                        running
 4     server1                        running

# virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 example.com          active     yes           yes
 example.org          active     yes           yes

# virsh net-info example.com
Name:           example.com
UUID:           6d2a6e12-2d72-4720-9427-630a608bae6f
Active:         yes
Persistent:     yes
Autostart:      yes
Bridge:         virbr0

# virsh net-info example.org
Name:           example.org
UUID:           3d564af8-4d3e-484b-846e-7ad76bd4be4a
Active:         yes
Persistent:     yes
Autostart:      yes
Bridge:         virbr1

# virsh net-dumpxml example.com
<network>
  <name>example.com</name>
  <uuid>6d2a6e12-2d72-4720-9427-630a608bae6f</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:7f:b9:50'/>
  <domain name='example.com'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.151' end='192.168.122.254'/>
    </dhcp>
  </ip>
  <ip family='ipv6' address='fd00:a81d:a6d7:55::1' prefix='64'>
    <dhcp>
      <range start='fd00:a81d:a6d7:55::100' end='fd00:a81d:a6d7:55::1ff'/>
    </dhcp>
  </ip>
</network>

# virsh net-dumpxml example.org
<network>
  <name>example.org</name>
  <uuid>3d564af8-4d3e-484b-846e-7ad76bd4be4a</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr1' stp='on' delay='0'/>
  <mac address='52:54:00:49:c7:35'/>
  <domain name='example.org'/>
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254'/>
    </dhcp>
  </ip>
  <ip family='ipv6' address='fd00:e81d:a6d7:56::1' prefix='64'>
    <dhcp>
      <range start='fd00:e81d:a6d7:56::100' end='fd00:e81d:a6d7:56::1ff'/>
    </dhcp>
  </ip>
</network>

# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.02428a3f4914   no      
virbr0      8000.5254007fb950   yes     virbr0-nic
virbr1      8000.52540049c735   yes     virbr1-nic

# ip route show
default via 192.168.5.1 dev enp0s31f6 proto dhcp metric 100 
192.168.5.0/24 dev enp0s31f6 proto kernel scope link src 192.168.5.45 metric 100 
192.168.100.0/24 dev virbr1 proto kernel scope link src 192.168.100.1 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 

# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 2c:4d:54:d2:c5:89 brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.45/24 brd 192.168.5.255 scope global noprefixroute dynamic enp0s31f6
       valid_lft 71762sec preferred_lft 71762sec
    inet6 fe80::7abc:be60:6633:d94/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:8a:3f:49:14 brd ff:ff:ff:ff:ff:ff
10: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether fe:54:00:03:c3:0a brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe03:c30a/64 scope link 
       valid_lft forever preferred_lft forever
11: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether fe:54:00:89:20:c7 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe89:20c7/64 scope link 
       valid_lft forever preferred_lft forever
13: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether fe:54:00:86:51:d2 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe86:51d2/64 scope link 
       valid_lft forever preferred_lft forever
14: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:49:c7:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1/24 brd 192.168.100.255 scope global virbr1
       valid_lft forever preferred_lft forever
    inet6 fd00:e81d:a6d7:56::1/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe49:c735/64 scope link 
       valid_lft forever preferred_lft forever
15: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr1 state DOWN group default qlen 1000
    link/ether 52:54:00:49:c7:35 brd ff:ff:ff:ff:ff:ff
16: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:7f:b9:50 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
    inet6 fd00:a81d:a6d7:55::1/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe7f:b950/64 scope link 
       valid_lft forever preferred_lft forever
17: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:7f:b9:50 brd ff:ff:ff:ff:ff:ff

すべてのVMでNetworkManagerを再起動してVMを再起動してみましたが、どのVMも他のデバイスと通信できません。どうやら、これらのデバイスが互いに会話をするためには、一歩が足りないようです...

Server1 は次のように構成されます。

[root@server1 ~]# ip route show
default via 192.168.122.1 dev eth0  proto static  metric 100 
192.168.122.0/24 dev eth0  proto kernel  scope link  src 192.168.122.50  metric 100 
[root@server1 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:86:51:d2 brd ff:ff:ff:ff:ff:ff
[root@server1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:86:51:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.50/24 brd 192.168.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe86:51d2/64 scope link 
       valid_lft forever preferred_lft forever

Tester1 は次のように構成されます。

[root@tester1 ~]# ip route show
default via 192.168.122.1 dev eth0  proto static  metric 100 
192.168.122.0/24 dev eth0  proto kernel  scope link  src 192.168.122.150  metric 100 
[root@tester1 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:89:20:c7 brd ff:ff:ff:ff:ff:ff
[root@tester1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:89:20:c7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.150/24 brd 192.168.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe89:20c7/64 scope link 
       valid_lft forever preferred_lft forever

Outsider1 は次のように構成されます。

[root@outsider1 ~]# ip route show
default via 192.168.100.1 dev eth0  proto static  metric 100 
192.168.100.0/24 dev eth0  proto kernel  scope link  src 192.168.100.100  metric 100 
[root@outsider1 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:03:c3:0a brd ff:ff:ff:ff:ff:ff
[root@outsider1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:03:c3:0a brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.100/24 brd 192.168.100.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe03:c30a/64 scope link 
       valid_lft forever preferred_lft forever

Outsider1からtester1 / server1へ、またはその逆にトラフィックフローを持つためには、ホストに静的ルートを作成する必要があると確信しています。しかし、実際に私を妨げるのは、tester1とserver1が互いに通信したり、デフォルトゲートウェイvirbr0とも通信できないことです。

どんなアイデアがありますか?

答え1

この設定は、多くの重要なパラメータが質問に表示されないことを意味します(iptables/使用されているステップ/カーネルネットワークの設定/br設定/など)。以下は、通信の問題を解決するいくつかの可能性です(メインホスト側)。

考えられる解決策:

名前が示すように、ブリッジインターフェイスは設定内の複数のネットワークインターフェイス間のゲートウェイです。

[KVM1-ETH0] <---> [Bridge][virbr0] <---> [Master][Bridge][virbr0-nic]
[KVM2-ETH0] <---> [Bridge][virbr1] <---> [Master][Bridge][virbr1-nic]

まず、2つのブリッジインターフェイスが必要な理由を理解しておらず、@LL3でインターフェイスがvirbr0-nic開いていないと言及した2番目の問題を理解していません。

第二に、よりきれいな設定は次のとおりです(必要に応じて異なります)。

[KVM1-ETH0] <---> [Bridge][virbr0] <---> [Master][Bridge][virbr0-nic]
[KVM2-ETH0] <---> [Bridge][virbr1] <---> [Master][Bridge][virbr0-nic]

または

[KVM1-ETH0] <---> [Bridge][virbr0] <---> [Master][enp0s31f6]
[KVM2-ETH0] <---> [Bridge][virbr0] <---> [Master][enp0s31f6]

または

[KVM1-ETH0] <---> [Bridge][virbr0]
[KVM2-ETH0] <---> [Bridge][virbr0]

考えられる解決策:

インポートしてvirbr0-nicvirbr1-nic必要に応じてIPを調整してください)

ifconfig virbr0-nic 192.168.122.254/24 up
ifconfig virbr1-nic 192.168.122.254/24 up

しかし、まだ接続されvirbr0-nicていませんvirbr1-nic

考えられる解決策:

メインインターフェイスを使用したい場合は、必要に応じてブリッジにメインインターフェイスとして追加できます。

ip link set enp0s31f6 master virbr0 
ip link set enp0s31f6 master virbr1

考えられる解決策:

iptables/ファイアウォールの設定を確認してください(Shorewallなどのファイアウォールを使用している場合など)。テスト目的で設定を開始する前に iptables を消去できます。

#Netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

考えられる解決策:

ホストルーティング/転送機能。一般に、ip_forwardブリッジインターフェイスが動作するためにカーネル機能は必要ありませんが、最初にブリッジが正しく設定されていない場合に役立ちます。 (ip_forwardを有効にするとマスターホストがルーターとして機能するため、本番環境ではiptablesまたは他のデバイスを使用して追加の予防措置が必要です。)

#Enabling ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward

考えられる解決策:

可能な解決策に応じip_forwardて、マスカレーディングを使用して、ブリッジトラフィックに特定のインターフェイスを使用させることができます。

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24  -j MASQUERADE 

この例では、IP 192.168.0.0/24を使用するブリッジからのトラフィックがeth0に転送されます(必須ip_forward)。

考えられる解決策:

macvlan、ipvlan、vethインターフェイスなどの他の設定ソリューション(ブリッジインターフェイスを除く)を検討できます。(一部例)

関連情報