如何让局域网中的主机在 Linux 中转发同一局域网内其他主机之间的流量

如何让局域网中的主机在 Linux 中转发同一局域网内其他主机之间的流量

我在 Mininet 中设置了一个测试拓扑,如下所示:

sudo mn --mac --topo linear,3  --switch ovsk --controller=remote,ip=10.0.2.15,port=6653

像这样:
简单拓扑
我希望从 H1 到 H3 的流量先访问 H2,然后再转发到 H3。我已经在交换机 (Open vSwitch) 上设置了流量规则来实现这一点。但是,当流量流向 H2 时,流量会在那里被丢弃。

我应该向 H2(Ubuntu 14.04)添加哪些配置,以便 H2 能够转发不是发往它、也不是源自它的流量?

答案1

我认为你需要启用的功能是IP 转发

可以使用以下sysctl实用程序进行访问:

sysctl -a | grep forwarding在我的 Mac 上生成:

net.inet.ip.forwarding: 0
net.inet6.ip6.forwarding: 0

在 Ubuntu 上可能看起来略有不同。该0值表示 IP 转发已禁用。

为了启用 IP 转发(v4),我将以 root 身份执行以下操作:

[nevin-mac-mini:~] root# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1

这应该会立即生效,但是重启后它不会继续存在。为了做到这一点,我会放置

net.inet.ip.forwarding=1/etc/sysctl.conf

答案2

感谢您的回答,我最终可以通过在交换机中重写数据包的目标 Mac 地址来做到这一点。问题是,主机 2 丢弃了不是发往它的数据包(不同的 Mac 目标地址)。因此,通过将目标 Mac 地址重写为交换机 2 中的主机 2 的 Mac 地址,并通过激活主机 2 中的 IP 转发,流量被成功重定向。所以第一步是告诉 S2 将流量发送到主机 2,目标 Mac 是主机 2。第二步是告诉 S2 将从主机 2 返回的流量的 Mac 地址重写为主机 3 的 Mac 地址(以恢复原始 mac 地址)。

相关内容