質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
KVM

KVM【Kernel-based Cirtual Machine】は、 Linux上で仮想化環境を利用するためのソフトウェアです。 1台のPC上で複数のOSを同時に動作させるために必要な制御を行う 仮想化環境の仕組みを提供します。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Q&A

解決済

2回答

6008閲覧

KVM仮想マシンにグローバルIPを割り当てて内部⇔外部通信ができるようにしたい。

color777

総合スコア5

KVM

KVM【Kernel-based Cirtual Machine】は、 Linux上で仮想化環境を利用するためのソフトウェアです。 1台のPC上で複数のOSを同時に動作させるために必要な制御を行う 仮想化環境の仕組みを提供します。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

0グッド

0クリップ

投稿2020/02/06 12:34

編集2020/02/10 02:03

前提・実現したいこと

KVM仮想マシンにグローバルIPを割り当てて内部⇔外部通信ができるようにしたいです。
当方ネットワークについてあまり明るくないためご教授いただけますと幸いです。

レンタルサーバーでCentos7.7の物理マシンを構築し
KVMにて仮想マシンを立てました。(Centos7.7)

物理マシン用のグローバルIPの他に追加でグローバルIPを割り当てていただいたのですが、
物理マシンのIPとセグメントが違うという状況です。

物理マシン用グローバルIP 152.xxx.xx.10
追加用グローバルIP 200.xxx.xx.64~200.xxx.xx.79

今回、仮想マシンに 200.xxx.xx.70を設定し内部⇔外部との通信ができるようにしたいです。

色々調べたのですが、どこをどのように設定すればいいのかわからず詰まっています。
肝となる点は、ホストマシンのIP(152.xxx.xx.10)と仮想マシンのIP(200.xxx.xx.70)がネットワークセグメントが違うIPだというところです・・・。
どんなことでもかまいません。お気づきの点など、どうかご教授をお願いいたします。

###設定した内容

#######ホスト側
・macvlanインターフェースをブリッジモードで作成 (vmac0)

# ip link add link eno1 name vmac0 type macvlan mode bridge # ip link set dev vmac0 up

・ホスト側NIC(eno1)に追加IPを設定(200.xxx.xx.66)

# nmcli c mod eno1 +ipv4.addresses 200.xxx.xx.66/28

・arp_ignore、arp_announce、rp_filter設定
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.rp_filter=2
net.ipv4.conf.all.arp_ignore = 1

#######ゲスト(仮想マシン)側
・IPアドレス、ゲートウェイ、DNS設定
IPアドレス:200.xxx.xx.70
ゲートウェイ:152.xxx.xx.1 (ホスト側で設定したのと同じもの)
DNS:ホスト側で設定したのと同じもの

・macvtap(ブリッジ)でホスト側macvlanインターフェース(vmac0)と接続
設定内容は以下

<interface type='direct'> <mac address='52:50:00:aa:xx:20'/> <source dev='vmac0' mode='bridge'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>

発生している問題

仮想マシンから外部への接続、外部から仮想マシンへの接続ができません。
ping にて仮想マシンから8.8.8.8へ疎通確認をしたところ、ICMP echo replyが物理側NIC(eno1)まで届いたことは確認しましたが、ICMP host 200.xxx.xx.70 unreachable が8.8.8.8へ返されています。
外部から仮想マシンへpingすると、Destination Host Unreachableとなります。

以下内容です。

ping ゲストから8.8.8.8
■ゲスト(仮想マシン)(200.xxx.xx.70)

#ping -c 3 8.8.8.8 PING 8.8.8.8(8.8.8.8) 56(84) byts of data. --- 8.8.8.8 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2000ms

■ホスト側(152.xxx.xx.10) tcpdump 抜粋

