如何仅通过VPN从VirtualBox VM路由流量?


10

我有一个VirtualBox VM(主机和来宾Ubuntu Maverick)。我的VPN提供商使用OpenVPN设置TUN。我想进行设置,以使来自VM的流量仅通过VPN传输,并且如果VPN断开(发生),流量只会被丢弃。有什么建议吗?我的iptables-fu有点虚弱

我曾尝试过:使用VirtualBox的“仅主机网络”,该主机在主机上为来宾提供了vboxnet0回送接口,但无法正确获得iptables /路由。我想避免在VM上进行NAT,因为我已经对NAT(ISP和家庭路由器)进行了两次加倍,并且再加一层将使我大吃一惊。

其他可能性:切换到TAP(如何操作)并桥接到VM。在VM内创建VPN并过滤除VPN与iptables连接之外的所有eth0流量(但请参见下文)

奖励积分:如果您能告诉我如何在主机和来宾上使用不同的VPN出口点,而无需通过主机的VPN对来宾的流量进行双隧道处理。

Answers:


4

会有其他解决方案,但这就是我在想的:

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

此时,主机已建立VPN连接,VM会将所有流量路由到该主机。剩下要做的就是限制主机,这样它就不允许来宾路由任何不会通过tun0设备的流量。您可以使用一组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)的数据包。第二条规则允许任何路由出tun0的流量-如果需要,您可以使用--source来加强它。最后一条规则应允许回复从tun0返回以路由回VM。

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

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your host tun0 ip}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.