如何在 Debian 上設定 OpenVPN 伺服器以將 VPN 流量路由到 Internet

如何在 Debian 上設定 OpenVPN 伺服器以將 VPN 流量路由到 Internet

我正在 Debian 上設定 OpenVPN 伺服器。

我已經配置了伺服器,並且客戶端可以連接 - 它們被分配了 10.11.22.0/24 範圍內的 IP 位址。

我的 server.conf 檔案中有以下內容:

client-to-client
status /var/log/openvpn-status.log
verb 3

server 10.11.22.0 255.255.255.0

# This ensures Internet-bound traffic to-from clients can pass through the VPN
push "redirect-gateway def1"
push "dhcp-option DNS (my DNS address)"

我打開了 IP 轉送(在 中設定/etc/sysctl.conf

我想我需要在 iptables 上新增一條 NAT 規則,可能是以下形式

iptables -t nat -A POSTROUTING -s 10.11.22.0/24 -o eth0 -j MASQUERADE

(歡迎指正!)

我的問題是,這條規則應該放在哪裡,以使其持久化(以便在重新啟動後繼續存在)?

我想,在理想的情況下,該規則將在 VPN 伺服器啟動時添加,並在其關閉時刪除,但伺服器無論如何都設定為在 systemctl 中自動啟動,所以這可能並不重要。

我只是想在正確的位置執行此操作,這樣另一個系統管理員就不會感到驚訝,並且可以找到它。

答案1

一般來說,防火牆應該獨立於VPN。在 Debian 中,可以使用netfilter-persistentiptables-persistent軟體包(兩者都是必需的)來管理(保存和復原)。

然而,當 OpenVPN 伺服器啟動或關閉時,可以執行任何命令,為此它有一個腳本介面。在這種情況下,請不要使用netfilter-persistentiptables-persistent否則您的防火牆可能會膨脹(考慮以下情況:腳本添加了規則,然後保存防火牆,然後腳本刪除規則,重新啟動 - 防火牆已加載已儲存聲明規則,然後腳本運行並添加其他規則;重複幾次後,您會在防火牆中看到幾個相同的規則)。

首先,加入到 OpenVPN 設定:

script-security 2
up /etc/openvpn/add-rule.sh
down sudo /etc/openvpn/remove-rule.sh

script-security它需要它來運行腳本。

您很可能擁有非 root 權限user和/或group在伺服器配置中(這很好!),因此您的down腳本將以該使用者/群組權限執行。因此,您需要再次獲得權限才能刪除規則。建立一個/etc/sudoers.d/openvpn-remove-rule包含以下行的文件,該行將使該使用者能夠運行上述命令:

<user> ALL=(ALL) NOPASSWD: /etc/openvpn/remove-rule.sh

<user>可能會替換為 OpenVPN 設定中設定的任何使用者nobody)。否則chmod 0400 /etc/sudoers.d/openvpn-remove-rulesudo 將拒絕加載它。

解釋為什麼我們需要一個腳本而不僅僅是透過 sudo 將 iptables 命令呼叫直接放入 OpenVPN 設定中。簡而言之:安全。

相反,up命令在刪除 root 權限之前運行,但為了保持一致性,我建議也使用腳本。

這些腳本的內容很明顯,只需放入需要在伺服器啟動和關閉時執行的 iptables 命令即可。 (原則上,您可以在那裡使用任何命令,而不僅僅是 iptables。)使兩個腳本都可執行。

閱讀man openvpn其腳本介面的參考。

相關內容