问题标签 [vlan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
656 浏览

c - 通过 RAW 套接字在虚拟 VLAN 接口上复制以太网帧

我正在使用原始以太网帧。我的 Linux 机器上有一个以太网接口 eth0 和一个虚拟 VLAN 接口 eth0.100。我的 RAW 套接字绑定到虚拟接口 eth0.100。问题是,当一个带有 VLAN 标记(VLAN ID=100)的帧从外部传输到这个接口时,我的应用程序会得到同一个以太网帧的两个副本。从应用程序中我看不到这些帧之间的区别,有效载荷的内容完全相同。我的界面未在混杂模式下运行。

我使用 tcpdump 来捕获帧,下面是结果

  • eth0:这会得到一个带有 VLAN 标记的帧 - 100。
  • eth0.100:这会得到一个没有 VLAN 标记的帧。

如果我绑定到 eth0,我仍然会得到两个帧副本。但是如果我删除 eth0.100 并绑定到 eth0,我只会得到一份副本。我的应用程序是否获得了框架的两份副本,一份来自 eth0,一份来自 eth0.100,即使我只绑定到 eth0.100 ?

我尝试使用 BPF,但不确定在 eth0.100 上使用什么过滤器。

0 投票
2 回答
142 浏览

networking - 阐明一对多子网/VLAN 配置

在推荐的一对一实施之外,我正在探索 IP 子网和 VLAN 之间的替代多重性。我的理解如下:

多个子网到一个 VLAN(通过交换机连接):

  • 跨两个子网的主机将接收第 2 层广播(例如 ARP),但会忽略缺少以它们为目标的 IP 的流量。

问:如果我可以在帧头中手动插入目标 MAC 地址,我是否能够在没有第 3 层设备的情况下跨子网进行通信?我的理解是,第 2 层交换机忽略了不同的子网,并且假设它知道目标 MAC 地址的位置,将向其方向转发数据包。目标 PC 看到它的 IP 和 MAC 地址后,会接受数据包,从而有效地让它跨越子网而不会被路由。

跨多个 VLAN 的单个子网:

  • 广播流量将被隔离到各个 VLAN。这会破坏 ARP,因为以同一子网中的另一台机器为目标的主机(但不知不觉地在另一个 VLAN 中)会发出一个永远不会响应的 ARP 请求。
    这将有效地为每个 VLAN 创建单独的、相同的地址池,尽管我不确定路由器在尝试 VLAN 间通信时如何区分两者。我有点不确定这种配置的优缺点..

我们为什么要这样做?

0 投票
1 回答
40 浏览

billing - 未购买 SoftLayer VLAN

我的账户中有很多 VLAN 没有计费项目,这意味着它们没有明确购买。因此,如果我想创建一个自动缩放组并将虚拟机部署在两个以上的此类 VLAN 中,我无法选择它们作为我的目标 VLAN。那么这些未购买的 VLAN 最终是如何存在于我的帐户中的呢?是不是因为我在没有指定 VLAN 的情况下提前创建了自动缩放组,而 SoftLayer 自动为我随机选择了一个?

0 投票
1 回答
2216 浏览

c - IP_PKTINFO 套接字选项不起作用

几个星期以来,我一直在努力解决这个问题,最后终于接受了这样一个事实:我就是想不通。我也一直在与团队中的网络工程师合作,但无济于事。我的问题如下:

我正在开发一个应用程序,该应用程序在多个 vlan 上执行非常直接的 UDP 组连接(每个 vlan 都作为其自己的虚拟接口公开,在这种情况下,如果相关,NIC 是 SolarFlare)。所有这些连接都发生在单个套接字上(其中消息根据有效负载序列号进行重复数据删除)。在执行 IP_ADD_MEMBERSHIP 之前,我正在设置这样的套接字选项:

我需要通过 IP_PKTINFO 获取接口索引或通过 PACKET_AUXDATA 获取 vlan id,以便收集下游统计信息。现在,一切初始化都没有错误,我能够毫无问题地处理 UDP 有效负载。我遇到麻烦的地方是当我尝试访问上面请求的辅助/控制消息时,如简单的调试日志所示:

对于收到的每个数据包,这仅输出:

作为参考,SOL_SOCKET=1 和 SO_TIMESTAMP=29。因此,尽管我请求了 3 种不同的控制消息类型,但仅填充了时间戳。此行为与我是在单个接口上加入单个 UDP 组还是在多个接口上加入多个组无关。

一种解决方案是重写应用程序以将每个接口放在自己的套接字上,然后将所有内容汇集到一个队列中,但根据我的经验,上下文切换会破坏应用程序的性能。根据手册页 ip(7),IP_PKTINFO 自 Linux 内核 2.2 起就可用。我正在运行使用内核 3.13.0-24-generic 的 Ubuntu 14.04.4。

任何帮助、见解或方向将不胜感激!

0 投票
1 回答
361 浏览

linux - 如何添加 Vxlan Tag 以隔离不同的 Docker 容器组

首先,我知道使用基于 ip 命令的标记创建 VXLAN 接口:

ip link add vxlan-br0 type vxlan id <tag-id> group <multicast-ip> local <host-ip> dstport 0

但是对于我的实际需求是没有用的,我的需求是用不同的标签来隔离多个docker容器,比如:

brctl addif br1 veth111111 tag=10 # veth111111 is the netdev used by docker container 1 brctl addif br1 veth222222 tag=20 # veth222222 is the netdev used by docker container 2 brctl addif br1 veth333333 tag=10 # veth111111 is the netdev used by docker container 3

我想将容器 2 与容器 1 和 3 隔离,并且不隔离容器 1 和 3 之间的通信。如何实现这一点?

0 投票
1 回答
185 浏览

networking - 为什么802.1Q不封装原帧?

我正在研究VLAN。经过几个小时的搜索,我知道 802.1Q 没有封装原始帧,而是在源 MAC 地址和原始帧的“EtherType”字段之间添加了一个 32 位字段。但我不知道为什么。有人可以向我解释为什么 802.1Q 不封装原始帧吗?非常感谢。

0 投票
0 回答
983 浏览

linux - 构建内核模块[链接时获取未定义的引用]

我正在尝试编译一个使用 8021q 调用的模块。我在 /lib/modules/[version]/build/net/8021q 中安装了带有 makefile 和 kconfig 的 8021q。但是,当我尝试构建时,我收到以下信息:

我是构建模块的新手,那么如何使这个功能对我的模块可见?

我的代码块(充满错误,但仅作为示例):

我的生成文件:

谢谢您的帮助!

0 投票
4 回答
987 浏览

cisco - 在 Cisco 交换机上配置端口

我对思科网络非常陌生(也没有完成任何课程)。我一直在尝试自己学习一些网络,并且在做一些我个人工作所需的基本东西时没有遇到任何麻烦。但我计划购买一台新的思科交换机(千兆交换机)并将其配置到 2 个不同的网络(1 个是互联网,另一个是用于特定工作的单独网络)。我想以这样的方式配置端口,即前几个插槽用于普通互联网,其余插槽用于我的其他网络。例如,如果它是 Cisco 2950 48 端口交换机,我的本地互联网网络的第一个 1-16 端口和我其他网络的 17-32 端口。有人可以告诉我如何实现这一目标吗?抱歉这么长但基本的问题,我只是想节省几美元并学习新的东西。任何帮助,将不胜感激。干杯

0 投票
0 回答
1749 浏览

linux - 为什么我在 linux 网络命名空间中的 vlan 接口无法 ping 父接口?

所以我正在编写一个用命名空间隔离自身的程序,但我坚持让网络按我的意愿工作。我计划通过 Tor 路由我的应用程序,这是一个 Socks5 代理,它在网络接口上公开一个 SocksPort。

当我的应用程序已经与虚拟机和仅主机路由隔离时,我的应用程序需要工作,主机上的 Tor 绑定说 vboxnet1 (192.168.56.1:9051),VM 内部的 eth0 是 (192.168.56.101),然后我有一个网络命名空间。因此,我不能简单地使用 veth 对并将 Tor 绑定到父命名空间上的 veth,因为 Tor 甚至不在虚拟机中。所以最终,我需要通过父命名空间中的 eth0 (192.168.56.101) 从命名空间连接到 192.168.56.1:9051 上的 SocksPort。但是,当我不在虚拟机中并且 Tor 在父命名空间中时(与具有父命名空间的 VM 的主机相反),我使用的解决方案也应该可以工作。

这只是关于为什么 veth 对等对我不起作用的一些背景,总的来说,我想要做的是,我的问题更具体;

我按照以下链接中的指南进行操作:http: //blog.scottlowe.org/2014/03/21/a-follow-up-on-linux-network-namespaces/

在 Linux 3.16 上

我将立即执行并显示我正在输入的确切命令:

ip netns 添加蓝色

ip 链接添加链接 eth0 名称 eth0.100 类型 vlan id 100

此时“ip -d link”,显示如下(MAC 已编辑);

ip 链接设置 eth0.100 netns 蓝色

我注意到蓝色命名空间中的 ip -d 链接具有以下输出

ip netns exec 蓝色 ip -d 链接

请注意,现在是 eth0.100@if2 而不是 @eth0,我不确定这是否相关。

我提出了环回,这实际上不在我提到的指南中,但我认为这是必需的:

ip netns exec blue ip link set dev lo up

ip netns exec blue ip addr add 192.168.56.102/24 dev eth0.100

ip netns exec blue ip link set eth0.100 up

ip netns exec blue ifconfig 现在显示这个(稍微编辑了)

从父命名空间 ifconfig 显示

但是当我按照指南尝试从命名空间ping通时;

ip netns exec blue ping -c 4 192.168.56.101

PING 192.168.56.101 (192.168.56.101) 56(84) 个字节的数据。

从 192.168.56.102 icmp_seq=1 目标主机不可达

它总是无法访问,如果我尝试 192.168.56.1 也是如此,这最终是我想要连接的(它是主机上的 vboxnet,可以从 vm 中的 eth0 路由到,但我什至不能从命名空间路由到 eth0,即使将 vlan 接口添加到命名空间)。

感谢您提供的任何帮助,我已经尝试了几个小时,并且几乎用尽了所有资源。

0 投票
1 回答
263 浏览

networking - 由于同一网络上有多个 IP,Packetfence 无法配置

我正在尝试在虚拟机上安装 PacketFence,并为服务器提供了 8 个专用 IP。

它们在 eth1:0 -> eth1:7 上都是静态的,所以不是 eth1、eth2 等。

当尝试在 Packetfence 中为“正常”、“注册”等配置 vlan 时,我收到一条错误消息,提示它们需要位于不同的网络上。

如果没有物理上独立的网络,我不能安装 Packetfence 吗?