背景
我运行具有两个外部 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:
- 使用 IP-B 执行此命令
- 使用 IP-C 执行此命令
- 对这个命令使用 IP-D
- ...
关于如何配置上述场景的任何想法?我目前正在使用 Ubuntu,但我对其他 Linux 发行版的建议持开放态度。
大多数与网络相关的工具(如 ping)都有一个选项来选择它们将用于传出连接的源 IP,因此例如使用 ping 您可以使用
ping -I IP-B
.对于使用 IP-B 的所有流量,您需要将默认路由指向的接口的主要/第一个 IP 调整为 IP-B。Linux 所做的是为您的目的地查找路由,例如 8.8.8.8,查看默认路由是在这种情况下采用的路由,然后如果未指定数据包的来源,即 0.0.0.0,它将用指向该目标的接口的主 IP。
但是,如果您最终想要实现的是对源自服务器的任何流量的源 IP 进行更细粒度的控制,您将需要阅读Linux 高级路由和流量控制HOWTO 并寻找如何将其与 netfilter/ 结合的示例iptables fwmark 以根据防火墙规则操作要查看的路由表,这将允许您通过将 B IP 设置为源的默认路由将流量类别 B 路由出去,依此类推。
此处要搜索的关键字是基于策略的路由 (PBR)。