Допустим, вам необходимо создать несколько виртуальных интерфейсов, которые будут работать как обычные, не зависимые друг от друга. Это очень легко делается через 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
Оригинал: skeletor.org.ua/?p=3007
RSS & RSS to Email
mail# cat start_if.re0
if=re0
ifconfig $if inet 192.168.205.4 netmask 255.255.255.0
ngctl mkpeer $if: bridge lower link1
ngctl mkpeer $if: bridge lower link10
ngctl mkpeer $if: bridge lower link11
ngctl mkpeer $if: bridge lower link12
ngctl mkpeer $if: bridge lower link13
ngctl name $if:lower bnet10
ngctl connect $if: bnet10: upper link1
ngctl mkpeer bnet10: eiface link20 ether
ngctl mkpeer bnet10: eiface link22 ether
ngctl mkpeer bnet10: eiface link23 ether
ngctl mkpeer bnet10: eiface link24 ether
ngctl mkpeer bnet10: eiface link25 ether
ifconfig ngeth0 ether 00:0d:86:aa:f3:2b
ifconfig ngeth1 ether 00:0d:86:aa:f3:3b
ifconfig ngeth2 ether 00:0d:86:aa:f3:4b
ifconfig ngeth3 ether 00:0d:86:aa:f3:5b
ifconfig ngeth4 ether 00:0d:86:aa:f3:6b
ngctl msg $if: setpromisc 1
ngctl msg $if: setautosrc 0
ifconfig ngeth0 inet 192.168.201.4/24
ifconfig ngeth1 inet 192.168.202.4/24
ifconfig ngeth2 inet 192.168.203.4/24
ifconfig ngeth3 inet 192.168.204.4/24
ifconfig ngeth4 inet 192.168.210.4/24
#ifconfig re1 ether 00:20:ed:7:78:9b