VLANの設定 ipコマンド

ipコマンドでVLANデバイスを設定する方法について説明します。ホストを再起動すると設定が消えるため、永続的に設定したい場合は、nmcliコマンドなどを利用して下さい。

ネットワークデバイスの確認

まずは、ip linkコマンドで現状を確認します。ip addressでも構いません。

ip link
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:38:3c:fb brd ff:ff:ff:ff:ff:ff

ネットワークデバイスeth0UPの状態になっていることが確認出来ました。

VLANデバイスの作成

ここでは、eth0に対してVLAN ID 100を設定したVLANデバイスeth0.100を作成します。

ip link add link eth0 name eth0.100 type vlan id 100

VLANデバイスが作成されたか確認します。

ip link
(一部省略)
3: eth0.100@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:38:3c:fb brd ff:ff:ff:ff:ff:ff

作成直後はデバイスがDOWNの状態になっているため、利用する前にip link setコマンドでリンクアップさせます。

ip link set dev eth0.100 up

VLANデバイスの確認

ip linkコマンドに-dオプションを付けてデバイスの詳細を表示します。

ip -d link show  dev eth0.100
3: eth0.100@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:38:3c:fb brd ff:ff:ff:ff:ff:ff promiscuity 0
    vlan protocol 802.1Q id 100  addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

VLANデバイスeth0.100がUP状態になりました。また、vlan protocol 802.1Q id 100とあるように、デバイスにはVLAN ID 100が設定されていることが確認できました。

/proc/net/vlan/configでもVLANの設定が確認できます。

cat /proc/net/vlan/config
VLAN Dev name	 | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.100       | 100  | eth0

VLANデバイスにIPアドレスを設定

VLANデバイスにIPアドレスを設定して疎通確認することができます。ここではeth0.100192.168.100.10/24を設定します。

ip addr add dev eth0.100 192.168.100.10/24

デバイスにIPアドレスが設定されたか確認します。

ip addr show eth0.100
3: eth0.100@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:0c:29:38:3c:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 scope global eth0.100
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe38:3cfb/64 scope link
       valid_lft forever preferred_lft forever

あとはpingコマンドなどで疎通を確認してください。

複数VLANタグの設定

もちろん、ネットワークデバイスに対して複数のVLANデバイスを作成できます。

ip link add link eth0 name eth0.200 type vlan id 200
ip link add link eth0 name eth0.300 type vlan id 300
ip link set dev eth0.200 up
ip link set dev eth0.300 up

VLAN ID 100に加えて200と300を設定しました。VLANデバイスeth0.200とeth0.300が作成されます。

cat /proc/net/vlan/config
VLAN Dev name	 | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.100       | 100  | eth0
eth0.200       | 200  | eth0
eth0.300       | 300  | eth0

ipコマンドの使い方

ネットワーク関連の設定をするifconfigコマンドが、CentOSでobsoleteになりました。
CentOS 7のminimalインストール直後の状態では、ifconfigが含まれていません。
ifconfigの代替として、iprouteパッケージに含まれるipコマンドを使用する事になります。

net-toolsパッケージをインストールすることでifconfigを使用し続けることはできますが、いずれifconfigを使用することができない環境が増えてくるものと思われます。
今のうちにipコマンドに慣れておくと良いでしょう。

Red Hatが公開しているチートシートも参考になります。PDFでダウンロードできます。
Red Hat Enterprise Linux の ip コマンドチートシート

閲覧系コマンド

ネットワークデバイスやIPアドレスの一覧などを表示する閲覧系コマンドは一般ユーザでも実行できます。

IPアドレスの表示 ip address show

IPアドレスを含むネットワークデバイスの一覧を表示します。各デバイスのデバイス名、IPv4アドレス、IPv6アドレス、MACアドレス、デバイスの状態などを確認できます。
個人的に最もよく使用するサブコマンドで、普段はaddressの部分をかなり省略してip aと入力しています。ここではip addrとしました。

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 XXXX::XXXX:XXXX:XXXX:XXXX/64 scope link
       valid_lft forever preferred_lft forever

ネットワークデバイスの表示 ip link show

