Olej писал(а):- IP у них отличаются, но HWaddr (MAC) должен совпадать! - мы хотим, чтоб это был один физический интерфейс.
А там случайные значения, установленные при инициализации интерфейсов.
И вот теперь всё становится нормально!
При инициализации перехвата интерфейса меняем то, что было:
Код: Выделить всё
memcpy( dev->dev_addr, slave->dev_addr, sizeof( slave->dev_addr ) );
memcpy(dev->broadcast, slave->broadcast, sizeof( slave->broadcast ) );
- это вообще непонятно что записано, учитывая, что slave->dev_addr - это
указатель... меняем на то, что стало:
Код: Выделить всё
memcpy( dev->dev_addr, slave->dev_addr, ETH_ALEN );
memcpy( dev->broadcast, slave->broadcast, ETH_ALEN );
(ETH_ALEN - это как-раз 6 байт - длина MAC-адреса).
И теперь проверяем:
1.
Код: Выделить всё
[root@fedora16vm crypto2]# insmod crypto.ko
[root@fedora16vm crypto2]# ifconfig crypto0 down
[root@fedora16vm crypto2]# ifconfig crypto0 192.168.50.5
- создали новый сетевой интерфейс в подсетке 192.168.50.0:
Код: Выделить всё
[root@fedora16vm crypto2]# ifconfig crypto0
crypto0 Link encap:Ethernet HWaddr 00:01:02:03:04:05
inet addr:192.168.50.5 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::201:2ff:fe03:405/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:4998 (4.8 KiB)
- с характерным MAC-адресом, я его так создал, чтобы хорошо видеть.
2. "навесили" этот интерфейс на существующий:
Код: Выделить всё
[root@fedora16vm crypto2]# ./crypto_us p7p1
[root@fedora16vm crypto2]# ifconfig
crypto0 Link encap:Ethernet HWaddr 08:00:27:9E:02:02
inet addr:192.168.50.5 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::201:2ff:fe03:405/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:4998 (4.8 KiB)
...
p7p1 Link encap:Ethernet HWaddr 08:00:27:9E:02:02
inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe9e:202/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:331 errors:0 dropped:0 overruns:0 frame:0
TX packets:802 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:48921 (47.7 KiB) TX bytes:53199 (51.9 KiB)
- как удивительно совпали MAC-адреса!
С роутингом ничего крутить не надо - он сам встал:
Код: Выделить всё
[root@fedora16vm crypto2]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 p2p1
192.168.1.0 * 255.255.255.0 U 1 0 0 p2p1
192.168.50.0 * 255.255.255.0 U 0 0 0 crypto0
192.168.56.0 * 255.255.255.0 U 0 0 0 p7p1
3. теперь на ответном конце линии (на хост-компьютере VirtualBox) делаем хост той же подсетки 192.168.50.0:
Код: Выделить всё
[olej@nvidia ~]$ sudo ifconfig vboxnet0:0 192.168.50.1
[olej@nvidia ~]$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 1 0 0 eth0
192.168.50.0 * 255.255.255.0 U 0 0 0 vboxnet0
192.168.56.0 * 255.255.255.0 U 0 0 0 vboxnet0
[olej@nvidia ~]$ ip addr
...
3: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0
inet 192.168.50.1/24 brd 192.168.50.255 scope global vboxnet0:0
inet6 fe80::800:27ff:fe00:0/64 scope link
valid_lft forever preferred_lft forever
4.
Всё!
- Пинг с хоста на гостевой интерфейс:
Код: Выделить всё
[olej@nvidia ~]$ ping 192.168.50.5
PING 192.168.50.5 (192.168.50.5) 56(84) bytes of data.
64 bytes from 192.168.50.5: icmp_req=1 ttl=64 time=0.477 ms
64 bytes from 192.168.50.5: icmp_req=2 ttl=64 time=0.288 ms
64 bytes from 192.168.50.5: icmp_req=3 ttl=64 time=0.267 ms
^C
--- 192.168.50.5 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.267/0.344/0.477/0.094 ms
- Пинг с гостевого интерфейса на хост:
Код: Выделить всё
[olej@fedora16vm crypto2]$ ping 192.168.50.1
PING 192.168.50.1 (192.168.50.1) 56(84) bytes of data.
64 bytes from 192.168.50.1: icmp_req=1 ttl=64 time=1.93 ms
64 bytes from 192.168.50.1: icmp_req=2 ttl=64 time=0.314 ms
64 bytes from 192.168.50.1: icmp_req=3 ttl=64 time=0.379 ms
^C
--- 192.168.50.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.314/0.876/1.937/0.751 ms
А вот то, что tcpdump на гостевой VM видел на интерфейсе
crypto0 при этих пингах:
Код: Выделить всё
[root@fedora16vm crypto2]# tcpdump -i crypto0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on crypto0, link-type EN10MB (Ethernet), capture size 65535 bytes
01:40:05.390084 ARP, Request who-has 192.168.50.5 tell 192.168.50.1, length 46
01:40:05.390141 ARP, Reply 192.168.50.5 is-at 08:00:27:9e:02:02 (oui Unknown), length 28
01:40:05.390217 IP 192.168.50.1 > 192.168.50.5: ICMP echo request, id 4581, seq 1, length 64
01:40:05.390273 IP 192.168.50.5 > 192.168.50.1: ICMP echo reply, id 4581, seq 1, length 64
01:40:06.390206 IP 192.168.50.1 > 192.168.50.5: ICMP echo request, id 4581, seq 2, length 64
01:40:06.390262 IP 192.168.50.5 > 192.168.50.1: ICMP echo reply, id 4581, seq 2, length 64
01:40:07.390059 IP 192.168.50.1 > 192.168.50.5: ICMP echo request, id 4581, seq 3, length 64
01:40:07.390110 IP 192.168.50.5 > 192.168.50.1: ICMP echo reply, id 4581, seq 3, length 64
01:40:10.398176 ARP, Request who-has 192.168.50.1 tell 192.168.50.5, length 28
01:40:10.398298 ARP, Reply 192.168.50.1 is-at 0a:00:27:00:00:00 (oui Unknown), length 46
01:40:41.419029 IP 192.168.50.5 > 192.168.50.1: ICMP echo request, id 24503, seq 1, length 64
01:40:41.420803 IP 192.168.50.1 > 192.168.50.5: ICMP echo reply, id 24503, seq 1, length 64
01:40:42.420708 IP 192.168.50.5 > 192.168.50.1: ICMP echo request, id 24503, seq 2, length 64
01:40:42.420985 IP 192.168.50.1 > 192.168.50.5: ICMP echo reply, id 24503, seq 2, length 64
01:40:43.423086 IP 192.168.50.5 > 192.168.50.1: ICMP echo request, id 24503, seq 3, length 64
01:40:43.423425 IP 192.168.50.1 > 192.168.50.5: ICMP echo reply, id 24503, seq 3, length 64
01:40:46.432054 ARP, Request who-has 192.168.50.5 tell 192.168.50.1, length 46
01:40:46.432086 ARP, Reply 192.168.50.5 is-at 08:00:27:9e:02:02 (oui Unknown), length 28
^C
18 packets captured
18 packets received by filter
0 packets dropped by kernel