三种环境下,没有公网ip的虚拟机访问公网的方法

1. windows真机+vmware虚拟机

2. 云平台,虚拟机A(有公网ip,有内网ip)+虚拟机B(只有内网ip)

3. linux真机+kvm虚拟机

------------------------------------------------------------------------------

第一种:windows真机+vmware虚拟机

这个在前一篇文章已列出

VMware虚拟机连接公网,和WindTerm_单机版vm 上网-CSDN博客

补充两点:

a.  vmware的eth0可以不用dhcp自动分配的那个内网ip,只用手动设置的那个eth0的内网ip也行

b.  如果要多台虚拟机都连接公网,其实都配置的和第一台网络模式一样就可以。为什么说这个?因为管理员可能会考虑,其他的虚拟机,通过第一台虚拟机来访问公网。不用这样。其他虚拟机也是一张网卡和windows真机NAT,一张网卡用来连接windterm就行。相当于所有虚拟机网络模式都是差不多一样的,内网ip地址不一样就行了。

-----------------------------------------------------------------------------------

第二种: 云平台

云平台的虚拟机,也称为云主机

云主机是以kvm虚拟化技术为底层原理,利用openstack等平台性技术,动态给用户调度虚拟机资源。

实际操作:环境准备,两个内网主机不在同一个subnet

1. 给A主机所在子网,新建一个自定义路由表,创建后关联A主机所在子网

2. 配置B主机所在子网的路由表,公网目的:0.0.0.0/0,下一跳类型:云服务器,下一跳:A主机的内网ip

3. 配置A主机的NAT,rps

4. NAT脚本开机自启

为什么两个主机要在不同子网?

因为在相同子网的话,不会触发NAT规则。

这个A主机作为网关,其实可以理解为一个路由器,路由器本身连接的A主机的子网,比如192.168.1.0/24,这个网段的是可以访问公网的,所以如果B主机也是这个网段的IP,网关则默认为它也是可以访问公网的,就不会触发修改源IP的这个NAT规则。而云平台又默认为只有A主机才可以直接访问公网,因为公网IP绑定的是这个主机,不是这个网段。所以,B主机要用NAT模式,把A主机当做路由器的话,就不能和A主机在同一个subnet。如果B主机和A主机在同一个subnet了,就不会触发A主机的NAT规则。

从内核层面来讲,用iptables来调整四表五链的时候

也就是说,内核处理网络流量是有四张表五个链来处理的,其中一张表是NAT表,

NAT(network address translation)网络地址转换

在input链,B主机和A主机的内网ip属于同一个子网,那么B主机的数据包就不会进入NAT表,不会用net.ipv4.ip_forward这个参数,路由会像对待A主机的数据包一样,直接往公网发,所以就没有触发NAT规则。

如果B主机和A主机不在一个子网,那么B主机的流量到达路由,路由就会根据NAT规则,对这个非本机子网的数据包进行源地址转换。以NAT的方式访问公网

再往细了讲,我们需要对四表五链进行详细的分析

以及四表五链在内核的设计上是如何实现的,

需要对内核编译和内核代码的实现逻辑进行分析

再往细了讲,内核的代码编译之后和cpu指令集的交互逻辑

就可以说明四表五链的底层工作原理

通过四表五链再往应用层,就能清晰理解数据包的转发逻辑

由于内容较多,本篇文章暂不往代码层分析。

以应用的实现逻辑为主。

掌握这些,可以实现功能,对于用户来讲可以专注于服务的实现。

对于底层代码,可以看Linux内核源码

配置方法可以参考:

【云服务器 配置公网网关-操作指南-文档中心-腾讯云】 https://cloud.tencent.com/document/product/213/38839?from=copy

---------------------------------------------------------------------------------------------------

第三种:linux真机+kvm虚拟机

因为kvm虚拟机是搭建的虚拟网桥,网桥模式可以设置为nat,连接这个网桥的kvm虚拟机就可以连接公网。

自己手动做一个虚拟机,需要一个虚拟配置文件.xml,声明虚拟机需要的cpu内存网卡等信息

还需要一个存储文件.img,这个文件相当于一个硬盘,这个文件里面需要有一个可以启动的操作系统。

虚拟机做好之后,连接nat的网桥,就可以通过linux真机访问公网。

linux真机如果安装了图形界面,也可以通过kvm虚拟机管理器,来图形化操作创建虚拟机。

总的来说,在Linux真机上创建kvm虚拟机,虚拟机连接公网是比较方便的。

48c5ecea8eff4b5cba89528e2a038647.png

参考:

libvirt: Network XML formatlibvirt, virtualization, virtualization APIicon-default.png?t=O83Ahttps://libvirt.org/formatnetwork.html#nat-based-network

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值