首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过物理接口路由流量

通过物理接口路由流量
EN

Server Fault用户
提问于 2022-02-18 12:12:48
回答 1查看 1.5K关注 0票数 2

我在linux机器上有两个以太网接口。两者的IP地址如下:接口A: 10.0.1.5/24接口B: 10.0.2.5/24

两个接口都连接到在两个网络之间路由的路由器。

现在我想启动一个iperf3测试,在这里我将服务器绑定到接口A,客户机绑定到接口B。

问题是,流量不会离开物理接口,而是只通过内核,从而导致在链接上甚至不可能达到的速度。

我能做些什么来迫使流量通过物理接口?ip_forward是禁用的。

谢谢。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2022-02-18 18:43:14

要让Linux系统使用单一的路由堆栈,在不使用并非不可能接口的情况下从自身执行多归属的数据包路由是非常困难的(但是是lo )。

但是,在Linux上很容易创建额外的网络栈来模拟一个系统中的多个系统:通过使用网络命名空间

在这里,可以将两个NIC中的一个放弃给一个新的网络名称空间,该名称空间将是初始(主机)网络名称空间的对等点。他们不会直接通信,但只能通过外部路由器。让我们假设接口实际上名为AB,路由器使用的是地址10.0.1.1/24 + 10.0.2.1/24

  • 在使用iproute2工具时创建一个新的网络命名空间,并提供更多的方便管理(在幕后,名称空间伪文件被挂载以保持资源不需要进程,等等)。ip网加sideB
  • 将接口B移到新的网络命名空间: ip链路集、dev、netns、sideB注意:无线接口需要使用iw命令。
  • 配置新的网络名称空间:当接口更改名称空间时(无论是在接口消失的主机上触发地址消失的触发地址消失,还是在新的网络名称空间上),它的所有网络设置都会丢失: ip -n sideB link up ip -n sideB address添加10.0.2.5/24 dev B,但万一iperf3被混淆,则有一个功能回送接口: ip -n sideB链接已设置好。
  • 配置双方之间的路由(初始/主机名称空间可能已经通过默认路由,但让我们明确一下) ip路由通过10.0.1.1dev添加10.0.2.0/24 ip -n sideB路由添加10.0.1.0/24通过10.0.2.1dev B

现在可以运行(在两个终端中):

代码语言:javascript
运行
复制
iperf3 -s

ip netns exec sideB iperf3 -c 10.0.1.5

客户端在新的网络命名空间中运行。

一旦测量结束,删除网络命名空间将返回NIC到主机名称空间。但是,如果使用此网络命名空间(类似于ip netns exec side B setsid sleep 9999)留下任何进程,下面的ip netns delete sideB只会从iproute2工具的视图中删除名称空间,而不会在进程结束之前实际删除命名空间,从而使NIC难以恢复。所以最好先把它移回去:

代码语言:javascript
运行
复制
ip -n sideB link set dev B netns 1
ip netns delete sideB

其中1的意思是PID 1's网络名称空间:初始/主机名称空间。此外,这允许在一个容器内执行实验,该容器已被赋予物理NIC (因为1的S网络名称空间是容器的名称空间,而不是实际的主机名称空间),或者物理NIC将再次出现在主机上,如果没有对主机的访问,物理NIC将永远丢失到容器中。

如果没有工具(如udev +ifupdown的allow-hotplug或NetworkManager)检测NIC的幻影,则必须在返回时再次配置它。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1094092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档