Debian

VPN的傳入/傳出分離

  • October 11, 2018

我的情況是,我希望所有來自 Debian 伺服器的傳出連接都通過我訂閱的商業 VPN 服務,但我仍然希望在此伺服器上執行公共可訪問的服務,而不是讓它們通過 VPN。

也就是說,我在此伺服器上執行了 BIND9(權威)、SMTP、Apache、SSH 等,並且我希望傳入連接能夠在不使用 VPN 的情況下訪問這些服務。

澄清一下,我只想使用 VPN 來隱藏我的傳出連接,但仍然能夠在我的真實IP 上回答任何以這種方式出現的請求。

更複雜的是——我使用 BIND 作為我的域的權威伺服器(在公共網際網路上),並且我還打開了遞歸,因此我可以將它用作我的本地網路(私有 ip 範圍)的解析器。是否可以 VPN 來自 BIND 的傳出 DNS 連接,但仍允許傳入請求到達權威位?

我收集這與有關iproute2,但我無法找出正確的配置。

我在 Debian 6.0.7 上。VPN是OpenVPN。

您應該使用策略路由來實現這一點。規則不會太複雜。

您的(主要)預設路由應指向 VPN 介面。當 VPN 啟動時,您可能會使用 OpenVPN 的--redirect-gateway def1選項自動為您管理。它使 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 流量的類似配置留給您作為練習:-)

引用自:https://unix.stackexchange.com/questions/66426