#tcpdump -e -n -i eno1 host 8.8.8.8 or 200.xxx.xx.70 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes 16:19:06.762863 52:50:00:aa:xx:20 > 00:00:5e:00:01:bb, ethertype IPv4 (0x0800), length 98: 200.xxx.xx.70 > 8.8.8.8: ICMP echo request, id 2988, seq 1, length 64 16:19:06.763862 74:8e:f8:60:fa:xx > 91:1b:0e:d2:ec:xx, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 200.xxx.xx.70: ICMP echo reply, id 2988, seq 1, length 64 16:19:06.763894 91:1b:0e:d2:ec:xx > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 200.xxx.xx.70 tell 200.xxx.xx.66, length 28                 : 16:19:09.769126 91:1b:0e:d2:ec:xx > 00:00:5e:00:01:bb, ethertype IPv4 (0x0800), length 126: 152.xxx.xx.10 > 8.8.8.8: ICMP host 200.xxx.xx.70 unreachable, length 92

ping 外部から仮想マシン

# ping -c 3 200.xxx.xx.70 PING 200.xxx.xx.70 (200.xxx.xx.70) 56(84) bytes of data. From 152.xxx.xx.10 icmp_seq=1 Destination Host Unreachable From 152.xxx.xx.10 icmp_seq=2 Destination Host Unreachable From 152.xxx.xx.10 icmp_seq=3 Destination Host Unreachable --- 200.xxx.xx.70 ping statistics --- 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 3022ms

試したこと

・ネットワークマネージャを停止 →状況かわらず
・ホスト物理NIC(eno1)の追加IP(200.xxx.xx.66)を外す
→外部から仮想ホストへのpingがTime to live exceededとなる。
(ゲートウェイ⇔ホスト間をTTLが切れるまで往復している)
・ゲストのGWを変えてみる 152.xxx.xx.1から200.xxx.xx.66
→pingを仮想マシンから外部へ打つとtcpdumpで見ると、ARPしか飛んでいない
```
#tcpdump 抜粋(eno1) ※macvtap,vmac0でも同じ
16:19:06.763894 52:50:00:aa:xx:20 > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 200.xxx.xx.66 tell 200.xxx.xx.70, length 28

### 気づいたこと 仮想マシン200.xxx.xx.70へのARPリクエストに対して解決できていない気がします。 物理マシン→仮想マシンの接続がうまくいっていません。 物理マシンが仮想マシンを認識できていないのか、macvtapではできないのか、 その辺は不明です。 ### 補足情報 ルーティングテーブル・ARPテーブル

ip r

default via 152.xxx.xx.1 dev eno1
152.xxx.xx.0/24 dev eno1 proto kernel scope link src 152.xxx.xx.10
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
200.xxx.xx.64/28 dev eno1 proto kernel scope link src 200.xxx.xx.66

#ip nei
:
200.xxx.xx.70 dev eno1 FAILED
:

######ネットワーク構成図 ![構成図](f43ce168dcc293833df67c986ad5171c.png) ### 追加で確認した事項 **ホストとゲストをmacvtapで接続する** ホスト側eno1とゲストマシンをmacvtap接続設定を行う。 インターフェース設定は以下
<interface type='direct'> <mac address='52:50:00:aa:xx:20'/> <source dev='eno1' mode='bridge'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
ip addres show(ホスト側) ```ここに言語を入力 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 91:1b:0e:d2:ec:xx brd ff:ff:ff:ff:ff:ff inet 152.xxx.xx.10/24 scope global eno1 valid_lft forever preferred_lft forever inet 200.xxx.xx.66/28 scope global eno1 valid_lft forever preferred_lft forever inet6 2001:e42:103:3:153:xxx:aa:xx/64 scope global noprefixroute valid_lft forever preferred_lft forever inet6 fe80::921b:eff:xxxx:xxxx/64 scope link noprefixroute valid_lft forever preferred_lft forever : : 23: macvtap0@eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/ether 52:50:00:aa:xx:20 brd ff:ff:ff:ff:ff:ff inet6 fe80::5054:ff:xxxx:xxxx/64 scope link valid_lft forever preferred_lft forever

疎通確認(ゲストから8.8.8.8へping)
前回と状況は変わりませんでした。
・eno1のtcpdumpの内容

