问题
当我在充当路由器的 ubuntu 台式计算机上启动 VPN 时,连接的子网会失去互联网连接,但仍然可以访问(LAN)。理想情况下,我想知道如何在 VPN 处于活动状态时通过 VPN 隧道路由来使连接的子网重新获得互联网访问权限。
语境
我有以下网络布局:
我的 VirtualBox 虚拟机的 eth0 上的子网 172.16.0.0/20。
eth0:0 上的子网 192.168.0.0/24 连接到具有互联网访问权限的网关 192.168.0.1。
这显示在 /etc/network/interfaces 文件中:
auto lo
iface lo inet loopback
# This is the subnet dedicated to VB
auto eth0
iface eth0 inet static
address 172.16.0.1
netmask 255.255.0.0
gateway 192.168.0.164
dns-nameservers 8.8.8.8
# normal DHCP internet
auto eth0:0
iface eth0:0 inet static
address 192.168.0.164
netmask 255.255.255.0
dns-nameservers 8.8.8.8
gateway 192.168.0.1
eth0 上的数据包通过伪装的 eth0:0 转发,正常的互联网连接正常。但是,当我在此路由器上启动 VPN 隧道时,eth0 子网上的虚拟机的互联网连接丢失(但路由器仍然保持连接)。
以下是ifconfig 的输出当隧道处于活动状态时:
eth0 Link encap:Ethernet HWaddr 00:1f:bc:01:c3:ab
inet addr:172.16.0.1 Bcast:172.16.255.255 Mask:255.255.0.0
inet6 addr: fe80::21f:bcff:fe01:c3ab/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:165426 errors:0 dropped:0 overruns:0 frame:0
TX packets:182601 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:208264321 (208.2 MB) TX bytes:16660945 (16.6 MB)
Interrupt:16
eth0:0 Link encap:Ethernet HWaddr 00:1f:bc:01:c3:ab
inet addr:192.168.0.164 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:16
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:381963 errors:0 dropped:0 overruns:0 frame:0
TX packets:381963 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:22755054 (22.7 MB) TX bytes:22755054 (22.7 MB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
我怀疑解决方案可能与路由表. 显示以下内容当隧道处于活动状态时:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.8.0.9 128.0.0.0 UG 0 0 0 tun0
default 192.168.0.1 0.0.0.0 UG 100 0 0 eth0
10.8.0.0 10.8.0.9 255.255.255.0 UG 0 0 0 tun0
10.8.0.9 * 255.255.255.255 UH 0 0 0 tun0
37.139.23.49 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.8.0.9 128.0.0.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 1000 0 0 eth0
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
以及以下内容当隧道不活动时:
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 100 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
Vms 的 Virtualbox 配置:
其中一个VM/etc/network/interfaces
文件:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 172.16.0.3
netmask 255.255.0.0
network 172.16.0.0
broadcast 172.16.255.255
gateway 172.16.0.1
dns-nameservers 8.8.8.8
答案1
对于带有 Windows 主机和 Linux(Mint)客户机的 VirtualBox,转到网络 UI 选项卡并设置“适配器”=>“附加到:NAT”和“适配器类型:半虚拟化网络”。之后启动您的 VM,您应该能够使用 VPN 网络。
答案2
这在桥接网络设置。从VirtualBox 文档:
桥接网络
这适用于更高级的网络需求,例如网络模拟和在客户机中运行服务器。启用后,VirtualBox 会连接到您安装的网卡之一并直接交换网络数据包,从而绕过主机操作系统的网络堆栈。
由于您的虚拟机正在eth0
直接使用,因此它们不知道tun0
在其上运行的隧道的接口。您将需要使用不同的虚拟网络配置。
您有(除其他外)以下选项:
网络地址转换 (NAT)是迄今为止最简单的解决方案。VirtualBox 将通过主机可用的任何互联网连接对虚拟机进行 NAT。这对虚拟机来说是完全透明的。但是,这会阻止从主机到虚拟机的连接或虚拟机之间的连接。
使用仅主机网络创建包含虚拟机和主机的适当子网。这不需要更改虚拟机中现有的接口配置,但需要将主机设置为网关和路由器,和使虚拟机通过 NAT 传输到外部(无论是通过它的
eth0
还是的tun0
)。结合以上内容:为每个虚拟机提供两个接口,一个用于通向外部世界(跨 VirtualBox 的NAT)和另一个连接到仅主机局域网。
尝试 VirtualBox 的实验性NAT 网络配置。 2019年更新:此功能现已成熟:连接到主机的 NAT 并选择半虚拟化网络 (virtio-net)适配器类型。
答案3
在到处寻找这个解决方案后,我终于找到了一个可行的解决方案,它不需要进行大量的配置更改,而且非常简单。使用默认的 NAT 网络并在终端中输入以下内容:
VBoxManage modifyvm "VM name" --natdnsproxy1 on
答案4
以下是使用主机 vpn 的 vagrant boxes 的一些有用信息。基本上你需要设置 natdnshostresolver1 选项 请注意,这将不是但是,当使用 Vagrant 的 public_network 设置时可以工作。
config.vm.provider :virtualbox do |vb|
# ---- other options....
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
http://renier.morales-rodriguez.net/post/90674523562/sharing-host-vpn-with-virtualbox-guest http://blog.geekslikeshinythings.com/2016/05/sharing-host-vpn-with-vagrant-rob-allen.html