Linux/ubuntu 两个网卡,一个网关,一个面向公众,一个面向内部

Linux/ubuntu 两个网卡,一个网关,一个面向公众,一个面向内部

我安装了一个有两个网卡的 ubuntu,

NIC 1 -> 面向公众,具有公共 IP,74。.* NIC 2 -> 面向内部,内部 IP 为 192.168.3.1

我想得到的是

NIC 1 将监听端口 80 和 443 并做出响应,但此计算机无法通过 NIC 1 进行任何传出通信,它不允许通过防火墙,并且没有为 NIC 1 定义网关

所有传出的通信都经过 NIC 2 的网关。

以下是我配置的

NIC 1 IP 74.XXXXX 掩码 255.255.255.XXX

网卡 2 IP 192.168.3.2 掩码 255.255.255.0 网关 192.168.3.1

现在我要么没有正确理解如何做我想做的事情,要么它在 Linux 中被错误地实现。

您觉得这个设置有什么问题吗?

另外,在框中除了 /etc/network/interfaces 文件之外我没有配置任何其他内容。

还忘了提到我看到的问题是什么,问题是一切似乎都正常,但公共 IP 只能从外部路由器访问,这意味着我有这个盒子的 74.1.1.1 IP,然后所有连接到该路由器的设备在该子网中都可以访问该公共 IP,在该路由器外面它没有响应。

我手头没有 IP 列表,因此提到的 IP 是我的随机想法,但子网和第一部分是正确的。

路由

74.XXX.XXX.216/29 dev eth1  proto kernel  scope link  src 74.XXX.XXX.221
10.2.0.0/16 dev eth0  proto kernel  scope link  src 10.2.182.121
default via 10.2.182.12 dev eth0  metric 100

/etc/网络/接口

auto eth0
iface eth0 inet static
address 10.2.182.121
netmask 255.255.0.0
gateway 10.2.182.12

auto eth1
iface eth1 inet static
address 74.XXX.XXX.221
netmask 255.255.255.248
gateway 74.XXX.XXX.217

答案1

您不会将网关应用于接口 - 而是将网关应用于路由实例 - 通常,除非您定义了多个路由表,否则只需一个。

假设每个网络上实际上都有一个网关,而您只是想定义一种特定的行为(常规主机流量从专用网络传出,但面向公众的流量将其返回流量发送到其进入的网关) - 您需要某种基于源地址的策略路由。

现在可能发生的情况是,流量从正确的接口进入,然后,如果是非本地地址,它将通过默认路由到达另一个网关,这可能是防火墙,它丢弃了数据包,因为它看不到会话的另一半。它之所以可以在您使用的同一公共网络上的其他设备上工作,是因为它们不必通过默认路由 - 它们可以使用更具体的接口路由,从而将返回流量正确地发送到需要的位置。

在 Linux 中,您应该能够通过创建第二个路由表来处理这个问题,该路由表指定公共网络端的网关(无论它是什么),然后创建一个策略路由条目,该条目规定任何具有源地址的东西都应该使用该路由表而不是系统默认路由表。

您现在不需要指定的两个默认网关 - 这会产生奇怪的行为 - 从配置中删除公共网关。它应该通过 iproute2 机制进入自己的路由表。

在 Google 上搜索“iproute2 策略路由”,然后寻找“简单源路由”或类似的东西——它应该能带你到你想去的地方。

答案2

这就是答案

假设您的 Linux 系统有多个网络接口卡 (NIC) — 比如 eth0 和 eth1。默认情况下,管理员可以定义单个默认路由(在 eth0 上)。但是,如果您在 eth1 上接收流量(即 ICMP ping),则返回流量将默认从 eth0 发出。

答案3

我不能 100% 确定我理解了你的问题,但我猜一下。也许用一些 ASCII 文字来描述你的网络会有所帮助。

如果我理解正确的话,您让 NIC 1 IP 监听 80 和 443,并且只响应 80/443 上的传入请求。您不希望 NIC 能够发起/启动任何传出连接。所有传出连接都应从 NIC2 发起/启动。

我认为您的问题在于您没有为 NIC 1 设置网关。如果您没有为 NIC1 设置网关,那么它将只能响应同一 IP 网络(即 74.xxxxxx)和同一物理网段上的主机。它将无法将流量传递到该本地网段以外的任何地方。

您需要做的是将 NIC2 通过 192.168.3.1 设置为默认路由。这应该会导致除 74.xxxxxxx 之外的所有传出连接都通过 NIC2 并使用 192.168.3.1 作为网关。

您还需要为 74.xxxxxx 网络添加一条路由,该路由使用 NIC2 作为其接口,使用 192.168.3.1 作为其网关。这样,发往 74.xxxxxx 网络的任何数据包也将通过 NIC2 和 192.168.3.1 网关。您需要删除使用 NIC 1 的 74.xxxxxx 路由,或者您需要让它具有比通过 NIC1 和 192.168.3.1 的路由更差的度量。当然,您必须确保路由器 192.168.3.1 可以到达互联网的其余部分。

答案4

尝试在 NIC1 上添加具有高度量的默认路由,它允许应答请求,但操作系统仍将在具有较低度量的默认路由上路由传出连接。

您还可以使用 /etc/sysctl.conf 中的 net.ipv4.conf.ethX.rp_filter=0 禁用路由路径过滤 - 这也可以解决问题。

如果您想阻止 NIC_1 上的传出连接 - 请使用防火墙。

相关内容