如何从Windows宿主机访问VirtualBox Ubuntu虚拟机内建立的VPN网络
解决方案
1. 修正宿主机静态路由
你当前配置的路由下一跳存在错误:192.168.56.1是宿主机侧Host-only网卡的默认网关IP,并非Ubuntu客户机的IP,从你给出的Apache访问地址可确认,客户机Host-only网段IP为192.168.56.101。先删除错误路由再添加正确路由:
route delete 10.0.0.0 mask 255.0.0.0 192.168.56.1 route add -p 10.0.0.0 mask 255.0.0.0 192.168.56.101
2. 配置Ubuntu客户机IP伪装(NAT)
仅开启ip_forward无法让跨网段流量正常往返,需要配置iptables规则,将来自Host-only网段的访问流量伪装成VPN接口的IP:
首先执行ip a确认AnyConnect对应的虚拟接口名,通常地址段为办公网网段的接口为tun0
随后添加NAT和转发规则:
# 配置SNAT伪装 iptables -t nat -A POSTROUTING -o tun0 -s 192.168.56.0/24 -d 10.0.0.0/8 -j MASQUERADE # 配置转发规则,将enp0s3替换为你的Ubuntu客户机Host-only对应的物理网卡名 iptables -A FORWARD -i tun0 -o enp0s3 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i enp0s3 -o tun0 -j ACCEPT
如果需要规则重启后生效,安装iptables-persistent包保存当前规则即可。
3. 关闭Ubuntu客户机反向路径过滤
避免系统校验到数据包路由路径不对称直接丢弃:
sysctl -w net.ipv4.conf.all.rp_filter=0 sysctl -w net.ipv4.conf.tun0.rp_filter=0 # 将enp0s3替换为你的Ubuntu客户机Host-only对应的物理网卡名 sysctl -w net.ipv4.conf.enp0s3.rp_filter=0
要永久生效的话把以上配置写入/etc/sysctl.conf后执行sysctl -p。
4. 解决DNS配置报错问题
当前宿主机无法连通10.66.68.70所以系统校验报错,完成以上三步后先测试宿主机是否能ping通10.66.68.70,连通后再执行之前的netsh命令添加DNS即可。
如果依然添加失败,可以在Ubuntu客户机上安装dnsmasq做DNS转发,将宿主机的DNS设置为192.168.56.101即可。
可选校验步骤
- 在Ubuntu客户机上执行
tcpdump -i tun0 icmp,然后在宿主机ping任意10段的办公网IP,确认有流量进出 - 如果还是不通,检查企业AnyConnect是否有限制客户端流量转发的策略,部分企业配置会禁止VPN客户端转发其他设备的流量,这种情况可以改用开源vpnc客户端连接VPN绕过限制。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

