Vagrant で CentOS7 を動かしてみたときに知っているコマンドが使えなくて困った話

こんにちは。

今更 Vagrant の話になって恐縮ですが、手でコマンド叩いて確認したいことがあって、CentOS7環境をつくりました。

$ vagrant init centos/7

$ vagrant up

$ vagrant ssh

これで VM にログインまでできました。さらに、httpd のインストール@vagrant

# yum install -y httpd

次にローカルの Vagrantfile を編集し、ブラウザからアクセスできようにします。

$ cat Vagrantfile| grep private_network
   # config.vm.network "private_network", ip: "192.168.33.10"

$ vi Vagrantfile #上記をコメントアウト

$ vagrant reload

$ cat Vagrantfile| grep private_network
   config.vm.network "private_network", ip: "192.168.33.10"

ただ、 この時点でブラウザからアクセスできません。。。困った。

結局問題だったのは、以下の2点です。 - VM 側でネットワークアダプタが認識されていない - firewalld に http が弾かれている

VM 側でネットワークアダプタが認識されていない

あるあるですがこの調査ではよく ifconfig を叩いてます。よし、、、

# ifconfig
-bash: ifconfig: command not found

Oops… command not found. だと。。。

そういえば、ifconfig を使うのはおっさんだ という話を思いだしました。若者は ip を使うみたいですね。

# ip -a
・・・
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether 08:00:27:95:72:f8 brd ff:ff:ff:ff:ff:ff

よくわからないけど 192.168.33.10 が書いてないので shutdown -r で再起動。再度確認します。

# ip a
・・・
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:95:72:f8 brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe95:72f8/64 scope link
       valid_lft forever preferred_lft forever

今度は大丈夫そうですね。

再び、ブラウザからアクセス、、、するもダメでした。

firewalld に http が弾かれている

それじゃ iptable かなと思ってvi /etc/sysconfig/iptablesを確認するも"/etc/sysconfig/iptables" [New File]がでてファイルがありません。

調べると CentOS7 からは firewalld というサービスが使用されているみたいです。

firewall-cmd を確認するも sshしか許可されていません。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:
# vi /etc/firewalld/zones/public.xml # <service name="http"/> を追加
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <service name="http"/>
</zone>

再起動

# systemctl restart firewalld

確認

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

まとめ

これでブラウザからアクセスができました。

補遺

CentOS6 の時はservice httpd start, chkconfig httpd on のように使ってましたが、CentOS7 からは systemctl を使うとのことでした(エイリアスになっている)。

サービスの起動

# systemctl start httpd

サービスの自動起動を on

# systemctl enable httpd

サービスの停止

# systemctl stop httpd

サービスの自動起動を off

# systemctl disable httpd