Q-in-Q - проброс VLAN внутри другого VLAN.host1:
vconfig set_name_type VLAN_PLUS_VID_NO_PAD
vconfig add eth0 4
ifconfig vlan4 10.1.1.1 netmask 255.255.255.0 up
vconfig add vlan4 8
ifconfig vlan8 192.168.1.1 netmask 255.255.255.0 uphost2:
vconfig set_name_type VLAN_PLUS_VID_NO_PAD
vconfig add eth0 4
ifconfig vlan4 10.1.1.2 netmask 255.255.255.0 up
vconfig add vlan4 8
ifconfig vlan8 192.168.1.2 netmask 255.255.255.0 upragahost ~ # ping 192.168.1.2
PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data.
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.820 msragahost ~ # tcpdump -e -i eth0
22:40:47.297489 00:0e:0c:9b:fa:ce (oui Unknown) > 00:13:d4:8b:c8:b6 (oui Unknown),
ethertype 802.1Q (0x8100), length 106: vlan 4, p 0, ethertype 802.1Q, vlan 8, p 0,
ethertype IPv4, 192.168.1.2 > 192.168.1.1: ICMP echo request, id 64531, seq 146, length 64URL:
Обсуждается: http://www.opennet.dev/tips/info/1381.shtml
а зачем вилан внутри вилана нужен впинципе?не ради флейма, просто интересно узнать.
>а зачем вилан внутри вилана нужен впинципе?
>
>не ради флейма, просто интересно узнать.Первое, что в голову приходит это преодоление лимита в 4К вланов. Второй пример - транзит вланов клиентов через оборудование провайдера. Третий вариант, когда в большой сети где каждому клиенту (считай порту) выделяется свой влан, удобно каждому свичу дать отдельный влан и вланы клиентов гнать через него, т.е. путь влана прописывается только для свича, клиенские вланы трогаем только на входе и выходе.
Q-in-Q - необходимая для операторов вещь. По причинам, уже описанным в предыдущем посте.
ifconfig vlan4 10.1.1.1 netmask 255.255.255.0
А это зачем? Не достаточно ли просто поднять интерфейс?
а любой свитч это дело пережуёт ?
поддерживает ли это дело FreeBSD ?
фря поддерживает с мелким патчем (возможно в 4ке и его не надо)
--- /usr/src/sys.orig/net/if_vlan.c Mon Jan 8 12:03:15 2007
+++ if_vlan.c Sun Mar 11 16:46:00 2007
@@ -155,7 +158,7 @@
* is too big to fit into CPU cache.
*/
static struct mtx ifv_mtx;
-#define VLAN_LOCK_INIT() mtx_init(&ifv_mtx, "vlan_global", NULL, MTX_DEF)
+#define VLAN_LOCK_INIT() mtx_init(&ifv_mtx, "vlan_global", NULL, MTX_RECURSE)
#define VLAN_LOCK_DESTROY() mtx_destroy(&ifv_mtx)
#define VLAN_LOCK_ASSERT() mtx_assert(&ifv_mtx, MA_OWNED)
#define VLAN_LOCK() mtx_lock(&ifv_mtx)
@@ -997,8 +988,8 @@
/* VID numbers 0x0 and 0xFFF are reserved */
if (tag == 0 || tag == 0xFFF)
return (EINVAL);
- if (p->if_type != IFT_ETHER)
- return (EPROTONOSUPPORT);
+// if (p->if_type != IFT_ETHER)
+// return (EPROTONOSUPPORT);
if ((p->if_flags & VLAN_IFFLAGS) != VLAN_IFFLAGS)
return (EPROTONOSUPPORT);
if (ifv->ifv_trunk)
======
а вот Linux (RH EL3) - судя по tcpdump -это не поддерживает.# tcpdump -e -n -i eth0
tcpdump: listening on eth0
16:58:09.313703 0:3:47:a6:47:a3 Broadcast 8100 60: 802.1Q vlan#1 P0 802.1Q vlan#10 P0 arp who-has 172.20.4.2 tell 172.20.4.1
16:58:09.313744 0:2:b3:d7:0:97 0:3:47:a6:47:a3 8100 46: 802.1Q vlan#10 P0 arp reply 172.20.4.2 is-at 0:2:b3:d7:0:97декодит нормально, а вот назад отвечает без parent vlan tag.
172.20.4.1 - freebsd with patch
172.20.4.2 - linux.
freebsd это не умеет.>ifconfig vlan4 10.1.1.1 netmask 255.255.255.0
>А это зачем? Не достаточно ли просто поднять >интерфейс?мне надо было для тестов.
умеет. а в линухе эта поддержка похоже появилась весьма не давно.
линух это давно умееет, только нужно еще патчить драйвера сетевых карт чтоб они пакеты длинной 1508 байт пропускали, ну и свитчи тоже не должны их резать..
По-моему 1504 байта достаточно.
Для Q-in-Q нужно 1508 (4+4 - там же 2 VLAN тега)
Откуда 4+4 то?
Всего вланов 4096 - это 2^12, следовательно 2 раза по 12 бит получается 24 бита, а это как раз 4 байта!
vlan 4, !!!p 0,!!!! <- а про это мы забыли?! 1508 байт!
>Q-in-Q - необходимая для операторов вещь. По причинам, уже описанным в предыдущем постеНормальный оператор не может себе позволить нормальный DSLAM?
Зачем изобретать велосипед то, для этого есть спец. оборудование которое специально создано для решения этих задач
DSLAM? Digital Subscriber Line Access Multiplexer? А каким местом он к Ethernet'у и 802.1q? Это же ADSL...
ADSL - это ATM, который потом надо как-то во что-то инкапсулировать дабы передавать по ethernet-сетям. вот и спасает qnq, в худшем случае просто .1q
А какой MTU должен быть в этом случае?
Для такого получается 1508, я прав?
ну и какой влан в какой вложен?
vconfig set_name_type VLAN_PLUS_VID_NO_PAD задает вид именования vlan
далее создается два vlan и передаются в транке с одного интерфейса
а где конфетка?
лучше для наглядности пример, когда vlan 8 в vlan 8 вложили....
> лучше для наглядности пример, когда vlan 8 в vlan 8 вложили....Router(config)# interface gigabitEehernet0/0.008008
Router(config-subif)# encapsulation dot1q 8 second-dot1q 8