在Ubuntu上通过物理网络向self发送流量

时间:2014-03-28 23:48:36

标签: linux networking linux-kernel nic

我有一个双端口以太网网卡,让我们说我已经在一个环路中连接了2个端口,并将以下IP分配给2个以太网接口:

  • eth2 - > 192.168.2.1
  • eth3 - > 192.168.3.1

我想通过物理网络将流量从1个端口发送到另一个端口,例如从192.168.3.1 ping 192.168.2.1。但是,Linux内核中的TCP / IP堆栈识别出这两个地址是本地的,而是将流量发送到环回适配器,因此流量永远不会到达物理网络。

我最接近解决方案的是Anastasov的send-to-self patch,遗憾的是,自内核3.6以来已停止使用它,所以它不能为我在Ubuntu 13.10(内核3.11)上工作。我试图找到重写3.11的补丁,但我似乎无法在Ubuntu发行版中找到它们:

  • 在include / linux / inetdevice.h
  • 净/的IPv4 / devinet.c
  • 净/的IPv4 / fib_frontend.c
  • 净/的IPv4 / route.c
  • 文档/网络/ IP-sysctl.txt中

有没有办法可以让send-to-self补丁工作,还是替代?

2 个答案:

答案 0 :(得分:2)

您可以为此目的使用网络名称空间。

ip-netns的联机帮助说:

A network namespace is logically another copy of the network stack,
with its own routes, firewall rules, and network devices.

以下只是this answer的副本:

创建网络名称空间并将其中一个接口移入其中:

ip netns add test
ip link set eth1 netns test

在新的命名空间中启动shell:

ip netns exec test bash

然后继续进行,就好像您有两台计算机一样。完成后,退出外壳程序并删除名称空间:

ip netns del test

答案 1 :(得分:1)

您可以尝试通过运行" ip"来配置路由表。命令:

ip route add to unicast 192.168.3.1 dev eth2
ip route add to unicast 192.168.2.1 dev eth3

新路由将被添加到路由表中,它应该能够在出口路由查找到达" 192.168.3.1"之间的主机本地路由之前生效。和" 192.168.2.1"因此,流量应通过物理接口" eth2"和" eth3"而不是环回" lo"

没试过自己,但应该工作。