在linux中通过虚拟机转发流量访问内网
有那么一个恶心的东西叫 EasyConnect,这东西被含多学校企业使用,但是对 linux 的支持却很烂。
今年冬天,因为疫情的原因提前回家了,但是回家之后就没法连接内网的服务器了,必须要用 EasyConnect 连接 sslvpn,为此不得不把我的系统换成 bugdows。。。
但是真的是忍不了了,因为我的电脑是 Macbook,还换过固态硬盘,因此 bluescreendows 在我的电脑上运行得很烂,每天都会蓝屏,多的时候一天三四次。。。前天跟导师语音汇报情况的时候,刚想看一眼程序有没有运行起来就蓝屏了。。。真是会掐时候啊。
终于下定决心,换掉这煞笔 bluescreendows。改为在 linux 里安装一个 bugdows 虚拟机,将访问内网的流量打入虚拟机中,以此来连接内网。
安装 qemu
sudo pacman -S qemu-base
不同系统包的名称可能不同。
安装虚拟机
下载 bugdows 镜像文件
建议从巨硬官网下载 win10 镜像,或者从archive.org下载 XP 镜像。
不要用中文互联网上的一堆“精华版”、“精简版”、“XX之家特供版”,因为你不知道里面塞了什么东西,倒不是说有安全问题,而是 qemu 可能无法正常识别并启动它。
将你下载好的 bluescreendows iso 文件放到你要安装虚拟机的位置,假设是 V_PATH
。
下载驱动文件
bugdows 虚拟机在安装好后需要手动安装驱动,这里先将其下载下来:
将下载好的文件放入 V_PATH
下。
创建磁盘文件
在 V_PATH
下创建一个磁盘文件:
cd $V_PATH
qemu-img create -f qcow2 win10.qcow2 20G
其中 win10.qcow2
是文件的名字,你可以自行更改,不需要很大,20G 已经很多了,因为在虚拟机里只装一个 EasyConnect.
安装 bluescreendows
运行以下脚本:
#!/bin/sh
base_img=win10.qcow2 # 你创建的磁盘文件
share_img=win10.iso # 你的 bugdows iso 文件
[ -f $snapshot_img ] || qemu-img create -q -F qcow2 -b $base_img -f qcow2 $snapshot_img
sudo qemu-system-x86_64 \
-enable-kvm $base_img \
-machine q35 \
-cpu host,hv-relaxed,hv-vapic,hv-spinlocks=0x1fff,hv-vpindex,hv-time,hv-synic,hv-stimer \
-rtc base=localtime \
-smp 2 \
-m 2G \
-cdrom $share_img \
-device qemu-xhci \
-device usb-tablet \
-netdev user,id=mynet0,net=192.168.76.0/24,dhcpstart=192.168.76.9 \
-device virtio-net,netdev=mynet0 \
-netdev bridge,id=mynet1,br=qbr0 \
-device virtio-net,netdev=mynet1
以上参数中,比较重要的是最后四行,这四行为虚拟机创建了两张网卡,一张是 HOST-ONLY 的,一张是 Bridege 的,之后需要用到。
-m 2G
为虚拟机分配了 2G 的内存
运行该脚本后虚拟机将会启动,然后就是熟悉的 bugdows 安装环节,建议安装过程断掉宿主机的网络,这样可以避免强制登录在线账号。
如果执行该脚本后没有图形界面,而是输出了一行 VNC server running on ::1:5900
,则下载一个 tigervnc 就行,地址是 localhost:5900
。
安装完之后,启动虚拟机,会发现没有网络连接,网卡也是一张都没有,莫慌,安装一下驱动就好。
关闭虚拟机,将以上脚本中的 win10.iso
替换为刚刚下载的驱动 iso 的文件名,一般为 virtio-win-xxx.iso
,然后再执行脚本。在文件管理器中找到 CD,在 CD 中有相应的安装程序,直接将全部选项安装即可。
安装完成后,下载 EasyConnect,连接上你需要连接的 VPN,然后打开网络和 Internet 设置 -> 更改适配器选项,应该能看到有三张网卡,前两张是我们创建的,另一张是 EasyConnect 创建的虚拟网卡。
在我们创建的两张网卡中,一张是 HOST-ONLY 的,一张是 BRIDGE 的,可以通过以下特征区分:显示“已连接”的那张是 BRIDGE 的,显示“无Internet”的那张是 HOST-ONLY 的。右键 EasyConnect 虚拟网卡,在“属性”->“共享”中勾选“允许其他网络用户通过此 Internet 的连接来连接”,并在下面的选择框中选择那张 HOST-ONLY 的。
在共享之后,系统会将 HOST-ONLY 的地址强制改为 192.168.137.1
。
选错了也没关系,因为如果选错了会导致虚拟机失去网络连接,很容易判断,再关了共享重新选择一下就行。
关闭防火墙
进入虚拟机的防火墙设置,关闭所有的防火墙。
点击高级设置,在”入站规则“里启用”文件和打印机共享(回显请求—ICMPv4-In)”。
至此 bugdows 这边的设置就完成了。
配置路由
在 Linux 宿主机这边,创建一个 bridge:
ip l add qbr0 type bridge
ip l set qbr0 up
编辑 /etc/qemu/bridge.conf
,在文件末尾添加一行
allow qbr0
给 qbr0
分配一个地址:
sudo ip a add 192.168.137.2/24 dev qbr0
假设你要访问的内网 IP 是 aaa.bbb.ccc.ddd/32,那么配置一条路由:
sudo ip r add aaa.bbb.ccc.ddd/32 via 192.168.137.1
然后应该就可以访问内网了。