无需 lo 即可在 NIC 的不同别名之间进行路由

无需 lo 即可在 NIC 的不同别名之间进行路由

我有一个别名eth0叫做eth0:0

简短版本:我想通过外部网关将数据包从一个虚拟接口路由到另一个虚拟接口,并且不是通过环回接口。

详细信息:我想将数据包从eth0:0(通过使用LD_PRELOAD,我可以更改源 IP 地址)路由到eth0。但这是由lo接口处理的,我不想这样。我想要的是数据包从eth0:0应该转到某个默认网关,然后该网关将处理数据包,然后发送到eth0

我可以使用别名的源 IP 地址发送数据包eth0:0,但完整的设置不起作用,因为我无法为和分配不同的MAC地址,因此当外部网关必须将数据包发回时,它无法弄清楚将数据包发送到哪里。eth0eth0:0

实现这一目标的好方法是什么?

编辑:有人告诉我这个问题不清楚。

eth0: IP address: 10.0.0.1
eth0:1: IP address: 10.0.0.2
Gateway: 10.0.0.10

我想将数据包从 10.0.0.2 通过外部网关 10.0.0.10 发送到 10.0.0.1,以便我可以对数据包进行一些处理,然后发送到 10.0.0.1。

基本上,10.0.0.0.2 <-> 网关 <-> 10.0.0.1

答案1

听起来你想要一种开发设置。我在一台主机上实现此目的的方法是使用虚拟化。

如果您使用的是 Linux 桌面版,则只需安装 Virtual Box 并在其中安装另一个 Linux 副本。将 VM 设置为使用网桥进行联网。

然后像这样使用两个不同的子网

主持人。

address 10.0.0.0.1
netmask 255.255.255.0
gateway 10.0.0.254

虚拟机

address 10.0.1.1
netmask 255.255.255.0
gateway 10.0.1.254

使用 IP 别名将您的路由器设置为位于两个子网上。

答案2

如果 2 个接口位于同一子网上,则数据包不会通过线路发送出去 - 它会快捷地使用物理适配器 - 而不是使用环回设备。如果您真的想以这种方式路由数据包(我无法想象为什么),那么它们必须在单独的子网上进行配置(并连接到知道将数据包发送到何处的路由器)。

我无法为 eth0 和 eth0:0 分配不同的 MAC 地址,因此当外部网关必须将数据包发回时,它无法弄清楚将数据包发送到哪里。

我认为您的路由器将其视为桥接环路,在这种情况下只需在网络上的其他地方使用反射器即可。

答案3

如果您从本地路由表中删除 IP(这是可能的,它会从 eth0 发出),那么在返回的途中(它是否会返回尚有争议),Linux 会将其视为要转发的数据包,而不是本地传送的数据包。您永远不会处理收到的数据包,但会尝试转发它们。

如果您想向设备添加网络问题。请尝试查看netemqdisc。

例如。

tc qdisc add dev lo parent root netem loss random 50

将丢弃 50% 发往 的数据包lo

相关内容