■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