ときどきAnsible日記

主にITインフラ基盤の自動化に関する事を書いているブログです

VirtualBoxとRHEL7のネットワークにハマる

お疲れ様です。伊藤です。

前回RHEL7.3にDockerをインストールし、コンテナを作成するところまで実施しました。今回作成した環境ではVirtualBox上の仮想マシンにOSを入れ、そこにDockerをインストールし、そのコンテナにAnsibleを導入しています。が、実際は今まで書いてきたことをそのままやればよいだけです。Dockerコンテナを作成し、コンテナにログインした状態でyumを実行してansibleをインストールする、以上、です。それでは記事がここで終わってしまいますのでその際のハマりポイントを記載しておきます。


今回しょっぱなにはまったのはVirtualBox上の仮想マシンから外部に接続する部分およびRHEL7のネットワーク設定です。Dockerをインストールする際にyumでアクセスするのですが、この部分でまず外部に接続できないことに気づきました。そして自分のネットワークの知識が乏しいことにも気づくわけです。ハッ!(゚□゚;)


まず仮想マシンを作成する際に、ネットワークの構成を考えておきます。ややこしいことは置いておいて、仮想マシンからインターネットに接続するネットワークと、ホストOSから仮想マシンに接続するネットワークを分けておいた方が何かと便利です。つまり、外に出るときのIPとローカルからteraterm仮想マシンに繋ぐIPが異なるということです。
f:id:pj_doaa:20170821105706p:plain
※図のIPは適当です!


VirtualBoxで利用できるネットワークは以下のものがあります。

  • 未割り当て
  • NAT
  • NATネットワーク
  • ブリッジアダプター
  • 内部ネットワーク
  • ホストオンリーアダプター
  • 汎用ドライバー


この中で外部インターネットに接続する際にはNAT、ホストOSからゲストOSへ接続する際にはホストオンリーアダプターを使用します。VirtualBoxの右側のツリーでマシンを選択し、設定ボタンを押すと下記の設定画面が出ます。
f:id:pj_doaa:20170725103102p:plain

ここでネットワークを選択し、アダプター1にNAT
f:id:pj_doaa:20170725102913p:plain

アダプター2にホストオンリーアダプターを選択
f:id:pj_doaa:20170725102917p:plain

そうすることで仮想マシンには2枚のNICが刺さった状態となり、IPも二つ割り振ることができます。
あとはサーバに接続して、IPを割り振ります。ここRHEL7系になじみのない方は少々はまることがあるかと思います。ネットワークの設定を見ようと思いifconfigなんて打ってもRHEL7ではデフォルトでそんなコマンドはありません。

[root@RHEL7 ~]# ifconfig
-bash: ifconfig: コマンドが見つかりません

RHEL7系でネットワークの設定を見るのはipコマンドになります。

[root@RHEL7 ~]# 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: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:ea:ed:00 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:01:ad:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.xxx scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe01:ad56/64 scope link
       valid_lft forever preferred_lft forever

そしてIPの設定を行うのはRHEL6のように/etc/sysconfig/network-scripts/ifcfgxxファイルを編集でも良いのですがnwtuiコマンドがあります。

# nmtui

以下のような画面が出ますので、NICを選択して、IPの設定をしていきましょう。
f:id:pj_doaa:20170725104348p:plain

f:id:pj_doaa:20170725104406p:plain

f:id:pj_doaa:20170725104425p:plain

設定後にはNICがアクティベート(リンクアップ)しているか確認しましょう。
f:id:pj_doaa:20170725104645p:plain

アスタリスクがついているNICがアクティベートされています。
f:id:pj_doaa:20170725104722p:plain

これでネットワークに接続する準備が出来ました。早速つないでみましょう。dockerサービスを起動してイメージをpullします。

[root@RHEL7 ~]# docker pull rhel7.3
Using default tag: latest
Trying to pull repository registry.access.redhat.com/rhel7.3 ...
Trying to pull repository docker.io/library/rhel7.3 ...
Pulling repository docker.io/library/rhel7.3
Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/rhel7.3/images. You may want to check your internet connection or if you are behind a proxy.

あれえ。。。


どうやらネットワークに接続できていないようです。ここで色々と調べてみて原因はルーティングにあることがわかりました。スタティックルートを見るときもRHEL7はipコマンドです。下記で見れます。

[root@RHEL7 ~]# ip route
default via 192.168.1.1 dev enp0s8  proto static  metric 100
default via 10.0.2.2 dev enp0s3  proto static  metric 101
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.15  metric 100
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1
192.168.1.0/24 dev enp0s8  proto kernel  scope link  src 192.168.1.100  metric 100

ここで問題はdefaultです。今回ネットワークを二つ追加して、外部に出るのは10系、内部は192系にしましたが、デフォルトルートが192のほうが上になってしまっているのでそちらを見に行ってしまって外部にでれていない模様。これを消します。

[root@RHEL7 ~]# ip route del default
[root@RHEL7 ~]# ip route
default via 10.0.2.2 dev enp0s3  proto static  metric 101
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.15  metric 100
172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1
192.168.1.0/24 dev enp0s8  proto kernel  scope link  src 192.168.1.100  metric 100

少々乱暴ですが192系のルートだけ消えました。
これで外に出れるはずなので、もう一度docker pull実行!

[root@RHEL7 ~]# docker pull rhel7.3
Using default tag: latest
Trying to pull repository registry.access.redhat.com/rhel7.3 ...
latest: Pulling from registry.access.redhat.com/rhel7.3
d55ab3b04d8b: Already exists
b94f985aad49: Already exists
Digest: sha256:a665801d0c3a5d0463d79568568371500b6f27e6736532dae065b0ae592a70e6

ここではすでにイメージを取得しているのですでにあるよメッセージが出ました。
無事にネットワーク接続できたようです。お疲れ様でした。