Linux でタグ VLAN を使う
概要
Linux でタグ VLAN を扱いたくなったので、やってみた。 今回の例は Ubuntu16.04 を使った。
カーネルモジュールの確認とロード
VLAN を扱うには 8021q
というカーネルのモジュールが必要。 modinfo
で 8021q
が使えるかどうかを確認できる。
$ modinfo 8021q
filename: /lib/modules/4.4.0-101-generic/kernel/net/8021q/8021q.ko
version: 1.8
license: GPL
alias: rtnl-link-vlan
srcversion: D6F56B141BC676D1643BF93
depends: mrp,garp
intree: Y
vermagic: 4.4.0-101-generic SMP mod_unload modversions
↓ lsmod
でカーネルモジュールがロードされているか確認ができる。
↑でロードされていない場合は↓でロードする。
iproute2 を使って VLAN インターフェースを作成する
Ubuntu16.04 であれば、ip
コマンド (iproute2)が使えるため、 ifconfig
ではなく ip
コマンドの利用が推奨されている。 (net-tools は BSD 系以外ではメンテナンスされていないらしい。)
↓今回の例として使うのは eth0
というインターフェース。
$ ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link-netnsid 0
inet 10.0.1.30/24 brd 10.0.1.255 scope global eth0
valid_lft forever preferred_lft forever
eth0
というインターフェースに VLAN ID 10 のインターフェースを eth0.10
という名前でつける場合は↓のようにすれば良い。
すると eth0.10
が作成される↓。
$ ip link show dev eth0.10
3: eth0.10@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:16:3e:6f:5a:69 brd ff:ff:ff:ff:ff:ff
eth0.10
にアドレス 192.168.10.1/24
を付与する場合は↓。
↓で eth0.10
にアドレスが付与されたことが確認できる。
$ ip address show dev eth0.10
3: eth0.10@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:16:3e:6f:5a:69 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 scope global eth0.10
valid_lft forever preferred_lft forever
↑ではまだリンクが DOWN
してるので↓で UP
にすれば通信ができるようになる。
↓ UP
になった。
$ ip link show dev eth0.10
3: eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 00:16:3e:6f:5a:69 brd ff:ff:ff:ff:ff:ff
めでたしめでたし。