如何在 Debian 上设置 OpenVPN 服务器以将 VPN 流量路由到互联网

如何在 Debian 上设置 OpenVPN 服务器以将 VPN 流量路由到互联网

我正在 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 服务器启动时会添加规则,当 VPN 服务器关闭时会删除规则,但无论如何,服务器在 systemctl 中设置为自动启动,所以这可能无关紧要。

我只是想在正确的地方做这件事,这样另一个系统管理员就不会感到惊讶,并且可以找到它。

答案1

一般而言,防火墙应独立于 VPN。在 Debian 中,可以使用netfilter-persistentiptables-persistent包(两者都是必需的)来管理(保存和恢复)。

但是,OpenVPN 服务器启动或关闭时可以运行任何命令,因为它有一个脚本接口。在这种情况下,不要使用netfilter-persistent&iptables-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-rule否则 sudo 将拒绝加载它。

解释为什么我们需要脚本而不是直接通过 sudo 将 iptables 命令调用放入 OpenVPN 配置中。简而言之:安全。

相反,up命令在放弃 root 权限之前运行,但为了一致性,我建议也使用脚本。

这些脚本的内容很明显,只需放入需要在服务器启动和关闭时运行的 iptables 命令即可。(原则上,您可以在其中使用任何命令,而不仅仅是 iptables。)使两个脚本都可执行。

阅读man openvpn以供参考其脚本接口。

相关内容