ポートフォワードが増えてきた

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ vagrant reload
==> plasma: Attempting graceful shutdown of VM...
==> plasma: Clearing any previously set forwarded ports...
==> plasma: Clearing any previously set network interfaces...
==> plasma: Preparing network interfaces based on configuration...
plasma: Adapter 1: nat
plasma: Adapter 2: hostonly
==> plasma: You are trying to forward to privileged ports (ports <= 1024). Most
==> plasma: operating systems restrict this to only privileged process (typically
==> plasma: processes running as an administrative user). This is a warning in case
==> plasma: the port forwarding doesn't work. If any problems occur, please try a
==> plasma: port higher than 1024.
==> plasma: Forwarding ports...
plasma: 80 (guest) => 80 (host) (adapter 1)
plasma: 3000 (guest) => 3000 (host) (adapter 1)
plasma: 3306 (guest) => 3306 (host) (adapter 1)
plasma: 4444 (guest) => 4444 (host) (adapter 1)
plasma: 5000 (guest) => 5000 (host) (adapter 1)
plasma: 13000 (guest) => 13000 (host) (adapter 1)
plasma: 15900 (guest) => 15900 (host) (adapter 1)
plasma: 15901 (guest) => 15901 (host) (adapter 1)
plasma: 19030 (guest) => 19030 (host) (adapter 1)
plasma: 17030 (guest) => 17030 (host) (adapter 1)
plasma: 16080 (guest) => 16080 (host) (adapter 1)
plasma: 16881 (guest) => 16881 (host) (adapter 1)
plasma: 16882 (guest) => 16882 (host) (adapter 1)
plasma: 16883 (guest) => 16883 (host) (adapter 1)
plasma: 16443 (guest) => 16443 (host) (adapter 1)
plasma: 15053 (guest) => 15053 (host) (adapter 1)
plasma: 15052 (guest) => 15052 (host) (adapter 1)
plasma: 14043 (guest) => 14043 (host) (adapter 1)
plasma: 13033 (guest) => 13033 (host) (adapter 1)
plasma: 11012 (guest) => 11012 (host) (adapter 1)
plasma: 11013 (guest) => 11013 (host) (adapter 1)
plasma: 22 (guest) => 2222 (host) (adapter 1)

そろそろポートフォワード設定が増えすぎてきて、nginxの設定もごちゃごちゃになってきているのと、スマホと同じネットワークに入れたかったので、ホストオンリーアダプタの設定をしました

ホストオンリーアダプタを使うと、ホスト上に、ホストとゲストの間だけから見えるプライベートなネットワークを構築する事が出来ます

ホスト:Vagrantfile

最初、「ホストオンリーアダプタがあればNATいらなくね?」って思ったんですが、Vagrantを使用する場合は、デフォルトで使用されるNATのアダプタを持っておく必要があります

(参考) How can I define network settings with vagrant - Stack Overflow

よってここでは、Vagrantがデフォルトで使用するNAT(アダプタ1)に加え、ホストオンリーアダプタ(アダプタ2)を追加し、NAT+ホストオンリーアダプタという構成にします。

Vagrantfileに、ホストオンリーアダプタの設定を追加します

1
2
3
Vagrant.configure(2) do |config|
config.vm.network "private_network", ip: "192.168.56.100" # ホストオンリーアダプタの設定
end

(参考) よく使うVagrantfileの設定のまとめ

ホスト:vagrant up

vagrant upすると、Adapter 2: hostonlyという表示が出ます

1
2
3
4
5
6
7
8
$ vagrant up

==> plasma: Attempting graceful shutdown of VM...
==> plasma: Clearing any previously set forwarded ports...
==> plasma: Clearing any previously set network interfaces...
==> plasma: Preparing network interfaces based on configuration...
plasma: Adapter 1: nat
plasma: Adapter 2: hostonly ←これ

ゲスト:ネットワーク設定

ここでゲスト側で、ip addrすると、新しいインターフェイスが追加されてるのが確認出来ると思います

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 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 group default qlen 1000
link/ether 08:00:27:64:3d:2e brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet 192.168.56.100/24 brd 192.168.56.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe64:3d2e/64 scope link
valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:d9:d8:b7 brd ff:ff:ff:ff:ff:ff

ここでは、enp0s8というのが追加されています。これがホストオンリーアダプタのインターフェイスになります。このインターフェイスに対して、静的IPアドレスを割り当てます

最近のDebianでは、interfaces.dディレクトリがあれば、その中に設定ファイルを作成すると勝手に読み込んでくれるようになっていました。(interfaces.dが無い場合は「hostonly」ファイルの内容をそのままinterfacesに記述)

1
2
3
4
5
6
7
8
9
10
11
12
13
// interfaces.dを読み込んでくれる記述がされているので
$ cat /etc/network/interfaces | grep "interfaces.d"
source /etc/network/interfaces.d/*

// その中に「hostonly」というファイルを作成
$ sudo vim /etc/network/interfaces.d/hostonly
allow-hotplug enp0s8
auto enp0s8
iface enp0s8 inet static
address 192.168.56.100
network 192.168.56.0
netmask 255.255.255.0
broadcast 192.168.56.255

なお、ここでgatewayを設定すると、デフォルトゲートウェイが2つある状態になってしまい、WAN側に接続する際に名前解決が出来なくなってしまうため、gatewayは設定しないようにします

(参考) VirtualBox を利用する際のネットワーク設定の話 - 絶品ゆどうふのタレ
(参考) 複数NICでのデフォルトゲートウェイ設定方法 - maruko2 Note.

ホスト:vagrant reload

systemctl restart networkingとかでも同じですが、いったんvagrantごとreloadしてみます

1
$ vagrant reload

ホスト&ゲスト:通信出来るか角煮n

1
2
3
4
5
6
7
8
9
10
11
12
13
// ホスト(設定したIPに対してping)
$ ping 192.168.56.100
PING 192.168.56.100 (192.168.56.100): 56 data bytes
64 bytes from 192.168.56.100: icmp_seq=0 ttl=64 time=576.450 ms
64 bytes from 192.168.56.100: icmp_seq=1 ttl=64 time=0.331 ms
64 bytes from 192.168.56.100: icmp_seq=2 ttl=64 time=0.653 ms

// ゲスト
$ ping example.com
PING example.com (xx.xx.xx.xx) 56(84) bytes of data.
64 bytes from xx.xx.xx.xx (xx.xx.xx.xx): icmp_seq=1 ttl=63 time=112 ms
64 bytes from xx.xx.xx.xx (xx.xx.xx.xx): icmp_seq=2 ttl=63 time=113 ms
64 bytes from xx.xx.xx.xx (xx.xx.xx.xx): icmp_seq=3 ttl=63 time=113 ms