返回

Ubuntu OpenVPN:如何只让虚拟机流量走 VPN?

Linux

Ubuntu OpenVPN:精准控制,让虚拟机流量独享 VPN 通道

在 Ubuntu 系统上使用 OpenVPN, 你是否遇到过这样的困扰:想要保护虚拟机的网络安全,希望虚拟机流量走 VPN,但同时又希望主机系统能够正常访问互联网,不受 VPN 影响?

本文将为你提供一种精准控制 OpenVPN 流量的解决方案, 利用 iptables 和路由配置,实现仅将虚拟机流量路由至 VPN 的目标,完美解决你的难题。

洞察需求:主机与虚拟机,两种网络,两种需求

很多用户在使用 OpenVPN 时, 既希望通过 VPN 保护虚拟机网络安全, 又不希望 VPN 影响到主机系统的正常网络访问。

简单来说, 我们需要实现这样的效果:

  1. 主机系统: 保持原有的网络连接方式, 不受 VPN 影响, 可以直接访问互联网。
  2. 虚拟机: 所有网络流量都通过 VPN 传输, 确保数据安全, 并能够访问 VPN 网络中的资源。

解决方案:iptables 与路由强强联手,精准掌控流量走向

为了实现上述目标, 我们需要对系统的网络配置进行一些调整, 主要包括以下几个方面:

  1. OpenVPN 服务器配置: 允许来自虚拟机网段的流量进行路由转发。
  2. iptables 防火墙规则: 将来自虚拟机网段的流量转发至 OpenVPN 隧道接口。
  3. 路由规则: 确保虚拟机网络中的流量被正确地路由到 OpenVPN 隧道接口。

步骤一:摸清家底,确认网络环境信息

在开始配置之前, 我们需要先明确当前的网络环境, 主要是以下几个关键信息:

  • 虚拟机网络桥接名称: 通常为 virbr0, 你可以使用 ip a 命令在主机上查看。
  • OpenVPN 隧道接口名称: 通常为 tun0, 同样可以使用 ip a 命令在主机上查看。
  • 虚拟机网段: 例如 192.168.122.0/24, 你可以在虚拟机管理器中查看。

步骤二:配置 OpenVPN 服务器,放行虚拟机流量

我们需要修改 OpenVPN 服务器端的配置文件, 允许来自虚拟机网段的流量进行路由转发。

  1. 打开 OpenVPN 服务器配置文件(通常为 server.conf)。

  2. 添加以下内容:

    push "redirect-gateway def1 bypass-dhcp"
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 8.8.4.4"
    
    server 10.8.0.0 255.255.255.0
    
    # 允许来自虚拟机网段的流量进行路由转发
    client-to-client
    push "route 192.168.122.0 255.255.255.0"
    

    请注意:192.168.122.0 255.255.255.0 替换为你的实际虚拟机网段。

步骤三:配置 iptables,引导虚拟机流量流向 VPN

我们需要使用 iptables 配置防火墙规则, 将来自虚拟机网段的流量转发至 OpenVPN 隧道接口(tun0)。

  1. 允许转发流量:

    sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
    sudo iptables -A FORWARD -i tun0 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
    sudo iptables -A FORWARD -i virbr0 -o tun0 -j ACCEPT
    
  2. 保存 iptables 规则:

    sudo iptables-save > /etc/iptables/rules.v4
    
  3. 设置开机启动 iptables 规则:

    sudo systemctl enable netfilter-persistent
    

步骤四:配置路由规则,确保流量精准抵达

我们需要添加路由规则, 确保虚拟机网络中的流量被正确地路由到 OpenVPN 隧道接口。

sudo ip route add 192.168.122.0/24 dev virbr0

同样, 请将 192.168.122.0/24 替换为你的实际虚拟机网段。

验证配置:一切就绪,测试网络连接

完成以上所有配置后, 重启 OpenVPN 服务, 并连接 VPN。

在虚拟机中测试网络连接, 例如尝试访问外部网站, 如果能够正常访问, 则说明配置成功。

你可以同时测试主机系统的网络连接, 确保其不受 VPN 影响。

常见问题解答

1. 为什么我的虚拟机无法连接到互联网?

  • 请检查 OpenVPN 服务器配置是否正确, 确保允许来自虚拟机网段的流量进行路由转发。
  • 检查 iptables 规则是否配置正确, 确保流量被正确转发到 OpenVPN 隧道接口。
  • 确保虚拟机网卡连接到正确的虚拟网络桥接设备。

2. 为什么我的主机系统无法访问互联网?

  • 检查 OpenVPN 客户端配置, 确保没有将所有流量都路由到 VPN。
  • 检查路由表, 确保默认网关设置正确。

3. 配置完成后需要重启吗?

  • 配置 OpenVPN 服务器和 iptables 规则后, 建议重启系统以确保所有更改生效。

4. 如何恢复默认网络配置?

  • 删除或注释掉 OpenVPN 服务器配置文件中添加的内容。
  • 使用 iptables -F 命令清空 iptables 规则。
  • 使用 ip route del 命令删除添加的路由规则。

5. 我可以将哪些流量路由到 VPN?

  • 你可以根据需要, 将特定应用程序、 域名或 IP 地址的流量路由到 VPN, 以实现更精细化的网络控制。

希望本文能够帮助你在 Ubuntu 系统上成功配置 OpenVPN, 并实现仅将虚拟机流量路由至 VPN 的目标。

如果你有任何问题或建议, 欢迎在评论区留言。