ゲストOS(CentOS)上のWEBサーバーをホストOS(Windows)から閲覧する

二つ目のNICの接続

ゲスト⇔ホスト間の通信に、今回は「ホストオンリーアダプター」を使います。 まだ設定できていない人は

3. VirtualBOX に CentOS7を登録する(仮想マシンの初期設定) - 授業のメモ

の「二次設定」の欄を読んで VirtualBox側の二つ目のNICに「ホストオンリーアダプター」を設定してください。続けて、

18. ftpサーバーの導入。ftp で wordpress のファイルをサーバーにアップロードする - 授業のメモ

を読んで「CentOS に接続するための IPアドレスの確認」と、CentOS側のNICの設定を確認してください。

$ ip a
~(前略)~
2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:8d:83:c6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3(ゲスト⇔インターネット間の接続用)
       valid_lft 82970sec preferred_lft 82970sec
    inet6 fe80::a00:27ff:fe8d:83c6/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:9e:3d:08 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.103/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s8(ゲスト⇔ホスト間の接続用)
       valid_lft 872sec preferred_lft 872sec
    inet6 fe80::e429:3ee:be45:1637/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Windowsのブラウザを開きアドレス欄に上記で調べたIPアドレスを入力します。ただ、この時点ではサイトは閲覧できません。ファイヤーウォールの設定をしていないからです。

f:id:hirose-test:20190113171953j:plain

$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2019-01-13 17:11:17 JST; 57s ago (起動中)
 ~(後略)~

試しにファイヤーウォールを一旦止めてみましょう。

$ systemctl stop firewalld
$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 日 2019-01-13 17:22:46 JST; 23s ago (停止中)
 ~(後略)~

f:id:hirose-test:20190113172724j:plain

閲覧できるようになりました。とはいえファイヤーウォール全停止は不用心なので、次はファイヤーウォールを起動させた上で http 通信を通過できるよう設定します。

$ systemctl start firewalld
$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2019-01-13 17:29:26 JST; 6s ago
 ~(後略)~

繋がらない状態に戻る。 f:id:hirose-test:20190113185313j:plain

始めにGUIでの設定について説明します(CUIは後半)

アプリケーションランチャーから ファイヤーウォールを立ち上げます。(検索窓に firewall と打ち込みます。今後のためにアプリを右クリックして「お気に入りに追加」しておきましょう)

f:id:hirose-test:20190113184346j:plain

設定には管理者の権限が必要となりますので、管理者のパスワードを入力し [認証] をクリックします。

Firewalld

Firewalld はパケットフィルタリングの処理とアドレス変換の処理を簡易にするために、ゾーンという概念を導入しています。ゾーンはネットワークインタフェースを安全性や用途によってグループ化したものです。Firewalld では、このゾーンに対してルールを定義します。

パケッ卜フィルタリングの設定

パケットフィルタリングの設定には「実行時設定」と「永続設定」があります。

  • 実行時設定
    パケットフィルタリングの ”設定を変更した瞬間に、設定が有効になります”。(間違って ssh のチェックなどを外してしまうと即切断されます)しかし、 実行時設定は一時的な設定です。パケットフィルタリングルールを再読み込みしたり、システムが再起動すると削除されます。 簡単にサービスの許可、拒否を切り替えることができるため、接続確認テストなど一時的に設定を変えたいときに利用します。

  • 永続設定
    パケットフィルタリングの設定を変更後 ”パケットフィルタリングルールの再読み込みを行うと有効”になります。この設定は、永続的な設定でシステムを再起動しても失われません。

まず実行時設定を試してみましょう。

「ホスト⇔ゲスト通信用のNIC(内向き)」「ゲスト⇔インターネット通信用のNIC(外向き)」共に、初期状態では「ゾーン:public」となっています。DNSの設定などの際に変更するかと思いますがとりあえず「public」でいきます。

というわけで「設定:実行時」→「ゾーン」→「public」と順に選択し「http」にチェックを付けます。すると即時反映され、ホストOSからWEBサーバーに繋がるようになります。

f:id:hirose-test:20190113190206j:plain

f:id:hirose-test:20190113172724j:plain

ただ、先ほど書いた通り、「実行時」設定は
ファイヤーウォールの設定を再読み込み# firewall-cmd --reload
ファイヤーウォールを再起動# systemctl restart firewalldしたり、システムを再起動すると「チェックを付ける前の状態」に戻ってしまいます(「永続的な設定」の方の設定を取り込む)。

f:id:hirose-test:20190113190447j:plain

というわけで永続設定を行います。

先ほどの選択時に「永続」を選ぶだけです。

f:id:hirose-test:20190113191603j:plain

永続設定は「ファイヤーウォール設定の再読み込み」を行わないと反映されないので、「オプションタブ」→「Firewalld の再読み込み」とクリックします。

f:id:hirose-test:20190113191613j:plain

今度は「http」にチェックがついたままです。そして「永続時設定」が現在の「実行時設定」となり、実行時設定の「http」にもチェックが付きます。

f:id:hirose-test:20190113192745j:plain

以上で、ファイヤーウォールを通過しつつ、ホストOSからゲストOSのWEBサーバーを見に行くことができるようになります。

f:id:hirose-test:20190113172724j:plain

CUIでの設定 後で。

$ firewall-cmd --get-zone-of-interface=enp0s8 public

/* -----codeの行番号----- */