需求
在本机开发的时候,我常常有这样的需求:
- 需要在不同的操作系统上运行服务,通常通过虚拟机实现
- 虚拟机要能够访问互联网
- 不同的操作系统之间、虚拟机与母机之间要能够通信
- 母机所在的网络会变化,而希望即使网络变化后,各个机器不需要重新配置的情况下,也能完成上述要求
解决思路
解决方案为:
- 采用 NAT 模式
- 手动分配 IP 地址
- 使用手动端口转发提供服务
实操
NAT 设置
虚拟网络编辑器:
此处要禁用 DHCP。另外,针对宿主机进行如下 IP 分配:
否则会导致宿主不能 ping 虚拟机。
如果发现宿主
ipconfig
中没有 VMnet8 或者 IP 不一致,则需要取消勾选 “将主机虚拟适配器连接到此网络”,点应用,然后重新勾选,点应用。
端口转发
端口转发:
虚拟机设置
安装信息:
用户 | 密码 |
---|---|
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