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

我的一个Ubuntu的安装有两个nic,

NIC 1 – >面向公众的公共IP,74 * NIC 2 – >内部IP地址192.168.3.1

我想摆脱它的是

NIC 1将在端口80和443上进行侦听并作出响应但是,本机无法通过NIC 1进行任何外出通信,不允许通过防火墙,也不允许为NIC 1定义网关

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

所以下面是我所configuration的

NIC 1 Ip 74.XXXXX掩码255.255.255.XXX

NIC 2 IP 192.168.3.2 MASK 255.255.255.0网关192.168.3.1

现在我要么不正确地理解如何做我想做的事情,要么是在linux中执行不正确。

你看到这个设置有什么问题吗?

另外在框中,我没有configuration其他任何东西比/ etc / network / interfaces文件。

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

我没有IP列表,所以提到ips是从我的随机思想,但子网和第一部分是正确的。

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 /networking/接口

 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 

一般情况下,您不会将网关应用到接口,除非您定义了多个路由表,只有一个。

假设每个networking上实际上都有一个网关,而你只是想定义一个特定的行为(普通的主机stream量走出私人networking,但是面向公众的stream量发送它将stream量返回到它所进入的网关) – 你需要一些一种基于源地址的策略路由。

现在可能发生的事情是,stream量正在进入正确的接口,然后,如果它是非本地地址,则会将其默认路由发送到另一个网关,这可能是防火墙丢弃数据包,因为它没有看到另一半的会议。 它在同一个公共networking上使用的其他设备工作的原因是因为它们不必走出默认路由 – 它们具有更具体的接口路由来使用,从而使返回的stream量到达需要的地方正确。

在linux中,你应该能够通过创build第二个路由表来处理这个问题,在第二个路由表中指定公网侧的网关,不pipe它是什么,然后是一个策略路由条目,说明源地址应该使用该路由表而不是系统默认的一个。

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

谷歌的“iproute2策略路由”和寻找“简单的源路由”或somethign类似 – 它应该让你到你想去的地方。

这是答案

假设你有一个带有多个networking接口卡(NIC)的Linux系统 – 比如eth0和eth1。 默认情况下,pipe理员可以定义一个默认路由(在eth0上)。 但是,如果您在eth1上收到stream量(即ICMP ping),则默认情况下,返回stream量将会超出eth0。

我不是100%肯定我明白你的问题,但我会猜测。 也许一些ascii艺术来描述你的networking会有所帮助。

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

我认为你的问题是你没有NIC 1的网关。如果你没有为NIC 1设置网关,那么它将只能响应同一个IPnetworking上的主机(即74.xxxxxx)和同一个物理网段。 它将无法通过任何比本地部分更远的stream量。

你需要做的是将NIC2作为通过192.168.3.1的默认路由。 这应该会导致所有的传出连接,除了那些74.xxxxxxx去通过NIC2和使用192.168.3.1作为网关。

您还需要为74.xxxxxxnetworking添加路由,该networking使用NIC2作为其接口,192.168.3.1作为其网关。 这样,任何去往74.xxxxxxnetworking的数据包也将通过NIC2和192.168.3.1网关。 您需要删除使用NIC 1的74.xxxxxx的路由,或者需要使其具有比通过NIC1和192.168.3.1的路由更不利的指标。 当然,你必须确保路由器192.168.3.1可以到达互联网的其余部分。

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

你也可以在/etc/sysctl.conf中用net.ipv4.conf.ethX.rp_filter = 0禁用路由path过滤 – 这也可以做到。

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