如何使用另一个 IP 地址来发送传出流量?

如何使用另一个 IP 地址来发送传出流量?

背景

我运行一个具有两个外部 IPv4 地址的服务器。IP 地址 A (IP-A) 和 IP 地址 B (IP-B)。

目标

我只想通过 HTTPS 端口 443 和 SSH 端口 22 访问 IP-A。IP-B 不应监听任何传入流量。

然后我希望服务器仅对所有传出流量使用 IP-B。或者至少告诉服务器仅对特定命令使用 IP-B 来传出流量。

伪代码示例:

1: I connect to the server over IP-A and call `ping example.com`
2: The server executes it and sends the ping requests outgoing from IP-B to example.com.
3: I can read the output of the command on my connection with IP-A

我为什么想要这个?

因为我将使用的管理控制台在 IP-A 上。我希望 IP-A 与 IP-B 不直接相关(至少对于外部世界而言)。相反,我希望 example.com 看到“我收到了来自 IP-B 的 ping 请求。”。当有人连接到 IP-B 时,该 IP 地址不会监听任何内容。而 IP-A 不在他们的日志中。

最终我想添加更多地址并能够告诉 IP-A:

  1. 使用 IP-B 执行此命令
  2. 使用 IP-C 执行此命令
  3. 使用 IP-D 执行此命令
  4. ...

关于如何配置上述场景,您有什么想法吗?我目前正在使用 Ubuntu,但我愿意听取有关其他 Linux 发行版的建议。

答案1

大多数网络相关工具(例如 ping)都会有一个选项来选择用于传出连接的源 IP,例如,使用 ping 时您可以使用ping -I IP-B

为了全部流量要使用 IP-B,您需要调整默认路由指向 IP-B 的接口的主/第一个 IP。Linux 所做的是查找目的地的路由,例如 8.8.8.8,查看默认路由是否是本例中要采用的路由,然后如果数据包的来源未指定,即 0.0.0.0,它将用指向该目的地的接口的主 IP 替换它。

然而,如果你最终想要实现的是更细粒度地控制来自你服务器的任何流量的源 IP,那么你需要阅读Linux 高级路由和流量控制HOWTO,同时寻找如何将其与 netfilter/iptables fwmark 相结合的示例,以根据防火墙规则操纵要查看的路由表,这将允许您通过将 B IP 设置为源的默认路由将 B 类别流量路由出去等等。

这里要搜索的关键词是基于策略的路由 (PBR)。

相关内容