如何设置类似于 Whonix 的 VM 网关但用于通用 VPN

如何设置类似于 Whonix 的 VM 网关但用于通用 VPN

我创建了一个具有 3 个接口的 Linux 虚拟机:一个用于互联网访问的 NAT 接口(eth0,ip 范围为 192.168.84.0/24),一个仅主机接口,用于与其他虚拟机通信(eth1,ip 为 192.168.10.10)和一个 VPN接口(tun0 在连接到 VPN 服务器时启动,并且 IP 范围为 10.182.0.0/16,这可能会在每次连接时发生变化)。

我的目标是设置所有必要的说明,说明如何仅路由来自 eth1 的传入和传出互联网流量以通过 tun0,并将互联网访问权限留给网关上的其他应用程序(如果需要)。我想创建类似于 Whonix 网关的东西(其中连接从外部连接的 VM 工作站通过 TOR 路由),但我不想使用 TOR,而是想使用通用 VPN 服务,可以通过 OpenVPN 或 Wireguard 访问该服务。

所以我想到了一些步骤:

  1. 通过编辑 /etc/sysctl.conf 文件并设置在 Linux 虚拟机上启用 IP 转发net.ipv4.ip_forward = 1

  2. 使用以下命令为仅主机接口添加新路由,以通过 VPN 接口路由所有流量:

sudo route add -net 192.168.10.0 netmask 255.255.255.0 gw 10.182.4.2 dev tun0

这里我不知道如果tun0的IP发生变化如何管理它。如果这是正确的。

  1. 使用以下命令设置 iptables 规则,将所有传入和传出流量从 eth1 接口重定向到 VPN 接口,来自网关本身的流量除外:
sudo iptables -A FORWARD -i eth1 -o tun0 -j ACCEPT
sudo iptables -A FORWARD -i tun0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o tun0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -s 192.168.84.131 -o eth0 -j MASQUERADE
  1. 使 iptables 规则持久化,因此通过运行以下命令安装 iptables-persistent 包:
sudo apt-get install iptables-persistent
sudo iptables-save > /etc/iptables/rules.v4
  1. 配置连接到仅主机网络的其他虚拟机以使用 Linux 虚拟机作为其默认网关和 DNS 服务器。因此,将 IP 地址设置为与 Linux 虚拟机的仅主机网络接口位于同一子网的唯一地址,然后将默认网关设置为 Linux 虚拟机的仅主机网络接口的 IP 地址,最后设置DNS 服务器到 Linux 虚拟机的仅主机网络接口的 IP 地址。

但有些东西无法正常工作,并且从通过仅主机网络连接到网关的其他虚拟机我无法连接到互联网(当 VPN 连接到 GW 上时)。

我不是专家,我知道我做错了什么,所以有人可以帮助我简化和调整(删除或添加说明)此步骤,了解如何创建通过 VPN 连接到互联网的 Linux VM 网关并共享此步骤并且仅与通过 2 个虚拟机的专用网络连接的另一个虚拟机建立此连接(因此,当 VPN 关闭时,连接到网关的另一个虚拟机没有 Internet 连接)。

如果这一切都有意义的话^_^ 非常感谢你

相关内容