Допустим, вам необходимо создать несколько виртуальных интерфейсов, которые будут работать как обычные, не зависимые друг от друга. Это очень легко делается через 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
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