# tcpdump -n -e -i eno1 host 200.xxx.xx.70 or 8.8.8.8 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eno1, link-type EN10MB (Ethernet), capture size 262144 bytes 09:24:06.740146 52:50:00:aa:xx:20 > 00:00:5e:00:01:bb, ethertype IPv4 (0x0800), length 98: 200.xxx.xx.70 > 8.8.8.8: ICMP echo request, id 2787, seq 1, length 64 09:24:06.741053 74:8e:f8:60:fa:xx > 91:1b:0e:d2:ec:xx, ethertype IPv4 (0x0800), length 98: 8.8.8.8 > 200.xxx.xx.70: ICMP echo reply, id 2787, seq 1, length 64 09:24:06.741099 91:1b:0e:d2:ec:xx > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 200.xxx.xx.70 tell 200.xxx.xx.66, length 28 09:24:07.743113 91:1b:0e:d2:ec:xx > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 200.xxx.xx.70 tell 200.xxx.xx.66, length 28 09:24:08.745103 91:1b:0e:d2:ec:xx > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 200.xxx.xx.70 tell 200.xxx.xx.66, length 28 09:24:09.747111 91:1b:0e:d2:ec:xx > 00:00:5e:00:01:bb, ethertype IPv4 (0x0800), length 126: 152.xxx.xx.10 > 8.8.8.8: ICMP host 200.xxx.xx.70 unreachable, length 92

・ゲスト側ping結果
1 packets transmitted, 0 received, +3 errors, 100% packet loss, time 0ms

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

いったん他の方法を検討してみようと思います。
ご回答ありがとうございました!

投稿2020/02/10 07:48

編集2020/02/10 07:49
color777

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まず、ホスト側は eno1 (152.xxx.xx.10) と virbr0 (これは使わない) だけの状態にして、ゲスト側で「Network source: Host device eno1: macvtap」、「Source mode: Bridge」(<source dev='eno1' mode='bridge'/>)とすると、通信できませんでしょうか?
ホスト側 ip addrress show では、eno1 (152.xxx.xx.10) と macvtap0@eno1 (IPアドレス付かない) が見えると思います。

次に、152.xxx.xx.10 を macvtap にするのであれば、質問文の方法で、vmac0@eno1 インターフェースを作成して IPアドレスを移すといいと思います。
この場合、仮想マシンの設定はそのまま(<source dev='eno1' mode='bridge'/>)です。


(2020/02/10 21:36) 追記

ホストの eno1 に 200.xxx.xx.66 を付けているのは、外部→200.xxx.xx.64〜79 の疎通確認のためでしょうか?
外部→200.xxx.xx.66 の ping が通るのであれば、間のルーター(152.xxx.xx.1)の設定は問題ないと思います。

ゲスト(200.xxx.xx.70) - 152.xxx.xx.1 (ルーター) の疎通はできますか?
できないのであれば、[guest]# arping -I eno1 152.xxx.xx.1 でゲストから 152.xxx.xx.1 の ARP 解決できるか、確認ください。
応答がないのであれば、macvlan/macvtap に問題がありそう。
応答がある(ARP 解決できる)のであれば、arping OK、ping NG なので、ルーティングの設定を確認。

投稿2020/02/08 15:48

編集2020/02/10 12:38
TaichiYanagiya

総合スコア12173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

color777

2020/02/10 01:43

ご回答いただきましてありがとうございます! TaichiYanagiyaに教えていただいた方法でホスト、ゲストを接続し疎通確認を行いましたが、残念ながら結果は変わりませんでした。(追加で確認した事項に追記いたしました) おそらく、ゲストマシンのIPがホストの代表IPと同じネットワークのもの(152.xxx.xx.20など)であればTaichiYanagiyaに教えていただきました方法で問題なくつながるのだろうと思います。 ただ、今回はホストマシンとゲストマシンのネットワークが違うのがネックとなっている気がします。 この点をクリアできる方法などございましたらご教授いただけますとありがたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問