有两台主机分别为a和b网段,互相ping不通,但是有一台双网卡主机的双网卡对应的IP正好位于a和b网段,双网卡主机可以分别ping通跨网段的这两台主机,此时就可以让这台中间双网卡主机作为数据包转发的“桥梁”,利用路由表,充当路由器的作用。
实验主机:A主机(linux,IP:192.168.2.2)、双网卡主机(win10,IP:192.168.2.3、192.168.3.3)、B主机(linux,IP:192.168.3.2)
实验目的:学习路由表、学习route命令
0x01 路由与路由表概念
路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。路由器根据接收到数据包中的网络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据包头实现转发数据包。
路由表是指路由器或者其他互联网网络设备上存储的一张路由信息表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。
route命令资料:https://blog.csdn.net/u011857683/article/details/83795435
0x02 实验准备
A主机路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.2.1 0.0.0.0 UG 100 0 0 ens192
192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 ens192
双网卡主机路由表:
B主机路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.3.1 0.0.0.0 UG 100 0 0 ens192
192.168.3.0 0.0.0.0 255.255.255.0 U 100 0 0 ens192
0x3 添加路由表指向双网卡主机
通讯的拓扑图如下,要想A主机访问B主机,就需要把目的ip 192.168.3.2的流量转发到中间机上,这时候需要在A主机上建立192.168.3.0/24段的路由表。同理,B主机上建立192.168.2.0/24段的路由表,把流量指向中间主机。
A主机(192.168.2.2)<——>中间机(192.168.2.3 eth0<——>内部路由转发——>192.168.3.3 eth1)<——>B主机(192.168.3.2)
A主机添加路由表命令:
route add -net 192.168.3.0/24 gw 192.168.2.3 dev ens192
B主机添加路由表命令:
route add -net 192.168.2.0/24 gw 192.168.3.3 dev ens192
0x04 中间双网卡windows主机开启Routing and Remote Access服务
此时,A访问B的流量会先到中间双网卡主机了,B访问A的流量也会到中间双网卡的主机。但是中间双网卡主机的两个网段之间默认是不通的,此时需要在双网卡windows主机中开启Routing and Remote Access服务
。
在windows系统中“计算机”上“右击”,选择“计算机管理”,打开“Routing and Remote Access”,选择手工启动,并启动该服务,如图所示:Routing and Remote Access服务
简称 RRA服务
,Routing and Remote Access
是全功能的软件路由器,也是用于路由和互连网络工作的开放平台。它为局域网 (LAN) 和广域网 (WAN) 环境中的商务活动,或使用安全虚拟专用网 (VPN) 连接的 Internet 上的商务活动提供路由选择服务。所以RRA服务可以用于双网卡间的通讯。
如果中间双网卡主机为linux,则开启linux的路由转发。centos7开启路由转发参考如下:
1.临时开启,(写入内存,在内存中开启)
echo "1" > /proc/sys/net/ipv4/ip_forward
2.永久开启,(写入内核)
在vim /etc/sysctl.conf
下
加入此行net.ipv4.ip_forward = 1
sysctl -p
# 加载一下,使之生效
0x05 抓包分析
此时两个不同网段的主机即可互相ping通,在A主机192.168.2.2上ping B主机192.168.3.2,对双网卡windows主机的两个网卡分别抓包分析,发现,双网卡windows主机起到的作用就是路由转发。
eth0抓包流量:
eth1抓包流量:
eth0网卡上抓包的目的ip的mac地址即为eth0网卡的mac地址,eth1网卡上抓包的源ip的mac地址即为eth1网卡的mac地址,同时TTL值进过路由转发后-1了。
参考文章:
https://www.cnblogs.com/heqiuyong/p/11625668.html
http://www.360doc.com/content/18/0805/15/21175922_775865937.shtml
http://blog.sina.com.cn/s/blog_a04184c101010koc.html
3 comments
明白了, 你测的只是两台添加了路由的主机,我要的是内网穿透。
而且我发现双网卡主机路由时并不做网络地址转换,和三层交换机一样,按理确实需要把A、B机器的网关指向双网卡 主机
为什么我测试时要把A、B机器的网关指向双网卡 主机时才能通