需求

在本机开发的时候,我常常有这样的需求:

  • 需要在不同的操作系统上运行服务,通常通过虚拟机实现
  • 虚拟机要能够访问互联网
  • 不同的操作系统之间、虚拟机与母机之间要能够通信
  • 母机所在的网络会变化,而希望即使网络变化后,各个机器不需要重新配置的情况下,也能完成上述要求

解决思路

解决方案为:

  • 采用 NAT 模式
  • 手动分配 IP 地址
  • 使用手动端口转发提供服务

实操

NAT 设置

image-20210708163622589

虚拟网络编辑器:

image-20210708165847251

此处要禁用 DHCP。另外,针对宿主机进行如下 IP 分配:

image-20210708193327159

否则会导致宿主不能 ping 虚拟机。

如果发现宿主 ipconfig 中没有 VMnet8 或者 IP 不一致,则需要取消勾选 “将主机虚拟适配器连接到此网络”,点应用,然后重新勾选,点应用。

端口转发

端口转发:

image-20210708164438851

虚拟机设置

安装信息:

用户 密码
root rootroot
debian debian

固定 IP 分配

由于 DHCP 服务器提供了 IP、掩码、网关、DNS,所以这些信息我们需要一一配置。

Debian:

编辑 /etc/network/interfaces,其中最后一行为:

iface ens33 inet dhcp

dhcp 改为 static,并在后面追加:

address 192.168.25.21
netmask 255.255.255.0
gateway 192.168.25.2

接下来配置 DNS,由于网关是 192.168.25.2,网关也同时提供 DNS,不需要我们额外设置。直接 reboot

其它

一个实用脚本,用于开关代理:

#!/bin/bash

proxy_on() {
	export http_proxy=socks5://192.168.25.20:2801
	export https_proxy=socks5://192.168.25.20:2801
	# export http_proxy=https://192.168.25.20:7890
	# export https_proxy=https://192.168.25.20:7890
	echo "proxy is on."
}

proxy_off() {
	unset http_proxy
	unset https_proxy
	echo "proxy is off."
}

proxy_on

echo "checking proxy..."

curl -s google.com > /dev/null

if [ $? -ne 0 ]; then
    proxy_off
    echo "proxy server is down, proxy disabled."
    exit
fi

echo "proxy is healthy."

如果系统不支持 socks5,则额外安装 tsocks 即可。配置文件在 /etc/tsocks.conf