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

ell*_*iel 4 linux networking nic linux-kernel

我有一个双端口以太网 NIC,假设我已连接了 2 个环路端口,并将以下 IP 分配给 2 个以太网接口:

  • eth2 -> 192.168.2.1
  • eth3 -> 192.168.3.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 发行版中找到这些补丁:

  • 包含/linux/inetdevice.h
  • 网/ipv4/devinet.c
  • 净/ipv4/fib_frontend.c
  • 网/ipv4/route.c
  • 文档/网络/ip-sysctl.txt

有没有办法让“发送给自己”补丁发挥作用,或者有其他选择吗?

Gra*_*dma 5

您可以使用网络命名空间来实现此目的。

正如ip-netns的联机帮助页所说:

A network namespace is logically another copy of the network stack,
with its own routes, firewall rules, and network devices.
Run Code Online (Sandbox Code Playgroud)

以下只是该答案的副本:

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

ip netns add test
ip link set eth1 netns test
Run Code Online (Sandbox Code Playgroud)

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

ip netns exec test bash
Run Code Online (Sandbox Code Playgroud)

然后继续操作,就好像您有两台机器一样。完成后退出 shell 并删除命名空间:

ip netns del test
Run Code Online (Sandbox Code Playgroud)