Vagrantの「synced_folder」でマウントしようと思ったらノートン360に邪魔されてた話

Docker全盛だけど、未だにVagrant(VirtualBox)を使う機会があってですね。
Vagrantの起動のタイミングでローカルの指定ディレクトリをマウントする機能(synced_folder)をVagrantfileに記述したら、エラーが表示されたのでその現象を解決した話です。

# 今回の実行環境
- macOS Catalina 10.15.７
- Vagrant 2.2.14
- VirtualBox 6.1.18
- ノートン360 8.6.4

# config.vm.synced_folder の使い方
VagrantのドキュメントにSynced Foldersの[Basic Usageのページ](https://www.vagrantup.com/docs/synced-folders/basic_usage)があるので、このページを参考に今回は以下のように設定してみました。
Vagranfileを置いているカレントディレクトリをVagarantのBox内の「/vagrant」に割り当てるという設定にしています。

```:Vagrantfile
config.vm.synced_folder ".", "/vagrant", :nfs => true
```

# 発生したエラーの内容

上記の設定を行ってVagrantを起動すると以下のエラーが発生しました。

```
% vagrant up
Bringing machine 'default' up with 'virtualbox' provider..
・
・
・
==> default: Mounting NFS shared folders...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mount -o vers=3,udp 192.168.33.1:/System/Volumes/Data/Users/akase244/synced_test/vagrant

Stdout from the command:



Stderr from the command:

mount.nfs: Connection timed out
```

エラー内容の最後の１行に「mount.nfs: Connection timed out」という記載があり、この情報を頼りにググってみると同じエラーが発生したという記事がいくつか見つかりましたが、解決までには至りませんでした。

# ノートン360の存在を思い出す
色々と試行錯誤したあとに、このMacは業務用PCなので「ノートン360」をインストールしていることを思い出しました。
ノートン360のファイアウォールが原因かも。ということを閃いたので、以下の手順を試しました。

1. Macのネットワーク設定から有線LANとWiFiをオフに。（業務用PCを危険に晒すわけにはいかないので）
1. ノートン360のファイアウォールをオフに。
1. Vagrantを起動。
1. 以下のように仮想環境にログインして、「/vagrant」配下にマウントされていることが確認できました。

```
% vagrant ssh
$ ls -l /vagrant
合計 16
-rw-r--r-- 1 501 games 551  6月  9 14:46 Vagrantfile
-rw-r--r-- 1 501 games  38  6月  6 10:06 ansible.cfg
-rw-r--r-- 1 501 games  33  6月  6 09:39 hosts
-rwxr-xr-x 1 501 games 134  6月  6 09:11 playbook.yml
drwxr-xr-x 6 501 games 192  6月  5 15:26 roles
```

はい、見事に当たりです。ということで、ノートン360の設定状況を確認して解決していきます。

# ノートン360のログを確認
ノートン360の設定画面を開き、「アクティビティ」から「セキュリティ履歴」をクリックします。
![スクリーンショット_2021-06-09_15_31_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/b9eaa4f5-0725-eb83-8298-f1fe69297dca.png)

セキュリティ履歴画面のファイアウォールの「接続の遮断」という項目に、Vagrantfileの「config.vm.network "private_network"」で指定したIP(192.168.33.10)とlocalhost(127.0.0.1)が遮断されている記録がありました。
Vagrantfileの「config.vm.synced_folder」では「:nfs => true」のようにNFSを指定していました。
rpcbindはNFSで利用されるプロトコルですね。もう、絶対にこれやん。。。
![スクリーンショット_2021-06-09_15_33_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/e60c083d-e5e3-dcf8-e446-589f96ba8a01.png)

# 解決方法
先程の「接続の遮断」の対象行を右クリックすると、「アドレスを信頼」という項目が表示されますのでこれを選択します。
![スクリーンショット 2021-06-09 15.38.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/53729b27-2967-3b40-14b0-dbf1414e2026.png)

今回はlocalhost(127.0.0.1)とVagrantfileの「config.vm.network "private_network"」で指定したIP(192.168.33.10)のどちらも許可するように設定しました。

# ノートン360の設定を確認
ノートン360の設定画面を開き、「ファイアウォール」のメニューの「接続の遮断」のスパナアイコンをクリックします。
![スクリーンショット_2021-06-09_15_41_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/425032be-c0b5-370d-35cc-5084d55247c7.png)

「表示する」のプルダウンを「ゾーン」に変更すると、先程「アドレスを信頼」を行ったアドレスが追加されていることが確認できました。
![スクリーンショット_2021-06-09_15_50_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/adff731c-4665-1696-77b3-b5918915dd6b.png)

# ノートン360のファイアウォールが有効な状態で「config.vm.synced_folder」が動作するか確認

今度は「default: Mounting NFS shared folders...」の後にエラーが発生せず正常に起動しました。

```
% vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
・
・
・
==> default: Mounting NFS shared folders...
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
```

仮想環境にログインして、「/vagrant」配下にマウントされていることも確認できました。めでたしめでたし。

```
% vagrant ssh
$ ls -l /vagrant
合計 16
-rw-r--r-- 1 501 games 551  6月  9 14:46 Vagrantfile
-rw-r--r-- 1 501 games  38  6月  6 10:06 ansible.cfg
-rw-r--r-- 1 501 games  33  6月  6 09:39 hosts
-rwxr-xr-x 1 501 games 134  6月  6 09:11 playbook.yml
drwxr-xr-x 6 501 games 192  6月  5 15:26 roles
```

# まとめ

今回のように普段使用している環境にインストールしているアプリケーションが思わぬ影響を与えていることもあるので、ググっても答えが見つからない場合は、一旦落ち着いて発生している問題の切り分けを行うことが大事だなぁと。

# おまけ
後日、再びVagrantの起動時にsynced_folderの処理に失敗するようになりました。
調べてみると、セキュリティ履歴画面のファイアウォールの「接続の遮断」の画面にまた「localhost」が遮断されている履歴が表示されていました。
前回の対応で確かに「127.0.0.1」については「アドレスを信頼」の対応を行ったはずです。

「接続の遮断」の画面で「アドレスを信頼」の対応を行った「localhost(127.0.0.1)」については、右クリックをするとこのように「アドレスの信頼を中止」と表示されるのですが。。。
![スクリーンショット 2021-06-15 20.38.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/780e59ed-97cb-23a9-79c4-2d576adaedc9.png)

新たに遮断されているアドレスを右クリックすると「localhost」にも関わらず、「アドレスを信頼」のメニューが表示されていました。これは？？？
![スクリーンショット 2021-06-15 20.37.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/d75d2478-6fb2-6c1c-7d2a-356440ac558e.png)

ワケがわからず「アドレスを信頼」をクリックしてみると答えがわかりました。正体は「::1」でした。
![スクリーンショット 2021-06-15 20.41.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23093/dd0fb667-de29-c315-de29-4b6051066280.png)

以下の方法IPv6を無効化してみましたが、

対象のサーバでIPv6を運用するのであれば「アドレスを信頼」の対応でもよいですが、利用しないのであれば `nmcli` コマンドでIPv6を無効化しておくという対応でもよさそうですね。


```
$ sudo nmcli connection modify インターフェース名 ipv6.method ignore
```

`nmcli connection show` でインターフェース名を確認して。

```
$ sudo nmcli connection show
NAME         UUID                                  TYPE      DEVICE 
System eth0  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  eth0   
System eth1  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  eth1  
ens3         XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  ethernet  --    
```

`nmcli connection modify` でインターフェース毎に無効化を行う。

```
$ sudo nmcli connection modify "System eth0" ipv6.method ignore
$ sudo nmcli connection modify "System eth1" ipv6.method ignore
```

もしくは `sysctl` コマンドを使って `/etc/sysctl.conf` に書き込む形でもよいかもです。

```
$ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
$ sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
$ sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
```