Допустим, вам необходимо создать несколько виртуальных интерфейсов, которые будут работать как обычные, не зависимые друг от друга. Это очень легко делается через netgraph. Приведу лишь скрипт, который создаст 3 виртуальных интерфейса, не трогая при этом физический:
#!/bin/sh
ngctl mkpeer em0: bridge lower link0
ngctl connect em0: em0:lower upper link1
ngctl name em0:lower em0Bridge
ngctl mkpeer em0:lower eiface link3 ether
ngctl mkpeer em0:lower eiface link4 ether
ngctl mkpeer em0:lower eiface link5 ether
где em0 – наш физический интерфейс. Теперь вывод ifconfig выглядит так:
# ifconfig em0: flags=8843 metric 0 mtu 1500 options=9b ether 08:00:27:e3:37:ae inet 10.10.10.94 netmask 0xffffff00 broadcast 10.10.10.255 nd6 options=29 media: Ethernet autoselect (1000baseT ) status: active lo0: flags=8049 metric 0 mtu 16384 options=3 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3 inet 127.0.0.1 netmask 0xff000000 nd6 options=21 ngeth0: flags=8843 metric 0 mtu 1500 options=28 ether 00:00:00:00:00:00 nd6 options=29 media: Ethernet autoselect (1000baseT ) status: active ngeth1: flags=8802 metric 0 mtu 1500 options=28 ether 00:00:00:00:00:00 nd6 options=29 media: Ethernet autoselect (1000baseT ) status: active ngeth2: flags=8802 metric 0 mtu 1500 options=28 ether 00:00:00:00:00:00 nd6 options=29 media: Ethernet autoselect (1000baseT ) status: active
Но как видим MAC-адреса у нас пустые. Присвоим IP и MAC адреса на ngeth0:
#ifconfig ngeth0 link 00:11:22:33:44:01 #ifconfig ngeth0 inet 192.168.1.254 netmask 255.255.255.0 #ngeth0: flags=8843 metric 0 mtu 1500 options=28 ether 00:11:22:33:44:01 inet 192.168.1.254 netmask 0xffffff00 broadcast 192.168.1.255 nd6 options=29 media: Ethernet autoselect (1000baseT ) status: active