我使用两个外部IPv4地址运行服务器。 IP地址A(IP-A)和IP地址B(IP-B)。
我只想通过HTTPS端口443和SSH端口22访问IP-A。 IP-B不应该听任何传入的stream量。
然后,我希望服务器仅对所有传出stream量使用IP-B。 或者至less告诉服务器只使用IP-B传出的stream量仅用于特定的命令。
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
因为我将使用的pipe理控制台在IP-A上。 我希望IP-A不直接与IP-B(至less对于外部世界)相关。 相反,我希望example.com看到“我得到了来自IP-B的ping请求”。 而当有人连接到IP-B的IP地址不听任何东西。 虽然IP-A在他们的日志中没有任何地方。
最终,我想添加更多的地址,并能够告诉IP-A:
有关如何configuration上述scheme的任何想法? 我目前正在使用Ubuntu,但我打开其他Linux发行版的build议。
大多数networking相关的工具,如ping将有一个选项来select它将用于传出连接的源IP,所以例如使用ping可以使用ping -I IP-B 。
对于所有使用IP-B的stream量,您需要调整默认路由指向IP-B的接口的主要/第一个IP。 Linux所做的就是查找目的地的路由,比如说8.8.8.8,看看在这种情况下默认的路由是什么,然后如果数据包的源是未指定的,例如0.0.0.0,它将用指向该目标的接口的主IP。
但是,如果您最终希望实现的是对源于服务器的任何stream量的源IP进行更细粒度的控制,则需要阅读Linux高级路由和stream量控制 HOWTO,并查找如何将netfilter / iptables fwmark根据防火墙规则操作要查找哪个路由表,这将允许您通过将B IP设置为源的默认路由将stream量类别B路由出去,等等。
这里search的关键字是策略路由(PBR)。