VPN的传入/传出分离

llo*_*art 7 networking dns debian vpn

我的情况是,我希望我的 Debian 服务器的所有传出连接都通过我订阅的商业 VPN 服务,但我仍然希望在此服务器上运行公共可访问的服务,而不是让它们通过 VPN。

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

澄清一下,我只想使用 VPN 来隐藏我的传出连接,但仍然能够回答对我的真实IP 的请求,以获取以这种方式出现的任何内容。

更复杂的是——我将 BIND 用作我域(在公共互联网上)的权威服务器,并且我还打开了递归,因此我可以将它用作本地网络(私有 ip 范围)的解析器。是否可以 VPN 来自 BIND 的传出 DNS 连接,但仍允许传入请求到达权威位?

我认为这与iproute2,但我无法弄清楚正确的配置。

我在 Debian 6.0.7 上。VPN 是 OpenVPN。

Cel*_*ada 5

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

您的(主要)默认路由应该指向 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
Run Code Online (Sandbox Code Playgroud)

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

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