Linode の VLAN を設定する

Linode の VLAN (Virtual LAN) の設定について書きます。VLAN を使うと、プライベートネットワークを組むことができます。

VLANは、プライベートな仮想ローカルエリアネットワークで、Linode ユーザーなら追加料金なしで利用できます。VLAN は OSI ネットワークモデルの第2層で動作し、他のネットワークから完全に分離できます。VLAN は仮想ネットワークスイッチのように機能し、同じ VLAN に接続されたすべてのインスタンスは、同じ物理イーサネットネットワークに直接接続されているように互いに通信することができます。ネットワーク外のデバイスは、プライベートネットワーク内のトラフィックを見ることができません。

この先を読む前に、以下のページを参照して Linode のネットワーク構成を理解してください。

https://qiita.com/isss802/items/20906f2bbf8c6a433d5a

# VLAN の利用ケース
VLAN を使う理由を整理します。
1. Linode VM インスタンス間の通信をセキュアにする
2. Linode VM インスタンス間の通信を最適化する
3. Linode VM インスタンス間のアウトバウンド通信費用を削減する

VLAN の設定はとても簡単ですので、設定方法を紹介していきます。

# Linode の VLAN 
VLAN についてはユーザーガイドに記載されています。この記事は、この手順どおりに動かした情報をもとにしています。

https://www.linode.com/docs/products/networking/vlans/

:::note warn
執筆時点で日本リージョンは VLAN に対応していません。
:::

## VLAN ネットワーク構成
２つの Linode インスタンスを作成し VLAN を構成します。一台目はパブリック IP を使ってインターネットに公開し、二台目はパブリック IP を無効にし VLAN 内のサーバーからしかアクセスできないようにします。
![VLAN Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/8dc2c19c-4669-80c9-c583-fed8f1533dc8.png)


## VLAN を使う ２つの VM 
パブリック IP で公開するフロントサーバー (linode-ap-south-01-front) と VLAN でのみ動作する DMZ 内を想定したサーバー (linode-ap-south-02-dmz) を用意します。

![Screen Shot 2023-01-20 at 7.31.46 PM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/59f4b134-9aa0-3f79-a427-12b598a3807a.jpeg)

最終的に下図の構成となります。
![VLAN Diagram Example 2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/37039332-02d5-3b61-5d40-c37cf1fd7daa.png)



VM を作成するときに 下図の画面から VLAN を割り当てることもできますが、今回はその設定は使わず、インスタンスを作成した後に VLAN を設定する例を書きます。
![Screen Shot 2023-01-20 at 9.48.35 PM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/b5cfb9ba-0c7c-ca91-dd4c-58c2a2eda9d2.jpeg)


## VLAN の IP アドレスを決定する
VLAN のネットワークの IP アドレスを決めます。今回の例では次の２つの IP アドレスを使います。
- 10.0.0.1/24
- 10.0.0.2/24

サブネットマスクは 255.255.255.0 の構成となります。次のような図でも表現できます。
![IP-CIDR.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/6673a9ff-8ea2-bd8b-d9bb-0d58dce91821.jpeg)

参考：https://cidr.xyz

## VLAN を VM に設定する
フロントサーバーと DMZ サーバーの両方に VLAN を設定します。
### フロントサーバーの設定

Cloud Manager から Linode のインスタンスを設定し、Configurations タブから編集します。 
![front-config.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/c2003965-96c8-6a99-9331-4fad1f4f2107.jpeg)

ネットワークインタフェースの eth0 には Public Internet が設定されています。今回は、eth1 に VLAN を設定します。
![front-config-eth1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/f7d45ba2-9fff-7edc-652e-40f02489fa59.jpeg)

設定を保存すると eth1 の設定が表示されます。
![Screen Shot 2023-01-20 at 9.57.11 PM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/d0280917-e1cb-9e19-6da1-3ca375cd01d3.jpeg)


### バックエンドサーバーの設定

フロントサーバーと同様に設定します。設定後、インスタンスのネットワークインタフェースは次のように表示されます。
![dmz-config-eth1-done.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/74bcc2c5-db0d-7e65-6d73-1b89fa65260e.jpeg)


## VM のネットワークを確認する

