linux - 您如何通过相同的网关路由返回数据包进行端口转发?
问题描述
描述 我有 HTTP 和 SMTP Linux 服务器以及我在同一个 LAN 上使用 firewalld 创建的两个 Linux 路由器。两个路由器都非常适合作为 Internet 网关。一个非常适合处理将公共传入端口转发到 LAN 中的服务器。我使用移动设备不是在 wifi 上,而是仅在单元上使用,来测试外部流量,加载页面。
但是,我试图让第二个路由器成为冗余备份,并使用不同的公共 IP 指向相同的服务器。问题是每台服务器只能使用来自其默认网关 IP 的端口转发。如果我将 HTTP 服务器网关 IP 切换到另一个路由器,那么它只适用于另一个路由器的端口转发,但不能同时使用两者,尽管将两个网关都添加到具有不同指标的 HTTP 服务器的路由表中。
需要明确的是,它总是从两个路由器接收数据包,并尝试将数据包返回到公共客户端 IP(测试时为移动 IP)。
我可以从 TCPDUMP 中看到它会将数据包返回到启动它的公共 IP。但是,客户端,无论是 Web 浏览器还是 SMTP 客户端,都无法完成会话,例如加载页面。我怀疑它会看到来自具有不同公共 IP 的不同服务器的数据包,并且不会将它们与会话相关联,从而丢弃它们。我必须使用手机在外面进行测试,所以不能使用 TCPDUMP。但是,当我切换网关时的行为是非常有力的证据,这就是正在发生的事情。
问题:我怎样才能让它从它接收端口转发的网关返回数据包,而不是使用它的默认网关,或者以其他方式解决这个问题?
注意:如果我允许所有源在路由器的内部区域伪装,客户端加载页面没有问题。但是,这不是一个选项,因为它是一个巨大的安全问题,因为服务器只能看到路由器的 IP,而不是客户端的公共 IP,将 SMTP 服务器变成开放中继并且无法通过 IP 保护。这有助于确认路由困境。它可以理解地解决它,因为它总是会路由回进行端口转发的路由器,因为无论它使用哪个网关,它都会成为目标 IP。
这也可以通过所有公共 IP 在内部正常工作,可能是因为当源是内部时我允许在内部区域上伪装。
解决方案
推荐阅读
- java - 如何将对象列表转换为Java中的整数列表?
- google-cloud-platform - 如何识别 cloudbuild 子任务
- powerbi - Power Query 数据加载:大型数据集导致“未找到表达式.错误列”
- javascript - Reactstrap Collapse 在 React 组件中不起作用
- jquery - 如何防止双击键码9,即在jquery中按tab键
- javascript - 使用Mongo find javascript时如何使用部分匹配?
- sql - Oracle SQL 内连接不返回具有空值的记录
- python - PYTHON - 如何根据分隔符将一列分成两列
- operators - 'true and (true or false) and false' 的答案应该是什么?
- maven - 在 Mac 中为 Catolina 或更高版本设置 maven (mvn) 的环境变量路径