回环网卡上配置ip和外部网络通信

来源:互联网 发布:跳舞直播软件 编辑:程序博客网 时间:2024/05/29 18:37

介绍

通常我们知道,回环网卡是自己和自己玩,是ping不出去的。难道在回环网卡上设置ip地址,就真的ping不出去吗?我们使用一些路由机制就能让回环网卡上的数据包出去,并且返回的数据包回来。当然,这里就跟着我来实现使用回环网卡和外部网络通信吧!

一、有趣现象1

1、首先我们来看一个有趣的现象

ping  127.1ping  127.2ping 127.0.1……

发现都可以ping成功。
猜想:这似乎是127.0.0.1地址的特殊用法吧。下面实验告诉你是怎么回事。

2、回环网卡上设置一个ip地址1.1.1.1/24

ip add a 1.1.1.1/24 dev loping  1.1.1.2ping  1.1.1.3……ping  1.1.1.100

发现都能ping通,这就告诉我们,只要是在回环网卡上设置一个网络,ping其网络上的任意ip地址都能够ping通。

3、那么我们将它的网络掩码指定为32,没有存在同一个网络的ip地址,那么它就不能ping通其他ip地址了

(1)删除原来的ip地址

ip address del 1.1.1.10/24 dev lo

(2)新添加一个ip地址

ip add a 1.1.1.1/32 dev lo

ping 1.1.1.2将发行ping不通了。
(3)做下面的实验时候,为了不搞晕你和我,我们先不设置ip地址,将其删除。

二、有趣现象2

centos6上使自己的eth0网卡上的192.168.233.61能ping通centos7上ens38网卡的1.1.1.2/24

1、先在centos7上的ens38网卡上设置ip地址为1.1.1.2/24

有几种方法
方法1:直接修改网卡配置文件,修改配置ip
方法2:添加别名网卡ifconfig ens38:0 1.1.1.2/24
方法3:添加辅助ip,ip add a 1.1.1.2/24 dev ens38,这里使用此方法

2、在centos6上设置路由,

route add -net 1.1.1.0/24 dev eth0

3、在centos6上ping 1.1.1.2,发现已经可以ping通了,发现一个重要问题,就是发现是192.168.233.61和1.1.1.2进行ping通信的。是怎么回事呢?

可以在centos7上进行抓icmp包
tcpdump -i ens38 -nn icmp来验证是否是192.168.233.61和1.1.1.2通讯。

天呐,怎么可以这样。其实是有原因的。因为其实通讯是依靠Mac地址来的,并不是完全靠ip地址来通讯的。

那么新问题来了,我能ping出去,利用1.1.1.2是否能ping回来192.168.233.61呢?这当然是要在centos7上设置路由了,这里的原理和上面一样,就不多说了,我们的目的不在这里。

三、回环网卡上设置地址,使外面能ping通它

1、centos6新添加一个ip地址

ip add a 1.1.1.1/32 dev lo

发现已经可以成功ping通自己了。
2、centos7设置通向1.1.1.0/24网络的路由经过什么网卡出去

route add -net 1.1.1.0/24 dev ens38

代表发往1.1.1.0/24的网络都发到ens38网卡上面
3、这时候可以ping 1.1.1.1,然后在centos7或centos6上进行抓icmp包,看是否是1.1.1.1和1.1.1.2进行通信。理论上已经可以成功,如果不成功,多半是因为路由设置的问题。
4、这时候可以配一个httpd看是否能提供服务

yum -y  install  httpd(如果没有安装的话)service httpd start 

四、为什么会这样呢?

思考:难道就真是两个ip互相通信吗?
先抓包看现象吧,注意centos6上的回环网卡ip是1.1.1.1,centos7上ens38上的ip是1.1.1.2,我们开一个窗口进行抓包。

tcpdump -i ens38 -nn icmp

1、先利用centos6来ping 1.1.1.2

2、使用centos7来ping 1.1.1.1

3、centos6和centos7的路由信息



注意:centos6上的eth0网卡和ens38网卡是同一个物理网络。其他网卡不用考虑

4、结论:

(1)1.1.1.1->1.1.1.2时候,由于内核发现有通往1.1.1.0/24的网络,则利用eth0网卡发送出去,进行arp广播,寻找1.1.1.2的mac地址,那么在centos7的ens38网卡收到请求1.1.1.2网卡的mac地址,则将mac告诉centos6,由于eth0找到了1.1.1.2网卡的mac地址,则centos6利用eth0网卡和ens38网卡通信。于是我们看到的是192.168.233.61和1.1.1.2进行通信。实际上也验证一个结论,局域网之间的通信是按照mac地址来通信的。但是还是需要ip地址,因为icmp协议要求必须要有ip地址。
(2)1.1.1.2->1.1.1.1时候,内核同样查看自己的路由信息,发现了1.1.1.0/24的路由,则发生arp广播到ens38网卡上面,ens38在物理上发出广播,请求1.1.1.1的mac地址,物理网络上的所有网卡收到arp广播,centos6内核接收到arp广播,发现1.1.1.1地址在自己的一个网卡上面,于是就通过eth0网卡发出arp回应报文,这时候centos7接收到arp数据包的回应,则认为找到了1.1.1.1地址,则发出icmp请求,那么centos6接收到请求,查看目标地址是1.1.1.1,则接收下来,开始封装icmp回应报文,因为请求报文的目标地址是1.1.1.1,因此封装了一个回应报文,其源地址是1.1.1.1,目标地址是1.1.1.2,因此在centos7上看到的是1.1.1.1和1.1.1.2进行通信。因此又证明了局域网通信是依靠mac地址的,我们可以对回环网卡抓包,看是否接收的到,如下图,其实回环网卡是没有接收到任何请求数据包的。

其实lo网卡是“自己和自己玩的,不会接收到其他网卡上的数据包的,这里配置了一个1.1.1.1地址,只是骗骗内核,告诉内核我们的机器上行存在这个地址。内核就傻傻的认为我的机器上有这个地址。”

有什么我理解的不对的或者你不理解的,欢迎交流^_^