虚拟机Ubuntu设置固定IP与主机相互通讯
参考资料
一文搞懂网络知识,IP、子网掩码、网关、DNS、端口号
IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段/数字-如192.168.0.1/24是什么意思?
22、了解网卡和IP地址
IP地址,IPV4与IPV6
IPV4地址详细解释
网关和路由器的区别
0000 0000, 0000 0000, 0000 0000, 0000 0000也就是0~255. 0~255. 0~255. 0~255,IPV6地址是为了彻底的解决掉IP地址不足的问题,升级的IP地址协议的地址。112.65.1.206这个就是公网IP,但是我们网络显示的192.168.0.100的IPV4地址是什么?答案是私网(内网)IP,因为公网IP用32bit的表示最大也就43亿个,但是现在看来43亿个明显满足不了全世界使用,所以有IPV6地址的概念解决这个不足
192.168开头的IP地址,这些是内网IP,通俗的理解就是,内网IP是通过你的设备连接的路由器或者交换机给你分配的,如果你的路由器或者交换机上不了外网,那么你的设备只能在你的内网IP内进行互相通讯,而无法访问外网internet,即路由器或者交换机接入这个唯一的外网IP地址112.65.1.206然后分配给你的能够访问这个网络的地址又为192.168.0.100,这样你以192.168.0.100的身份,通过路由器或者交换机做变化,以112.65.1.206的身份访问外网
10.0.0.0~10.255.255.255,172.16.0.0~172.31.255.255,以及192.168.0.0~192.168.255.255等网段,公网IP为除此之外大部分IP,内网IP一般需要通过NAT(Network Address Translation是指网络地址转换)方可访问internet,公网IP可以直接访问internet
inet是翻译好像内联网的意思,可以认为是虚拟机系统的IP,netmask是子网掩码,broadcast广播地址

192.168.0.106子网掩码为255.255.255.0,其广播地址为192.168.0.255 ,当发出一个目的地址为192.168.0.255分包时候,它将被分发给该网段上的所有计算机。
192.168.0.1表示IP,其中/24表示子网掩码为255.255.255.0即,1111 1111,1111 1111,1111 1111,0000 0000,子网掩码一共24个1192.168.0.1/24,网络B的IP地址范围为192.168.1.1/24,两个网络由于IP地址和子网掩码与计算出的结果不一致,之间是不能进行通信的**(也就是内网IP地址和子网掩码计算出来的网络地址和网关地址是两个概念)**,如果要实现这两个网络之间的通信,则必须通过网关。即网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B。ping时会出现bad address等提示。
| 序号 | 连接方式 | 特点 |
|---|---|---|
| 1 | 网络地址转换(NAT) | 虚拟机可以访问外部网络,但是外部网络不可访问虚拟机 |
| 2 | 桥接网卡 | 实际意义是将虚拟机直接接入到和主机一样的网络设备上,主机和虚拟机可以互相访问 |
| 3 | Host-Only | 主机访问虚拟机,但是虚拟机不可访问外网 |
本文实现的虚拟机和主机进行互ping是基于桥接网络,因此虚拟机和主机最后会处于同一个IP网段内,即假设路由器IP为:192.168.0.1,子网掩码为255.255.255.0,则这个网段为192.168.0.1~192.168.0.255



192.168.0.106/24
sudo gedit /etc/netplan/01-network-manager-all.yaml,这里的配置文件可能是00-network-manager-all.yaml可以自行tab补齐查看,修改内容如下所示,修改完成之后输入sudo netplan apply即可生效# Let NetworkManager manage all devices on this system
# network:
# version: 2
# renderer: NetworkManager
network:
version: 2 # 这个版本号和原来一致即可
ethernets:
ens33: # 网卡名
dhcp4: no # 是否DHCP
addresses: [192.168.0.101/24] # IP地址
gateway4: 192.168.0.1 # 网关
nameservers:
addresses: [114.114.114.114,8.8.8.8] # DNS信息
(venv) pc@pc:~$ sudo gedit /etc/netplan/01-network-manager-all.yaml
[sudo] password for pc:
(venv) pc@pc:~$ sudo netplan apply
(venv) pc@pc:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.101 netmask 255.255.255.0 broadcast 192.168.0.255
... ...
(venv) pc@pc:~$ ping www.baidu.com -c 2
PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data.
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=55 time=15.4 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=55 time=15.2 ms
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 15.170/15.265/15.361/0.095 ms
(venv) pc@pc:~$
C:\Users\R7000>ping 192.168.0.101
正在 Ping 192.168.0.101 具有 32 字节的数据:
来自 192.168.0.101 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.0.101 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.0.101 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.0.101 的回复: 字节=32 时间<1ms TTL=64
192.168.0.101 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
C:\Users\R7000>
(venv) pc@pc:~$ ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data.
^C
--- 192.168.0.100 ping statistics ---
34 packets transmitted, 0 received, 100% packet loss, time 33794ms
(venv) pc@pc:~$

(venv) pc@pc:~$ ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data.
64 bytes from 192.168.0.100: icmp_seq=1 ttl=128 time=0.473 ms
64 bytes from 192.168.0.100: icmp_seq=2 ttl=128 time=0.490 ms
64 bytes from 192.168.0.100: icmp_seq=3 ttl=128 time=0.600 ms
^C
--- 192.168.0.100 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2050ms
rtt min/avg/max/mdev = 0.473/0.521/0.600/0.056 ms
(venv) pc@pc:~$

sudo gedit /etc/netplan/01-network-manager-all.yaml,这里的配置文件可能是00-network-manager-all.yaml可以自行tab补齐查看,修改内容与VMware一致,如下所示,
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.1.11/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
sudo netplan apply即可生效,这里主机IP为192.168.1.9,与主机互相通讯测试pcv@pc:~$ sudo netplan apply
pcv@pc:~$ ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255
... ...
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
... ...
pcv@pc:~$ ping 192.168.1.9
PING 192.168.1.9 (192.168.1.9) 56(84) bytes of data.
64 bytes from 192.168.1.9: icmp_seq=1 ttl=128 time=0.718 ms
64 bytes from 192.168.1.9: icmp_seq=2 ttl=128 time=0.646 ms
^C
--- 192.168.1.9 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1033ms
rtt min/avg/max/mdev = 0.646/0.682/0.718/0.036 ms
pcv@pc:~$
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m