1.路由的作用
路由器在ISO层次结构中的第三层,根据三层协议的各种信息,完成数据包的选路和转发,最终
到达目的地。
2.路由的工作原理
(1)NAT的了解
NAT(Network Address Translation,网络地址转换)是将IP 数据包头中的IP 地址转换为
另一个IP 地址的过程。在实际应用中,NAT 主要用于实现私有网络访问公共网络的功能。这种通
过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用IP地址空间的枯竭
DNAT (Destination Network Address Translation) 目的网络地址转换,
SNAT (Source Network Address Translation )源网络地址转换,其作用是将ip数据包
的源地址转换成另外一个地址,可能有人觉得奇怪,好好的为什么要进行ip地址转换啊,为了弄懂
这个问题,我们要看一下局域网用户上公网的原理,假设内网主机A(192.168.2.8)要和外网主
机B(61.132.62.131)通信,A向B发出IP数据包,如果没有SNAT对A主机进行源地址转换,A与B
主机的通讯会不正常中断,因为当路由器将内网的数据包发到公网IP后,公网IP会给你的私网IP回
数据包,这时,公网IP根本就无法知道你的私网IP应该如何走了。所以问它上一级路由器,当然这
是肯定的,因为从公网上根本就无法看到私网IP,因此你无法给他通信。为了实现数据包的正确发
送及返回,网关必须将A的址转换为一个合法的公网地址,同时为了以后B主机能将数据包发送给
A,这个合法的公网地址必须是网关的外网地址,如果是其它公网地址的话,B会把数据包发送到
其它网关,而不是A主机所在的网关,A将收不到B发过来的数据包,所以内网主机要上公网就必须
要有合法的公网地址,而得到这个地址的方法就是让网关进行SNAT(源地址转换),将内网地址转
换成公网址(一般是网关的外部地址),所以大家经常会看到为了让内网用户上公网,我们必须在
routeros的firewall中设置snat,俗称IP地址欺骗或伪装(masquerade)
(2)区分DNAT和SNAT
从定义来讲它们一个是源地址转换,一个是目标地址转换。都是地址转换的功能,将私有地址转
换为公网地址。
要区分这两个功能可以简单的由连接发起者是谁来区分:
内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火
墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址
转换称为SNAT,主要用于内部共享IP访问外部。当内部需要提供对外服务时(如对外发布web网
站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到
内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,
此转换称为DNAT,主要用于内部服务对外发布。
注:在配置防火墙或者路由acl策略时要注意这两个NAT一定不能混淆。
(3)什么是路由器?
在局域网中,主机可以通过广播的方式来进行网络数据包的发送,但是在不同的网段类的主机
想要互相连接时就必须通过路由器来实现。路由器(Router)又称网关设备(Gateway)是用于
连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个
子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和
选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质
访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。
3.配置desktop为双网卡主机,使其充当路由器,实现两个不同网段的主机可以通信(此处是单侧路由)
desktop | 路由器 | eth0 172.25.254.142(公网) eth1 192.168.0.142 (内网) |
---|---|---|
server | 服务端 | eth0 192.168.0.242 |
[root@foundation42 ~]# virt-manager # 在真机上执行这条命令
[root@desktop Desktop]# ifconfig # 查看到有两块网卡,eth0是外网也就是公网,eth1是内网
[root@desktop Desktop]# cd /etc/sysconfig/network-scripts/
[root@desktop network-scripts]# cp ifcfg-eth0 ifcfg-eth1
[root@desktop network-scripts]# vim ifcfg-eth1 # 添加eth1网卡 (内网)
1 DEVICE=eth1
2 ONBOOT=yes
3 BOOTPROTO=none
4 IPADDR=192.168.0.142
5 NETWORK=255.255.255.0
6 #PREFIX=24
7 NAME=eth1
[root@desktop network-scripts]# systemctl restart network
[root@desktop network-scripts]# ifconfig # eth1创建成功
[root@desktop ~]# systemctl start firewalld # 打开防火墙
[root@desktop ~]# firewall-cmd --add-masquerade # 添加地址伪装,即开启路由功能
Success
# 配置server
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig # 查看ip设定成功
[root@localhost ~]# route -n # 查看网关添加成功
[root@localhost ~]# ping 172.25.254.42 # 可以ping通172.25.254.42这个与自己不同网段的主机,说明通信成功,这个是由路由器来实现的
[root@localhost ~]# ssh root@172.25.254.34 # 连接一个和自己网段不同的主机
[root@foundation34 ~]# w -i # 在登陆的这台主机上查看登陆自己的主机时,查看到的是路由器的ip,而不是真实连接自己的主机,即伪装成功