IPTables,通过 VPN 路由特定端口

IPTables,通过 VPN 路由特定端口

我在家里使用动态 IP 运行自己的邮件服务器。动态 IP 通常被列入黑名单,因此我目前通过提供商的中继发送邮件。我想将其更改为直接发送邮件,为此,在某个地方有一个具有固定 IP 的虚拟服务器。虚拟服务器通过 openvpn 连接到我的本地服务器。我想使用 openvpn 隧道将(仅)外发邮件路由到“世界”。所有其他流量都应采用正常路由。

vserver(eth0 上的公网 IP)运行 openvpn 服务器,IP 为 10.20.0.1。邮件服务器(本地 IP 为 192.168.168.100)运行 openvpn 客户端,IP 为 10.20.0.6。

使用 openvpn 建立邮件服务器 IP 路由:

# route
default         192.168.168.1   0.0.0.0         UG    0      0        0 eth0
10.20.0.1       10.9.0.5        255.255.255.255 UGH   0      0        0 tun1
10.20.0.5       *               255.255.255.255 UH    0      0        0 tun1
192.168.168.0   *               255.255.255.0   U     0      0        0 eth0

根据我的研究,我了解到正确的做法应该是标记传出的邮件包并将其路由到虚拟服务器。所以我在邮件服务器上尝试了以下操作:

echo 201 mail.out >>/etc/iproute2/rt_tables
ip rule add fwmark 1 table mail.out
iptables -A PREROUTING -t mangle -p tcp --dport 25 -j MARK --set-mark 1
ip route add default via 10.9.0.5 dev tun1 table mail.out

(我稍后会添加端口 465。)

此外,我在虚拟服务器上启用了伪装和 IP 路由。

但是,似乎所有外发邮件流量仍以正常方式发出。在虚拟服务器上使用 tcpdump,我看不到任何到端口 25 的外发连接的踪迹。因此,连接肯定仍是直接的,在 VPN 之外。我错过了什么?

答案1

您将需要在 iptables 规则中“标记”数据包。

尽管问题不同,但 Lekensteyn 对这个问题的回答实际上已经完全涵盖了这一点: iptables-目标是将数据包路由到特定接口?

相关内容