为什么我的云服务器不能绑定公网 ip ?

写在前面:
昨天呢,在校招群里的小伙伴问了我们一个问题,让我们帮给看看:
在这里插入图片描述
一开始呢,博主按照经验呢跟他说是端口号被占用了,因为自己之前就遇到过这个问题。但是经过排查呢,实际上是ip地址绑定错误的问题。那么为什么不能绑定公网ip呢?

云服务器的部署:数据中心

要明白这个问题的原理,我们首先就需要明白你买的服务器(假设是腾讯云)在腾讯csig的机房是怎么布置的?

云服务器一般存放在腾讯csig的数据中心,其放在一个叫机架的地方。机架呢就是一个个的架子,每个架子中摆了好几台服务器,这个服务器就是你云服务器的主体。在机架的顶端呢,往往会存放一台交换机,又称TOR交换机。该机架上的所有的服务器都连在这个交换机上,构成一个子网

当一个机架放不下的时候,就需要多个机架,还需要有交换机将多个机架连接在一起。这些交换机对性能的要求更高,带宽也就越大,被称为汇聚交换机
在这里插入图片描述

汇聚交换机又称汇聚层,其将大量的计算节点相互连接在一起,形成集群。在这个集群中,服务器之间通过二层互通,这个区域常称为一个POD,有时候也称为一个可用区

当节点数据再多的时候,一个可用区放不下,需要将多个可用区连在一起,连接多个可用区的交换机称为核心交换机
在这里插入图片描述
核心交换机的吞吐量更高,高可用要求更高,遇到部署多组核心交换机。核心和汇聚交换机之间为了高可用,也是全互连模式的

核心交换机之外,就是边界路由器了。至此服务器到数据中心边界的层次情况已经清除了。当然,在核心交换机上面往往会挂载一些安全设备,例如入侵检测,DDOS防护等等。这是整个数据中心的屏障,防止外来的攻击。

就此来看,这个给数据中心的服务网络如下:
在这里插入图片描述
其中最底层的AZ1、AZ2、AZ3等等都是可用区。显示,这是一个三层网络结构。这里的三层指的是接入层、汇聚层和核心层三层。这种模式非常有利于外部流量请求到内部应用。

NAT协议

这里我为什么又要讲NAT协议呢?是因为NAT协议在你主机和数据中心云服务器交互的过程中扮演了很重要的角色。

NAT协议
NAT(Network Address Translation)是将IP数据报头中的IP地址转换为另一个IP地址的协议。在实际应用中,NAT主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公网IP地址代表较多的私网IP地址的方式,将有助于减缓可用IP地址空间的枯竭。

一般来说,云服务器都是工作在数据中心的私网的,可以看一下博主的云服务器信息:
在这里插入图片描述
也就是,博主的云服务器所在的交换机的网段是172.17.x.x/x,这个是三层网络中的私网的网络号段。而公网ip 42.192.129.38呢,则是边界路由器的ip地址

假如说,这个时候有一个网络包从我的主机发往我的云服务器。其中NAT地址转换流程如下:
假设我的主机私网ip :192.168.10.2 公网ip:49.2.5.64

那么首先我的主机发送的网络包从6000端口会到达交换机192.168.10.10,交换机将这个网络包的ip地址拆开来看,发现是发给外网42.192.129.38:4000的,就会将这个网络包发给边界路由器49.2.5.64,这个时候边界路由器会根据NAT转换协议,在其NAT表中记录以下信息:

端口号发送ip目的ip转换后ip
6000192.168.10.242.192.129.38:400049.2.5.64:6000

经过转换之后,网络包的源地址就会从192.168.10.2:6000变成49.2.5.64:6000,而目的网络则是不变。同时路由器记录这一去一回的信息,当42.192.129.38:4000有网络包过来的时候,我路由器就知道应该往192.168.10.2:6000这个主机发送了。

注意
这里有个问题没有被解决,就是假如说在公网42.192.129.38下,有两个主机,它们是私网ip地址分别是172.17.0.2172.17.0.3,它们两个访问公网公用ip42.192.129.38。假如说,它们两个同时都开启本机的6000端口监听服务(它们提供不同的服务),那么它们是只有一个能映射到42.192.129.38:6000 还是两个都能呢?
目前来看答案有两种,一种是只能由一个映射,另一个服务器会报错。另一种则是都能映射,但是路由器会对其进行负载均衡
目前来说,支持负载均衡说法的人会多一些。
当然,这只是第一次建立连接的时候会出现这种情况。一旦连接建立,就会在NAT去维护这一来一回的信息。

然后当这个网络包到达公网42.192.129.38的时候,服务器肯定是开启了监听端口172.17.0.2:4000,然后公网根据其下的NAT表中信息,将这个网络包转发至172.17.0.2:4000

公网端口映射私网ip
6000172.17.0.2:4000

同时路由器也会记录一来一回的信息,表示从49.2.5.64:6000来的信息都会往172.17.0.2:4000发送,而172.17.0.2:4000的信息都会往49.2.5.64:6000发送。

至此,NAT协议彻底透彻。

开头问题的答案

所以说,开头问题的答案也就很简单了。

在这里插入图片描述

参考文献

[1] 刘超.趣谈网络协议.极客时间
### 配置阿里云ECS实例以绑定和使用公网IP地址 #### 创建弹性辅助网卡并绑定公网IP 对于已经从经典网络迁移至VPC环境下的ECS实例,由于历史原因这些实例原先配备的是可变更的公网IP。为了使此类实例能够灵活管理其公网访问能力,在同一VPC内创建一个或多个弹性辅助网卡成为必要措施[^1]。 一旦创建好弹性辅助网卡之后,就可以进一步操作来关联所需的弹性公网IP(Elastic IP, EIP),从而允许外部流量通过指定的EIP到达对应的ECS实例。值得注意的是,虽然传统意义上的公网IP无法直接解除绑定或重新分配给其他资源,但EIP则提供了这样的灵活性[^3]。 #### 绑定多个公网IP的方法 当需要为单一ECS实例增加额外的公网入口时,可以通过附加更多的弹性网卡,并分别为它们申请独立的EIP实现这一目标。具体来说,就是利用每一块新增加的弹性网卡作为载体去承载一个新的私有IP地址,再将该私有IP与相应的EIP建立映射关系,最终达到让单个ECS拥有超过一个可被互联网识别的身份的目的[^2]。 需要注意的是,某些操作系统镜像版本可能会默认启用新加入的弹性网卡设置;在这种情况下,建议用户登录到具体的ECS实例中执行必要的初始化命令或是调整网络参数文件以便激活新的接口配置。 ```bash # 对于基于Debian/Ubuntu系统的ECS实例,编辑/etc/network/interfaces.d中的相应配置文件 sudo nano /etc/network/interfaces.d/eth1.cfg # 添加如下内容(假设次级网卡名为eth1) auto eth1 iface eth1 inet dhcp # 或者如果是静态IP,则应指明详细的网络信息 iface eth1 inet static address 192.168.x.y netmask 255.255.255.0 gateway 192.168.x.z dns-nameservers a.b.c.d e.f.g.h # 完成修改后重启网络服务使更改生效 sudo systemctl restart networking.service ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shenmingik

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值