labunix's blog

labunixのラボUnix

FreeBSD10.1-RC4でタグVLANを使ってみた。

■FreeBSD10.1-RC4でタグVLANを使ってみた。
 VLANカーネルモジュールは既に読み込まれているので、
 追加のインストール作業は不要。

$ kldstat -v | grep vlan
		388 if_vlan

■vlan10インターフェイスを作成
 Ciscoで言うと、「VLAN 0」に所属、shutdown状態に近い。

$ sudo ifconfig vlan10 plumb
$ /sbin/ifconfig vlan10
vlan10: flags=8002<BROADCAST,MULTICAST> metric 0 mtu 1500
	ether 00:00:00:00:00:00
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	vlan: 0 parent interface: <none>

■物理インターフェイスと「vlan10」の関連付け

$ ifconfig em0 | grep -v ether
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
	inet 172.16.115.128 netmask 0xffffff00 broadcast 172.16.115.255 
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
$ sudo ifconfig vlan10 vlan 10 vlandev em0
$ ifconfig vlan10 | tail -1
	vlan: 10 parent interface: em0

■L2のMACアドレスの設定

$ sudo ifconfig vlan10 link 00:12:34:56:78:9a
$ /sbin/ifconfig vlan10 | grep ether
	ether 00:12:34:56:78:9a

■L3のIPアドレスの設定

$ sudo  ifconfig vlan10 inet 192.168.41.128/24

■自ホストからpingで確認

$ ping -c 1 192.168.41.128
PING 192.168.41.128 (192.168.41.128): 56 data bytes
64 bytes from 192.168.41.128: icmp_seq=0 ttl=64 time=0.090 ms

--- 192.168.41.128 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.090/0.090/0.090/0.000 ms

$ sudo tcpdump -i lo0 -n host 192.168.41.128
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type NULL (BSD loopback), capture size 65535 bytes
capability mode sandbox enabled
23:14:27.964609 IP 127.0.0.1 > 192.168.41.128: ICMP echo request, id 64771, seq 0, length 64
23:14:27.964656 IP 192.168.41.128 > 127.0.0.1: ICMP echo reply, id 64771, seq 0, length 64

$ ping -c 1 192.168.41.128
PING 192.168.41.128 (192.168.41.128): 56 data bytes
64 bytes from 192.168.41.128: icmp_seq=0 ttl=64 time=0.059 ms

--- 192.168.41.128 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.059/0.059/0.059/0.000 ms

$  sudo tcpdump -i lo0 -X -vvv -n host 192.168.41.128
tcpdump: listening on lo0, link-type NULL (BSD loopback), capture size 65535 bytes
capability mode sandbox enabled
23:15:07.612234 IP (tos 0x0, ttl 64, id 2289, offset 0, flags [none], proto ICMP (1), length 84, bad cksum 0 (->88f)!)
    127.0.0.1 > 192.168.41.128: ICMP echo request, id 516, seq 0, length 64
	0x0000:  4500 0054 08f1 0000 4001 0000 7f00 0001  E..T....@.......
	0x0010:  c0a8 2980 0800 679f 0204 0000 546d f76b  ..)...g.....Tm.k
	0x0020:  0009 5777 0809 0a0b 0c0d 0e0f 1011 1213  ..Ww............
	0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
	0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
	0x0050:  3435 3637                                4567
23:15:07.612269 IP (tos 0x0, ttl 64, id 2290, offset 0, flags [none], proto ICMP (1), length 84, bad cksum 0 (->88e)!)
    192.168.41.128 > 127.0.0.1: ICMP echo reply, id 516, seq 0, length 64
	0x0000:  4500 0054 08f2 0000 4001 0000 c0a8 2980  E..T....@.....).
	0x0010:  7f00 0001 0000 6f9f 0204 0000 546d f76b  ......o.....Tm.k
	0x0020:  0009 5777 0809 0a0b 0c0d 0e0f 1011 1213  ..Ww............
	0x0030:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223  .............!"#
	0x0040:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233  $%&'()*+,-./0123
	0x0050:  3435 3637                                4567
■vlan10インターフェイスを削除

$ sudo ifconfig vlan10 destroy

■再起動後も有効にするためにrc.confに設定
 ※再起動後の反映の確認のため、上記とは全く異なる設定をしています。

$ echo 'if_vlan_load="YES"' | sudo tee -a /boot/loader.conf > /dev/null

$ echo 'cloned_interfaces="vlan100"
ifconfig_vlan100="inet 10.1.1.1/24 vlan 100 vlandev em0"' | sudo tee -a /etc/rc.conf

■任意NIC形式の確認
 この方式でもMACアドレスは変更出来るようだが、
 再起動時にbusyとなって失敗するケースが多い。

$ sudo /etc/rc.d/netif restart
$ /sbin/ifconfig vlan100
vlan100: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=3<RXCSUM,TXCSUM>
	ether 00:0c:29:b1:7b:4a
	inet 10.1.1.1 netmask 0xffffff00 broadcast 10.1.1.255 
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	vlan: 100 parent interface: em0

$ sudo ifconfig vlan100 link 00:12:34:56:78:9a
$ /sbin/ifconfig vlan100 | grep ether
	ether 00:12:34:56:78:9a

■NIC.vid形式
 em0.300のMACアドレスが指定のものに変わった。

$ echo 'cloned_interfaces="em0.200 em0.300"
ifconfig_em0_200="inet 172.16.116.128/24 vlan 200 vlandev em0"
ifconfig_em0_300="inet 172.16.117.128/24 vlan 300 vlandev em0"
ifconfig_em0_300="link 00:12:34:56:78:9a"' | sudo tee -a /etc/rc.conf

$ sudo /etc/rc.d/netif restart
$ /sbin/ifconfig vlan100
vlan100: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=3<RXCSUM,TXCSUM>
	ether 00:0c:29:b1:7b:4a
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	vlan: 100 parent interface: em0
$ /sbin/ifconfig em0.200
em0.200: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=3<RXCSUM,TXCSUM>
	ether 00:0c:29:b1:7b:4a
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	vlan: 200 parent interface: em0
$ /sbin/ifconfig em0.300
em0.300: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=3<RXCSUM,TXCSUM>
	ether 00:12:34:56:78:9a
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	vlan: 300 parent interface: em0

■再起動して同じ結果になることを確認。
 「cloned_interfaces」は1行で指定する必要があるようだ。
 MACアドレスの書き変えの失敗はなくなった。

$ sudo shutdown -r now && exit
$ tail -7 /etc/rc.conf
cloned_interfaces="em0.200 em0.300"
ifconfig_em0_200="inet 172.16.116.128/24 vlan 200 vlandev em0"
ifconfig_em0_300="inet 172.16.117.128/24 vlan 300 vlandev em0"
ifconfig_em0_300="link 00:12:34:56:78:9a"

■物理アドレスの方を変更することも出来るようです。

$ sudo /sbin/ifconfig em0 link "00:12:34:56:78:9c"
$ /sbin/ifconfig em0 | grep ether
	ether 00:12:34:56:78:9c