ネットワークデバイスの一覧を表示します。各デバイスのデバイス名、MACアドレス、デバイスの状態などを確認できます。

ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

ネットワークデバイスに関する統計の表示 ip -s link show

ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast
    81784055   726405   0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    81784055   726405   0       0       0       0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    14879508675 194399446 0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    29021979217 63591982 0       0       0       0

ルーティングテーブルの表示 ip route show

デフォルトルートが192.168.0.1に設定されていることが分かります。

ip route
default via 192.168.0.1 dev eth0  proto static  metric 100
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.10  metric 100

ARPテーブルの表示 ip neigh show

ip neigh
192.168.0.10 dev eth0 lladdr XX:XX:XX:XX:XX:XX STALE
192.168.0.1 dev eth0 lladdr XX:XX:XX:XX:XX:XX REACHABLE
192.168.0.2 dev eth0 lladdr XX:XX:XX:XX:XX:XX STALE

設定系コマンド

各種デバイスへの設定コマンドについて説明します。設定にはroot権限が必要となります。rootになってコマンドを実行するかsudoコマンドを付けて実行する必要があります。

ちなみに、一般ユーザで設定系のコマンドを実行するとRTNETLINK answers: Operation not permittedというエラーが発生します。

デバイス リンクアップ ip link set DEVICE up

ip link setコマンドでデバイスの状態をUPに設定します。ip link showコマンドなどで指定したデバイスのstateがUPになっていることを確認します。

# ip link set eth1 up
# ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

デバイス リンクダウン ip link set DEVICE down

ip link setコマンドでデバイスの状態をDOWNに設定します。

# ip link set eth1 down
# ip link show eth1
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

IPアドレス設定 (追加) ip address add

ip address addコマンドでデバイスにIPアドレスを設定(追加)します。1つのデバイスに複数のIPアドレスを設定することができます。

# ip addr add 172.16.44.132/24 dev eth1

IPアドレス削除 ip address del

ip address delコマンドでデバイスに設定されているIPアドレスを削除します。

# ip addr del 172.16.44.132/24 dev eth1

VLANインターフェイスの作成 ip link add type vlan

ip link addコマンドで特定のVLAN IDでタグ付けされたVLANインターフェイスを作成します。

作成したVLANインターフェイスを利用するには状態をUPにしておく必要があります。

ここでは、物理インターフェイスeth1に対してVLAN ID101を指定したVLANインターフェイスeth1.101を作成します。

インターフェイスの詳細を表示すると、プロトコル802.1QでVLAN ID 101が設定されていることが分かります。

# ip link add link eth1 name eth1.101 type vlan id 101
# ip link set eth1.101 up
# ip -d link show eth1.101
4: eth1.101@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff promiscuity 0
    vlan protocol 802.1Q id 101 <REORDER_HDR> addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

ブリッジの作成 ip link add type bridge

ip link addコマンドでブリッジインターフェイス(ネットワークブリッジ)を作成します。

ここではbr1_101という名前のブリッジを作成します。

ブリッジの詳細を表示すると、デバイスの種類がbridgeであることが分かります。

# ip link add name br1_101 type bridge
# ip link set up dev br1_101
# ip -d link show br1_101
5: br1_101: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff promiscuity 0
    bridge forward_delay 1500 hello_time (省略)

デバイスをブリッジにアタッチするにはip link setmasterを設定します。

ここでは、VLANインターフェイスeth1.101をブリッジbr1_101にアタッチします。つまり、eth1.101に対してmasterとしてbr1_101を設定します。

# ip link set dev eth1.101 master br1_101
# ip link show eth1.101
4: eth1.101@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br1_101 state UP mode DEFAULT group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff

例えば、KVMの仮想マシンの仮想NICをブリッジbr1_101へアタッチすることで、eth1から外に出るパケットはVLAN ID101でタグ付けされることになります。

ちなみに、brctlコマンドで確認した場合は次の様になります。ブリッジ周りに関しては、brctlの方が表示やコマンド体系がわかりやすいかもしれません。

brctl show br1_101
bridge name	bridge id		STP enabled	interfaces
br1_101		8000.000c29b8658b	no		eth1.101