更改特定程序的默认网关?

更改特定程序的默认网关?

我有一台托管在数据中心的机器,有 3 个网络接口。

Interface  network         ip address
eth0       192.168.1.0/24  192.168.1.10
eth1       192.168.2.0/24  192.168.2.10
eth2       192.168.3.0/24  192.168.3.10

我的默认网关设置为192.168.2.1,我可以在其中访问数据中心提供的一些服务(存储库、ntp等)。

网络192.168.1.0/24有一个网关192.168.1.1,通过它我可以访问龙居住的外部世界。当我需要离开我的服务器时,我只需添加一个静态路由。我有点喜欢这个设置,因为我知道我的服务器连接到哪里。

现在,我有一个邮件客户端(exim4),它需要向任何人发送邮件。因此理想情况下需要将默认网关设置为 192.168.1.1。有没有办法只路由此特定服务的流量,或者我应该简单地更改服务器上的网络配置?

我使用的是 Debian 8,如果这有什么区别的话。

答案1

您可以将防火墙 (iptables) 设置为根据 3 个特征之一路由到特定网关:目标端口、源端口或所有者(可能不起作用,请参见下文)

首先,您将为您的特殊应用程序添加一个自定义路由表(网关 192.168.1.1),创建一个规则,将所有带有掩码的包重定向1到该表,并创建一个 iptables 规则,在包被重定向时伪装源地址:

ip route add 192.168.1.0/24 dev eth0 table 1
ip route add 0/0 via 192.168.1.1 table 1
ip rule add fwmark 1 table 1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.10

对于包装标记,您有 3 个选项:

按目标端口重定向,将 PORT 与 exim 使用的服务器端口一起计费:

iptables -t mangle -A OUTPUT -p tcp --dport PORT -j MARK --set-mark 4

按源端口重定向,如果仅使用一个源端口,则使用 exim 本地使用的端口对 PORT 进行计费:

iptables -t mangle -A OUTPUT -p tcp --sport PORT -j MARK --set-mark 4

按所有者重定向,使用 Exim 进程中的 PID 更改 OWNER(请参阅 参考资料 中iptables -m owner --help的其他选项):

iptables -t mangle -A OUTPUT -m owner --pid-owner OWNER -j MARK --set-mark 4

按所有者考虑重定向www.frozentux.net:

The pid, sid and command matching is broken in SMP kernels since they use different process lists for each processor. It might be fixed in the future however

因此,根据您的内核,此功能不可用或已损坏(将无法正常工作)

相关内容