VPN 传入/传出分离

VPN 传入/传出分离

我的情况是我想要我的全部外向的我的 Debian 服务器的连接通过我订阅的商业 VPN 服务,但我仍然想在此服务器上运行公共可访问的服务,而不是让它们通过 VPN。

也就是说,我在这台服务器上运行了 BIND9(权威)、SMTP、Apache、SSH 等,并且我想要传入连接能够在不使用 VPN 的情况下访问这些服务。

澄清一下,我只想使用 VPN 来隐藏我的外向的连接,但仍然能够回答我的请求真实的以这种方式出现的任何事物的知识产权。

让事情变得更加复杂的是,我使用 BIND 作为我的域(在公共互联网上)的权威服务器,并且我还打开了递归,这样我就可以将它用作我的本地网络(私有 IP 范围)的解析器。是否可以对来自 BIND 的传出 DNS 连接进行 VPN,但仍允许传入请求到达权威位?

我认为这与 相关iproute2,但我无法找出正确的配置。

我使用的是 Debian 6.0.7。 VPN 是 OpenVPN。

答案1

您应该使用策略路由来实现这一点。规则不会太复杂。

您的(主)默认路由应指向 VPN 接口。您可能会使用 OpenVPN 的--redirect-gateway def1选项,在 VPN 启动时自动为您进行管理。它使 OpenVPN 使用几条/1具有相同效果的路由覆盖系统默认路由,并确保 OpenVPN 本身仍然可以以正常方式到达其远程对等点,而不会出现明显的路由循环。

此默认路由将使本地发起的流量通过 VPN 传出,并且还会对通过 VPN 传入的流量做出回复并传出 VPN。

现在,您想要使用与非 VPN 接口上传入的连接关联的数据包的策略规则来覆盖此规则。您希望使这些数据包通过非 VPN 接口返回。

以下操作应通过 (1) 匹配以非 VPN 公共 IP 地址作为源地址的数据包并要求通过不同的路由表路由这些数据包,(2) 在该路由表中,将所有内容发送到原始 (非 VPN)默认路由。

ip route add table 42 default via X.Y.Z.W
ip rule add from A.B.C.D/32 table 42

A.B.C.D应该是您的公共(非 VPN)IP 地址,并且X.Y.Z.W应该是您的原始系统默认路由(通过您的 ISP,而不是通过您的 VPN)。

IPv6 流量的类似配置留给您作为练习:-)

相关内容