простой виртуальный сетевой интерфейс
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
простой виртуальный сетевой интерфейс
Эта тема переползла из нескольких.
Вот исходные, где до конца толком не разобрались :
viewtopic.php?f=18&t=1618
viewtopic.php?f=18&t=1624
viewtopic.php?f=18&t=1623
Объяснять не буду - там в темах всё расписано ... хоть и разбросано.
Вот исходные, где до конца толком не разобрались :
viewtopic.php?f=18&t=1618
viewtopic.php?f=18&t=1624
viewtopic.php?f=18&t=1623
Объяснять не буду - там в темах всё расписано ... хоть и разбросано.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
В теме, откуда это непосредственно переползло (viewtopic.php?f=18&t=1624&p=3518#p3518) написана достаточно подробно формулировка:
1. беру для начала опубликованный kit_D исходный код проекта модуля здесь: download/file.php?id=129
(более ранние варианты были здесь: download/file.php?id=124 и download/file.php?id=125)
более поздних вариантов kit_D не выкладывал (жаба задавила )
2. запуск его попытаюсь сделать как здесь - viewtopic.php?f=18&t=1618&start=10#p3165 :
(естественно, как уже было сказано, категорически заменяем сразу wlan0 на ... на что угодно , на eth0 )
3. после этого в коде планирую учесть-проверить поправки, изложенные здесь - viewtopic.php?f=18&t=1624&start=10#p3391 и viewtopic.php?f=18&t=1624&start=10#p3392
4. а потом всё это перекроить под свои представления...
P.S. всё, что п.2, вопреки прозвучавшим заверениям , у меня под VirtualBox не работает! (ни на уровне ICMP & ping, ни уж, тем более, UDP & TCP).
А детальнее, по шагам, это должно выглядеть так:Olej писал(а): 2. но зная какие тут будут неприятности с этим примером (уже писал раньше - полное заваливание системы) отрабатываем для начала на VirtualBox:3. для начала меня интересует выбросить всё нагромождение: криптографирование, фреймы 802.3 & 802.11, WiFi интерфейсы wlan0 ... потому что из-под этой горы мусора - не выбраться, это такой "плохой пыанэрский стиль": всё сразу... вместо этого интересует:Код: Выделить всё
[root@fedora16vm crypto2]# uname -r 3.2.9-2.fc16.i686
- повесить примитивный виртуальный сетевой интерфейс над обычным eth0 (или p7p1 в терминологии Fedora 16 )...
- и перенаправить потоки eth0 в этот интерфейс.
1. беру для начала опубликованный kit_D исходный код проекта модуля здесь: download/file.php?id=129
(более ранние варианты были здесь: download/file.php?id=124 и download/file.php?id=125)
более поздних вариантов kit_D не выкладывал (жаба задавила )
2. запуск его попытаюсь сделать как здесь - viewtopic.php?f=18&t=1618&start=10#p3165 :
- для начала! потому что это неправильно! - новый интерфейс не должен по IP:mask принадлежать к уже существующей подсети.insmod crypto0.ko
ifconfig crypto down
ifconfig crypto 172.28.155.7
./crypto_us wlan0
route del -net 172.28.155.0/24 wlan0
ifconfig crypto up
(естественно, как уже было сказано, категорически заменяем сразу wlan0 на ... на что угодно , на eth0 )
3. после этого в коде планирую учесть-проверить поправки, изложенные здесь - viewtopic.php?f=18&t=1624&start=10#p3391 и viewtopic.php?f=18&t=1624&start=10#p3392
4. а потом всё это перекроить под свои представления...
P.S. всё, что п.2, вопреки прозвучавшим заверениям , у меня под VirtualBox не работает! (ни на уровне ICMP & ping, ни уж, тем более, UDP & TCP).
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
Поскольку это всё под VirtualBox, то я могу там иметь 2 по-разному настроенных "родительских" сетевых интерфейсов (в свойствах VM):Olej писал(а): (естественно, как уже было сказано, категорически заменяем сразу wlan0 на ... на что угодно , на eth0 )
Код: Выделить всё
[root@fedora16vm crypto2]# ifconfig
...
p2p1 Link encap:Ethernet HWaddr 08:00:27:14:CA:91
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe14:ca91/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:84741 errors:0 dropped:0 overruns:0 frame:0
TX packets:48539 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:99593986 (94.9 MiB) TX bytes:4669108 (4.4 MiB)
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:46 errors:0 dropped:0 overruns:0 frame:0
TX packets:545 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11582 (11.3 KiB) TX bytes:32176 (31.4 KiB)
- это интерфейс p7p1 - объединяющий в отдельную подсеть только хост + все VMs (это то, что в старом ядре - Fedora 14 - называлось бы как eth1)
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
kit_D, проект ваш - не живой ... т.е. он может при каких-то обстоятельствах и живёт, но что-то там существенно некорректно...Olej писал(а): 1. беру для начала опубликованный kit_D исходный код проекта модуля здесь: download/file.php?id=129
(более ранние варианты были здесь: download/file.php?id=124 и download/file.php?id=125)
более поздних вариантов kit_D не выкладывал (жаба задавила )
Повторяю пока практически ваш ход рассуждений:
Код: Выделить всё
[root@fedora16vm crypto2]# insmod crypto.ko
[root@fedora16vm crypto2]# ifconfig crypto0 down
[root@fedora16vm crypto2]# echo $?
0
[root@fedora16vm crypto2]# ifconfig crypto0 192.168.50.5
[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
Код: Выделить всё
[root@fedora16vm crypto2]# ./crypto_us p7p1
[root@fedora16vm crypto2]# dmesg | tail -n2
[38260.247678] Loading kernel module for a network device with CAP_SYS_MODULE (deprecated). Use CAP_NET_ADMIN and alias netdev-crypto instead
[38318.111846] register rx handler for p7p1
Код: Выделить всё
[olej@fedora16vm crypto2]$ uname -r
3.2.9-2.fc16.i686
Код: Выделить всё
[root@fedora16vm crypto2]# ifconfig
crypto0 Link encap:Ethernet HWaddr 08:00:27:9E:91:CA
inet addr:192.168.50.5 Bcast:192.168.50.255 Mask:255.255.255.0
inet6 addr: fe80::24a3:c2ff:fe49:91ca/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:56 errors:0 dropped:0 overruns:0 frame:0
TX packets:41 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5823 (5.6 KiB) TX bytes:5792 (5.6 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:179 errors:0 dropped:0 overruns:0 frame:0
TX packets:678 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:30860 (30.1 KiB) TX bytes:44599 (43.5 KiB)
А там случайные значения, установленные при инициализации интерфейсов.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
Кстати, кто подскажет - как создать IP-алиас для того интерфейса, с которого я собираюсь пинговать новый виртуальный?Olej писал(а): - для начала! потому что это неправильно! - новый интерфейс не должен по IP:mask принадлежать к уже существующей подсети.
(естественно, как уже было сказано, категорически заменяем сразу wlan0 на ... на что угодно , на eth0 )
Чтоб было понятнее:
Код: Выделить всё
[olej@nvidia ~]$ ifconfig vboxnet0
vboxnet0 Link encap:Ethernet HWaddr 0A:00:27:00:00:00
inet addr:192.168.56.1 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:1309 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:99133 (96.8 KiB)
Как?
Когда-то это делалось так: http://www.linuxcenter.ru/lib/articles/ ... owto.phtml, но это дела давние...
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
Кажется, что вопрос снят: сейчас это делается как и когда-то , только для этого не нужен специальный модуль ядра (всё вкомпилировано в ядро?):Olej писал(а):Когда-то это делалось так: http://www.linuxcenter.ru/lib/articles/ ... owto.phtml, но это дела давние...
Код: Выделить всё
[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 ~]$ ifconfig
...
vboxnet0 Link encap:Ethernet HWaddr 0A:00:27:00:00:00
inet addr:192.168.56.1 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:1317 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:100193 (97.8 KiB)
vboxnet0:0 Link encap:Ethernet HWaddr 0A:00:27:00:00:00
inet addr:192.168.50.1 Bcast:192.168.50.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Код: Выделить всё
[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
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
И вот теперь всё становится нормально!Olej писал(а):- IP у них отличаются, но HWaddr (MAC) должен совпадать! - мы хотим, чтоб это был один физический интерфейс.
А там случайные значения, установленные при инициализации интерфейсов.
При инициализации перехвата интерфейса меняем то, что было:
Код: Выделить всё
memcpy( dev->dev_addr, slave->dev_addr, sizeof( slave->dev_addr ) );
memcpy(dev->broadcast, slave->broadcast, sizeof( slave->broadcast ) );
Код: Выделить всё
memcpy( dev->dev_addr, slave->dev_addr, ETH_ALEN );
memcpy( dev->broadcast, slave->broadcast, ETH_ALEN );
И теперь проверяем:
1.
Код: Выделить всё
[root@fedora16vm crypto2]# insmod crypto.ko
[root@fedora16vm crypto2]# ifconfig crypto0 down
[root@fedora16vm crypto2]# ifconfig crypto0 192.168.50.5
Код: Выделить всё
[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)
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)
С роутингом ничего крутить не надо - он сам встал:
Код: Выделить всё
[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
Код: Выделить всё
[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
- Пинг с хоста на гостевой интерфейс:
Код: Выделить всё
[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
Код: Выделить всё
[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
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
И окончательная победа :Olej писал(а): И вот теперь всё становится нормально!
Код: Выделить всё
[olej@fedora16vm crypto2]$ ssh olej@192.168.50.1
The authenticity of host '192.168.50.1 (192.168.50.1)' can't be established.
RSA key fingerprint is b0:ab:bb:3f:a8:53:ad:0e:2a:69:7d:36:70:78:6e:71.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.50.1' (RSA) to the list of known hosts.
Nasty PTR record "192.168.50.1" is set up for 192.168.50.1, ignoring
olej@192.168.50.1's password:
Last login: Mon Apr 2 19:27:44 2012 from 192.168.56.101
[olej@nvidia ~]$ u_n_a_m_e -a
Linux nvidia.localdomain 2.6.42.12-1.fc15.i686.PAE #1 SMP Tue Mar 20 16:19:17 UTC 2012 i686 i686 i386 GNU/Linux
[olej@nvidia ~]$ exit
logout
Connection to 192.168.50.1 closed.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
Всем, кто интересуется сетевыми интерфейсами!Olej писал(а): Кажется, что вопрос снят: сейчас это делается как и когда-то ,
Обратите внимание, насколько упрощает работу и отладку с сетевыми интерфейсами манипулирование с алиасными IP!
Забегая вперёд, вопросы к залу ... будут какие соображения?:
1. как повторно загрузить модуль под другим именем?
(для сетевых интерфейсов, как устройств фиктивных - это может иметь смысл)...
Поясняю подробнее:
- как? загрузить файл модуля xxx.ko так...
- что, если модуль xxx уже загружен,
- так он бы загрузился как xxx0 (но, скажем, с какими-то другими параметрами загрузки в командной строке).
-
- Писатель
- Сообщения: 52
- Зарегистрирован: 13 мар 2012, 13:14
- Откуда: Харьков
- Контактная информация:
Re: простой виртуальный сетевой интерфейс
Для этого надо использовать утилиту ip. ifconfig является устаревшим инструментом (не поддерживает netlink), в то время как утилита ip (пакета iproute2) является новым и гораздо более обширным средством настройки сетевой подсистемы.Хотелось бы этому же интерфейсу присвоить ещё один алиасный IP из другой подсетки: 192.168.50.1
Как?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя