我有一个双端口以太网网卡,让我们说我已经在一个环路中连接了2个端口,并将以下IP分配给2个以太网接口:
我想通过物理网络将流量从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发行版中找到它们:
有没有办法可以让send-to-self补丁工作,还是替代?
答案 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"
没试过自己,但应该工作。