无法访问你试图使用的功能所在的网络位置。是什么原因?
7771
2022-05-29
关于Hyper-V网络设置经验总结(Default Switch/固定IP/SSH)
背景
最近想在本机WIN10上创建几个Centos用于做几个试验,在VMWare、VirtualBox和Hyper-V中选择了Hyper-V,原因是VMWare免费版不能商用(在公司里最好不要用);Windows的Docker据说从VirtualBox也换成了Hyper-V,所以也不用VirtualBox(我不用界面,所以要求也不高)。
需求
我对虚机网络的基本需求是:
可以通过本机SSH工具(如Putty或XShell)连接虚机(所以虚机最好有固定IP);
虚机可以上外网,用于执行yum下载软件之类的操作。
试了网上几种方法都不理想,最后自己想到了一种还比较满意的方案,所以总结记录一下。
遇到的问题
1、Default Switch(默认网络)无法设置固定IP
Hyper-V自带一个不能删除的Default Switch虚拟交换机,虚拟机使用该网络可以自动获取IP直接上网。但这个网络的网关地址每次重启后都会改变,所以你无法在虚拟机上设置固定IP用于宿主机SSH访问。
微软官方说明:每次主机重启后Hyper-V会自动找一个未使用的网络然后修改Default Switch的网络地址。
2、自己创建虚拟交换机设置Internet连接共享
网上搜了一把,有一种方式是自己在Default Switch之外创建一个新的虚拟交换机,然后在Windows网络适配器界面里选择当前上网的网卡,在其属性里设置Internet连接共享,里面选择新建的虚拟交换机(IP将自动固定在192.168.137.x网段)。但这种方法不适合我这种一会用有线LAN上网一会用无线WLAN上网的情况,因为每次都需要重新设置Internet连接共享很麻烦。
3、命令行自己创建虚拟交换机及NAT
这是国外网站资料里比较常见的方案,即参考https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/setup-nat-network 用命令行创建虚拟交换机,并为其设置一个内网网段,然后为这个网段设置NAT,最后在虚拟机里设置静态IP以及DNS。这个方法确实可以达到我的目的,但是缺点是DNS需要手动设置(比如用阿里的223.6.6.6),不像用Default Switch那样可以自动根据当前的联网情况使用当前的DNS。可用但不完美。
解决方法
最后灵光一闪用双网卡方案解决了问题。大概方案是用虚拟机第一块网卡连接Default Switch自动获得IP和DNS上外网,用第二块网卡设置内部固定IP地址用于宿主机或其它虚拟机SSH连接。具体操作步骤如下:
1、创建内部虚拟交换网络
通过Hyper-V管理器的“虚拟交换机管理”界面创建一个新的虚拟交换机(假设名字为MyPrivateNet,类型为“内部”):
2、设置内部使用的虚拟交换机的地址
然后到Windows的“网络连接”里把vEthernet(MyPrivateNet)的IP设为固定IP,比如192.168.218.1。这样设置也决定了192.168.218.x就是以后虚拟机的网段:(网段也可自己随心设置)
3、为虚拟机添加新网卡
在虚拟机上新增加一个网卡,加上原来的网卡,虚拟机就有两块网卡。然后将第一块网络适配器的虚拟交换机选为Default Switch,第二块选择前面新建的MyPrivateNet:
4、虚拟机内设置两块网卡的网络配置
配置eth0
虚拟机启动后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,把BOOTPROTO改为dhcp,ONBOOT改为yes,如下:
BOOTPROTO=dhcp #保持不变 ... NAME=eth0 DEVICE=eth0 ONBOOT=yes #从no变为yes
配置eth1
注意,如果你是创建虚拟机时就加了一个新网卡,则安装Centos后里面应该已经有/etc/sysconfig/network-scripts/ifcfg-eth1配置文件,如果是安装操作系统之后才新增网卡的,则可以通过以下命令从/etc/sysconfig/network-scripts/ifcfg-eth0拷贝一份修改:
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
修改重点是把BOOTPROTO设成static;把NAME和DEVICE改为eth1;ONBOOT还是yes;记得删除UUID那行(不能和eth0相同)。最后就是加上IPADDR=192.168.218.2和NETMASK=255.255.255.0(注意:IP必须与MyPrivateNet一个网段,不需要设置GATEWAY)。
BOOTPROTO=static ... #记得删除UUID那行 NAME=eth1 DEVICE=eth1 ONBOOT=yes IPADDR=192.168.218.2 NETMASK=255.255.255.0
重启网络:(如果报错就重启虚拟机)
/etc/init.d/network restart
然后就可以从宿主机ssh到该虚拟机了,也可以与其它同网段的虚拟机通讯。
为了以后自己查找方便作此记录。困扰此问题终于从网上找到解决方案:
地址:https://blog.csdn.net/jasonhwang/article/details/115287437
Linux ssh 网络 虚拟化
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。