В статье "MAC address spoofing on FreeBSD using netgraph" демонстрируется эксперимент по изменению MAC адреса, сопоставляемого ARP'ом для заданного IP, для сетевых карт не позволяющих менять MAC адрес. Для решения проблемы, используя средства netgraph, создается вирутуальный сетевой интерфейс с новым MAC, физический же интерфес работает в "promiscuous" режиме и не содержит привязанного IP адреса.
Отрывок отражающий технику использования виртуальных сетевых интерфейсов:
* Verify the physical interface has no IP address.
# ifconfig dc0 delete
* Create the virtual ethernet interface
# ngctl mkpeer . eiface hook ether
* Verify the interface exists, observe the MAC address is zeroed out
# ifconfig ngeth0
ngeth0: flags=8802 mtu 1500
ether 00:00:00:00:00:00
* Bring up the virtual ethernet interface
# ifconfig ngeth0 up
ngeth0: flags=8843 mtu 1500
inet6 fe80::2d0:9ff:fe4c:9e5f%ngeth0 prefixlen 64 scopeid 0x4
ether 00:00:00:00:00:00
* Create the bridge and connect the lower link of the virtual interface
# ngctl mkpeer ngeth0: bridge lower link0
* Name the bridge
# ngctl name ngeth0:lower mybridge
* Connect the lower link to the physical interface
# ngctl connect dc0: mybridge: lower link1
* Connect the upper link to the physical interface
# ngctl connect dc0: mybridge: upper link2
* Connect the upper link to the virtual interface
# ngctl connect ngeth0: mybridge: upper link3
* Set the physical interface to not overwrite its source route
# ngctl msg dc0: setautosrc 0
* Set the physical interface into promiscous mode
# ngctl msg dc0: setpromisc 1
* Set the MAC address of the virtual interface
# ifconfig ngeth0 link 00:5c:16:10:dd:79
* Set the IP address of the virtual interface
# dhclient ngeth0
# ifconfig ngeth0
ngeth0: flags=8843 mtu 1500
inet6 fe80::2de:adff:fe12:1212%ngeth0 prefixlen 64 scopeid 0x4
inet 192.168.1.21 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:5c:16:10:dd:79
|