### フロントサーバーの ifconfig
eth1 に 10.0.0.1 が割り当てられています。
```
root@linode-ap-south-01-front:~# ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet XXX.XXX.XXX.XXX  netmask 255.255.255.0  broadcast XXX.XXX.XXX.255
        inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x20<link>
        inet6 XXXX:XXXX:XXXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x0<global>
        ether f2:3c:93:d8:03:c9  txqueuelen 1000  (Ethernet)
        RX packets 19715  bytes 2375776 (2.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19264  bytes 2908867 (2.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.1  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80:XXXX:XXXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x20<link>
        ether 90:de:01:d8:03:c9  txqueuelen 1000  (Ethernet)
        RX packets 330  bytes 35482 (35.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 250  bytes 28578 (28.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

### DMZ サーバーのパブリックIPの無効化

DMZ サーバーのパブリック IP をダウンさせます。

```
ifconfig eth0 down
```

この作業をするとパブリックIPの通信は遮断されます。実行後は VLAN にあるサーバーからしか ``ssh`` でログインできなくなります。

### DMZ サーバーの ifconfig
eth0 は UP されていません。eth1 に 10.0.0.2 が割り当てられています。
```
root@linode-ap-south-02-dmz:~# ifconfig -a
eth0: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether f2:3c:93:d8:03:31  txqueuelen 1000  (Ethernet)
        RX packets 1201  bytes 81703 (81.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1281  bytes 96372 (96.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.2  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80:XXXX:XXXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x20<link>
        ether 90:de:01:d8:03:31  txqueuelen 1000  (Ethernet)
        RX packets 1015  bytes 96518 (96.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 847  bytes 133734 (133.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
``` 

## DMZ サーバーの Public IP の無効化の確認
パブリック IP が無効化されています。
```
% ping 172.XXX.XXX.XXX
PING 172.XXX.XXX.XXX (172.XXX.XXX.XXX): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
^C
--- 172.XXX.XXX.XXX ping statistics ---
5 packets transmitted, 0 packets received, 100.0% packet loss
```

## VLAN 内での疎通確認

DMZ からフロントサーバー (10.0.0.1) への ping の結果です。
```
root@linode-ap-south-02-dmz:~# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.402 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.468 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.398 ms
^C
```

フロントサーバーからの DMZ サーバー(10.0.0.2) への ping の結果です。
```
root@linode-ap-south-01-front:~# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.526 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.537 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.501 ms
^C
```



# DMZ サーバーの eth0 に VLAN をアサインする
``ifconfig eth0 down`` にて、eth0 を無効化しましたが、リブートの度に無効化が必要になります。Linode の Cloud Manager では eth0 に VLAN を割り当てられます。

![Screen Shot 2023-01-20 at 10.40.33 PM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264188/a0379fc2-e36d-467b-07c0-40af5d52a8db.jpeg)

リブートすると次のように eth0 に VLAN が割り当てられています。
```
root@linode-ap-south-02-dmz:~# ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.2  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80:XXXX:XXXX:XXXX:XXXX:XXXX  prefixlen 64  scopeid 0x20<link>
        ether 90:de:00:d8:03:31  txqueuelen 1000  (Ethernet)
        RX packets 1  bytes 130 (130.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 94  bytes 4324 (4.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
```

フロントサーバーから DMZ のサーバーに疎通できます。
```
root@linode-ap-south-01-front:~# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.606 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.411 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.412 ms
^C
```
フロントサーバーから DMZ のサーバーにログインできます。
```
root@linode-ap-south-01-front:~# ssh 10.0.0.2
root@10.0.0.2's password: 
Welcome to Ubuntu 22.10 (GNU/Linux 5.19.0-29-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Jan 20 02:13:45 PM UTC 2023

Last login: Fri Jan 20 14:12:37 2023 from 10.0.0.1
root@linode-ap-south-02-dmz
```
DMZ サーバーからフロントサーバーにも疎通できます。
```
root@linode-ap-south-02-dmz:~# ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.369 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.367 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=0.328 ms
^C
--- 10.0.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4052ms
rtt min/avg/max/mdev = 0.328/0.360/0.387/0.019 ms
```

# まとめ
VLAN の設定は簡単です。VLAN を使うとプライベートネットワークを構成できるので、セキュアな環境を提供できます。VLAN は Linode を使っている方には無償で利用できる機能です。VLAN 内のネットワークの転送は課金されません。また、高速なネットワーク通信も可能となります。