如何仅通过VPN路由来自VirtualBox VM的stream量?

我有一个VirtualBox VM(主机和来宾Ubuntu Maverick)。 我的VPN提供商使用OpenVPN来设置TUN。 我想设置一些东西,这样来自虚拟机的stream量只能通过VPN,而且如果虚拟专用网(VPN)发生故障,它就会被丢弃(发生)。 build议? 我的iptables-fu有点弱

我尝试过的:使用VirtualBox的“主机专用networking”,它给主机上的vboxnet0环回接口给客户端,但是无法获得iptables / routes权限。 我想避免虚拟机上的NAT,因为我已经双重NAT(ISP和家庭路由器),一个级别将让我的头stream行。

其他可能性:切换到TAP(如何?)和桥接到VM。 在虚拟机内部创buildVPN,并过滤除VPN之外的所有eth0stream量连接iptables(如下所示)

奖励要点:如果您可以告诉我如何在主机和客户机上使用不同的VPN出口点,而无需通过主机的VPN对来宾进行双重隧道传输。

会有其他的解决scheme,但这就是我所想的:

  1. 在网桥模式下设置虚拟机。 这将为您的虚拟机提供与主机位于同一networking的IP地址。
  2. 在主机上设置VPN,假设它是tun0。
  3. 在主机上启用路由echo 1 > /proc/sys/net/ipv4/ip_forward
  4. 使用主机IP地址作为默认gw设置虚拟机。

此时,主机具有VPN连接,虚拟机将所有stream量路由到主机。 所有剩下要做的就是限制主机,这样它不允许客人路由任何不会通过tun0设备的stream量。 你可以用一组iptables规则来做到这一点:

 iptables -P FORWARD DROP iptables -A FORWARD -o tun0 -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 

应该工作。 第一个规则将默认策略设置为FORWARD链中的DROP数据包。 这只影响你的主机路由的数据包,而不是数据包到主机(INPUT)或主机(OUTPUT)。 第二个规则允许任何通过tun_发送的stream量 – 如果需要的话,可以用–source来加强。 最后的规则应该让tun0从路由回到虚拟机。

您的VPN是否希望tun接口上的所有数据包都来自单个IP? 如果是这样,你还需要添加一个NAT规则。 可能是这样的:

 iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}