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

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

ただいまの
回答率

88.78%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 701

color777

score 5

前提・実現したいこと

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
  :
ネットワーク構成図

構成図

追加で確認した事項

ホストとゲストを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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

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/10 10:43

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

    キャンセル

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る