2018.05.17 · 技術と道具

Dockerを入れたらKVMのゲストOS(Bridge接続)から外部に出られなくて困った

先日、導入したZOTAC MAGNUS EN1070KにUbuntu 16.04 LTSを入れて、KVMも入れて、Windows10やらCentOS7を入れて・・・ということをしていたのですが、急にゲストOS側から外部に出られなくなって困りました。

KVMやらの導入の顛末も書かずに、いきなりトラブルシューティングな記事を書くというのもどうかと思いますが、この問題で数時間を無駄にしてしまったので、書いておくことにします。

最初に気づいたのはWindows10にRDPできない

ゲストOSから外部に出られないというのは、Windows10からダメだというだけでなく、同じゲストOSとして導入しているCentOS7からもダメだということが分かって、どうやらWindows10の問題ではなさそうだ・・・ということが分かったからです。

で、そのもっと前には、ホストOSや別マシンからWindows10にRDPで接続できないということに気づいて、困ったな・・・ということから、このトラブルシューティングが始まりました。(でも、CentOS7にSSH接続することはできるんだよね・・・)

そんなこんなで、Windows10の再インストールまでもやったのに、それでもダメだったというか、IPv6でだけは通信出来るけど、IPv4ではダメだったとか、いろいろ。

どうやらホストOSにDockerを入れたのが原因らしい

いろいろ調べたり試したりしたところ、つい最近、ホストOSにDockerを入れたことに気づきました。ホストOSとゲストOSはKVMでデフォルトのNAT(virbr0)ではなく、ホストOSの物理NICに接続したブリッジ(br0)にして外部からゲストOSに接続する形にしているのですが、Dockerも独自のブリッジを作るので、その辺が関係しているのではないかとか・・・。

askubuntuにWith Ubuntu 16.04 and KVM, I can’t get vms to network without using NATという記事があって、これで解決しました。

具体的には、下記のような操作を行います。

99-bridge.rulesファイルを新規作成する

BASH
cat /etc/udev/rules.d/99-bridge.rules 
ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", RUN+="/lib/systemd/systemd-sysctl --prefix=/net/bridge"

bridge.confファイルを新規作成する

BASH
cat /etc/sysctl.d/bridge.conf 
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

あとはホストOSを再起動すれば、ゲストOSから外部に出られるようになりました。

理由は定かではありませんが、askubuntuのやり取りを見ると、Dockerをインストールした際に設定が書き換わったのではないか?ということでした。

もちろん、Windows10へのリモートデスクトップ接続も可能になりました。

2018/05/17 16:18
← 平成29年度 中堅・中小企業向けIoTツール・レシピ情報とり…
6/22・東京 「Watson Studio集中講座(ハンズ… →
井上 研一
経済産業省推進資格ITコーディネータとして中小企業のDX・AI活用の現場で伴走支援を行う。「ITCプロセスガイドライン4.0」および「中小企業向けAI活用ガイド」執筆メンバー。著書・講演多数。ITエンジニアとして25年以上の実務経験。AI導入の実務に10年以上携わる。自ら開発したAIサービス「Gen2Go」が北九州発!新商品創出事業の認定を受ける。2026年4月より北九州市立大学大学院マネジメント研究科の学生としての顔も持つ。

本サイトおよびブログに掲載している内容は、特に明記のない限り、井上研一個人の見解に基づくものです。所属・関与する組織、団体、企業、研究会等の公式見解を示すものではありません。