VirtualBoxとRHEL7のネットワークにハマる
お疲れ様です。伊藤です。
前回RHEL7.3にDockerをインストールし、コンテナを作成するところまで実施しました。今回作成した環境ではVirtualBox上の仮想マシンにOSを入れ、そこにDockerをインストールし、そのコンテナにAnsibleを導入しています。が、実際は今まで書いてきたことをそのままやればよいだけです。Dockerコンテナを作成し、コンテナにログインした状態でyumを実行してansibleをインストールする、以上、です。それでは記事がここで終わってしまいますのでその際のハマりポイントを記載しておきます。
今回しょっぱなにはまったのはVirtualBox上の仮想マシンから外部に接続する部分およびRHEL7のネットワーク設定です。Dockerをインストールする際にyumでアクセスするのですが、この部分でまず外部に接続できないことに気づきました。そして自分のネットワークの知識が乏しいことにも気づくわけです。ハッ!(゚□゚;)
まず仮想マシンを作成する際に、ネットワークの構成を考えておきます。ややこしいことは置いておいて、仮想マシンからインターネットに接続するネットワークと、ホストOSから仮想マシンに接続するネットワークを分けておいた方が何かと便利です。つまり、外に出るときのIPとローカルからteratermで仮想マシンに繋ぐIPが異なるということです。
※図のIPは適当です!
VirtualBoxで利用できるネットワークは以下のものがあります。
- 未割り当て
- NAT
- NATネットワーク
- ブリッジアダプター
- 内部ネットワーク
- ホストオンリーアダプター
- 汎用ドライバー
この中で外部インターネットに接続する際にはNAT、ホストOSからゲストOSへ接続する際にはホストオンリーアダプターを使用します。VirtualBoxの右側のツリーでマシンを選択し、設定ボタンを押すと下記の設定画面が出ます。
ここでネットワークを選択し、アダプター1にNAT
アダプター2にホストオンリーアダプターを選択
そうすることで仮想マシンには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の設定をしていきましょう。
設定後にはNICがアクティベート(リンクアップ)しているか確認しましょう。
アスタリスクがついているNICがアクティベートされています。
これでネットワークに接続する準備が出来ました。早速つないでみましょう。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
ここではすでにイメージを取得しているのですでにあるよメッセージが出ました。
無事にネットワーク接続できたようです。
以上です。お疲れ様でした。