无论在国内市场还是国际市场,CISCO交换机、路由器在网络设备领域都占据了主导地位。本文主要总结交换机、路由器等网络设备相关的概念以及CISCO设备常用配置命令,以便记录和学习。
文章目录
一、基础概念
(一) 交换机与集线器
交换机工作在链路层或网络层,这和工作在物理层的集线器有本质上的区别:
- 集线器 (Hub):内部本质是总线型拓扑,数据转发只能通过广播的形式,端口之间通道为半双工通信,所有端口存在于同一个冲突域
- 二层交换机 (Switch):通过自学习建立“MAC-端口”对应表,从而可以实现单播,端口之间为全双工通信,这样得以将每个端口冲突域相隔离
- 三层交换机 (Router):具有路由功能的交换机,可以简单理解为在二层交换机的基础上添加了路由模块
尽管交换机有“MAC-端口”对应表,而且端口间为全双工通信,但这只是隔离了冲突域,并不能隔离广播域,对于ARP、DHCP等广播包一样会广播到所有端口,所以当链路复杂时一样容易产生广播风暴,对此有效的解决方法就是配置VLAN,每个VLAN都是一个独立的广播域,可以有效避免广播风暴。
(二) VLAN标签
要使交换机能够分辨不同的VLAN报文,需要在报文中添加标识VLAN信息的字段,即VLAN标签 (VLAN Tag) ,这个过程需要使用IEEE 802.1Q协议封装帧头,只能由交换机、路由器等网络设备实现。协议规定在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN Tag,用以标识VLAN信息,如下图所示:
主机、集线器收发的数据包中无VLAN Tag,交换机、路由器等设备收发的数据包中可以有,也可以没有VLAN Tag。VLAN Tag是二层的概念,如果需要三层设备处理VLAN Tag,就需要配置其二层功能,否则收到携带VLAN Tag的数据包无法正常识别和处理,例如路由器的三层接口如果不配置虚拟子接口,或者在三层交换机上关闭接口二层、开启三层功能,这些情况下接口都无法正常处理携带VLAN Tag的数据包。
CISCO交换机不同类型的接口 (链路) 在收发Tag/Untag报文时处理方式不同:
- Access接口:一般用于和不能识别Tag的用户终端(如用户主机、服务器等)相连,只能收发Untag帧,且只能为Untag帧添加唯一VLAN的Tag
- Trunk端口:一般用于连接交换机、路由器等可同时收发Tag和Untag报文的设备,可以允许多个VLAN的报文携带Tag通过
(三) 管理方式
对于交换机、路由器等CISCO设备,很多配置命令都是通用的,这两类网络设备管理的模式也是相同的:
- Console接口:设备的控制台接入端口,一般为RJ45接口,管理员通过“Console转串口”或“Console转USB”数据线,一端接交换机另一端接PC控制端,在本地进行管理
- AUX接口:辅助接口,用于远程配置,很少使用
- 虚拟终端 (vty):通过Telnet、SSH等远程连接交换机时分配,需要先通过Console接口配置才能使用
- WEB界面:通过WEB界面管理设备,需要先通过Console接口或其他方式将WEB服务启用
(四) 工作模式
CISCO设备四种基本的工作模式,分别如下:
- 用户模式
>
:低权限用户接入交换机的初始工作模式 - 特权模式
#
:用户模式下输入命令enable
进入特权模式 - 全局配置模式
(config)#
:特权模式下输入命令configuration terminal
进入全局配置模式 - 接口配置模式
(config-if)#
:全局配置模式下选择具体接口进入接口配置模式,如:int f0/1-4
CISCO设备特权级别范围 0-15,级别≥3时,用户登入交换机即特权模式,不用输入enable
命令和特权模式的密码。当用户处于较低权限级别,通过enable
命令默认进入15级最高权限。
(五) 加密级别
不同系列的设备支持的加密方式不同,常见如下:
- 0:不加密,显示密码本身
- 5:MD5哈希加密
- 7:CISCO加密,可以逆转破解,安全性低
- 8:PBKDF2哈希加密
- 9:SCRYPT哈希加密
二、配置命令
(一) 基本配置
[<command>] ?
—> 帮助命令,常用于查看子命令
no <command>
—> 取消command相应的配置
include
—> 结合管道符|
使用,提取信息
exit
—> 退出当前模式
SW> enable <level> // 提升权限至level,默认进入15级特权模式
SW# show users // 查看当前登陆用户,主要包括console和vty
// 有*标注的代表自己当前登录用的模式
SW# show privilege // 显示当前用户权限等级
SW# show running-config // 显示当前设备所有配置
SW# show version // 显示设备版本、系统等信息
SW# show vlan brief // 简洁显示所有VLAN状态、名称
SW# show ip interface brief // 简洁显示所有接口(包括虚拟接口)分配IP和激活状态
SW# show ip route // 查看路由表(三层设备)
SW# show ip protocols // 查看IP路由协议配置参数和运行情况
SW# show arp // 查看“ARP-IP-Interface”对应表(三层设备)
SW# show access-lists // 查看ACL规则(三层设备)
SW# show vtp status // 查看VTP状态信息
SW# show monitor // 查看端口镜像配置(交换机)
SW# show mac address-table // 查看交换机“MAC-接口”对应表
// 可以以此判断接口下接主机情况,但注意转换表有过期时间,信息可能不完整
SW# show cdp neighbors detail // CDP(Cisco Discovery Protocol)是CISCO专有协议,用于查看相邻设备的配置信息
// 查看与交换机连接设备的主机名、型号、接口、IP等详细信息
SW# config terminal // 进入全局配置模式
SW# write // 保存配置信息
// 配置信息保存在运行配置中,而重启后是按照启动配置运行的,所以配置后要保存
SW# debug // 进入debug调试模式,可以查看通过设备的相关数据包的收发情况
SW(config)# hostname <hostname> // 配置设备名称
SW(config)# service password-encryption // 开启加密服务,采用CISCO私有算法加密存储密码
SW(config)# username <name> privilege <level> {secret|password} <num> <pass> //配置设备名称
// privilege有16个等级:0-15,等级越高权限越大
// secret代表加密,<num>代表不同的加密算法
// password代表不加密,在show run时直接可见密码明文
// 如果开启password-encryption服务,则password设置的密码会被加密
// secret命令优先级大于password,若同时设置则secret命令生效
SW(config)# enable {secret|password} <num> <pass> // 设置低权限用户进入特权模式的密码
SW(config)# line console 0 // line表示接入交换机的线路,通常包括console和vty
// 对控制台接口进行配置,0代表console端口号
// 命令执行后进入SW(config-if)#配置模式
SW(config)# line vty 0 4 // 对虚拟终端进行配置,0-4代表5个虚拟终端
// 命令执行后进入SW(config-if)#配置模式
SW(config-line)# password <pass> // 配置进入当前模式(console/vty)需要的密码
SW(config-line)# login // 登录时启用密码检查,只需要输入密码
SW(config-line)# login local // 登录时启用密码检查,需要输入用户名和密码
SW(config-line)# no login // 当前line不允许登录
SW(config)# interface <interface> // 进入接口配置模式 SW(config-if)#
// <interface>可以是VLAN、物理接口、虚拟子接口
SW(config-if)# no shutdown // 激活端口
SW(config-if)# ip address <addr> <mask> // 为接口(SVI、物理接口、虚拟子接口)配置静态IP
SW(config-if)# ip address dhcp // 为接口(SVI、物理接口、虚拟子接口)配置DHCP
SW(config-if)# no switchport // 关闭三层交换机物理接口的二层功能,启用三层功能
// 这样就可以为三层交换机物理接口配置IP地址
SW(config)# ip route <dst_addr> <mask> <gw_addr> // 配置静态路由(三层设备)
SW(config)# router <protocol> // 进入动态路由协议配置(三层设备),包括rip/ospf/eigrp/bgp
SW(config-router)# default-information originate // 配置默认路由(三层设备)
// 使默认路由配置可以在动态路由协议域内所有路由器上传播
注意:配置命令支持缩略表示,如:username root privi 15 pass asdf
、show run
(二) 配置DHCP
在二层或三层设备上配置DHCP服务,为使VLAN间可以正常路由,三层设备上为VLAN实现路由的IP地址 (路由器物理接口或虚拟子接口的IP / 三层交换机SVI的IP) 必须和DCHP服务分配的默认网关地址一致。
Router(config)# service dhcp // 开启DCHP服务
Router(config)# ip dhcp pool <name> // 进人dhcp地址池进行配置
Router(dhcp-config)# network <addr> <mask> // 配置dhcp地址池
Router(dhcp-config)# default-router <addr> // 配置网关地址
Router(dhcp-config)# dns-server <addr> // 配置dns服务器地址
Router(dhcp-config)# exit
Router(config)# ip dhcp excluded-address <addr> // dhcp不分配的地址
Router(config)# exit
Router# show ip dhcp binding // 查看dhcp地址分配情况
(三) 划分VLAN
1.创建VLAN
在VLAN数据库模式和全局模式下都可以实现对VLAN信息进行配置,但推荐在全局模式下进行配置,因为VLAN数据库模式正在被弃用,下面对VLAN的配置统一在全局模式下进行。
SW(config)# vlan <id> // 创建vlan并对其进行配置
SW(config-vlan)# name <name> // 为vlan命名name
2.配置端口
SW(config)# interface <interface_phy> // 进入物理接口进行配置,如fa0/1、gi0/1、gi0/0/1
// 可以一次配置多个接口,如 interface range fa0/1-2
// fa代表Fast百兆以太网接口
// gi代表Gigabit千兆以太网接口
// 接口代码的完整表示为x/y/z,代表第x台设备,第y个插槽板卡,第z个端口
SW(config-if)# switchport mode access // 配置接口为access模式,只允许指定vlan数据包通过
SW(config-if)# switchport access vlan <id> // 配置交换机接口,将其分配给vlan id,且只允许vlan id数据包通过
// 只有交换机设备有此命令
SW(config-if)# switchport trunk encapsulation dot1q
// 配置接口封装为dot1q,不然可能会出现报错:"An interface whose trunk encapsulation is 'Auto' can not be configured to 'trunk' mode"
SW(config-if)# switchport mode trunk // 配置接口为trunk模式,可以允许多个vlan数据包通过
SW(config-if)# switchport trunk allowed vlan all // 允许所有vlan数据包通过
注意:交换机默认存在VLAN 1(本征VLAN),所有端口初始都划分在VLAN 1中。
3.配置SVI
交换机虚拟接口 (Switch Virtual Interface, SVI) 是VLAN的虚拟接口,为SVI配置IP,通常作用如下:
- 实现对设备进行远程管理
- 作为网关实现不同VLAN间路由
不同设备 (交换机) 如果需要通过同一个VLAN进行管理,需要为VLAN在不同设备上的SVI配置不同的IP,例如:在SW1和SW2上都配置有VLAN10的信息,想要通过VLAN10对这两个设备进行管理,可以在SW1上配置VLAN10的IP为10.1.1.1,在SW2上配置VLAN10的IP为10.1.1.2。
SW(config)# interface vlan <id> // 针对Vlan的SVI进行配置
SW(config-if)# descryption demo test // 对SVI添加描述
SW(config-if)# ip address <address> <mask> // 为SVI分配IP
4.配置路由
在成功划分VLAN后,要使VLAN间可以正常路由需要在三层设备上配置,一般有三种方式:
(1) 多臂路由:即普通路由,为每个Vlan分配一个物理端口,每个物理端口配置为相应Vlan的网关,但是这种方式需要耗费大量路由器端口,在实际实施中基本行不通。
Router(config)# interface <interface_phy> // 进入物理接口配置,如fa0/1
Router(config-if)# no shutdown // 激活端口
Router(config-if)# ip address 192.168.100.1 255.255.255.0 // 分配IP
Router(config-if)# exit
(2) 单臂路由:在一个物理端口上划分多个虚拟子接口,每个虚拟子接口分配一个VLAN,并作为VLAN的网关,这样解决了路由器物理端口需求量过大的问题,但由于所有VLAN数据包都通过一条链路,所以性能上限会受到单链路的局限。
交换机和路由器之间链路是中继链路,交换机连接路由器的接口配置为trunk口,允许多个VLAN的数据帧通过,默认封装格式为802.1Q,只有路由器接口同样封装为802.1Q,才能保证打上VLAN标签的数据帧能够被交换机区分,从而实现跨越VLAN通信,所以交换机在配置虚拟子接口时要封装802.1Q协议。
Router(config)# interface <interface_phy> // 进入物理接口配置,如fa0/1
Router(config-if)# no shutdown // 激活接口
Router(config-if)# exit
Router(config)# interface <sub_interface> // 进入虚拟子接口配置,如fa0/0.1
// 虚拟子接口并不是实际存在的物理接口,但是功能和物理接口相同
Router(config-subif)# encapsulation dot1q <vlan_id> // 接口配置802.1Q协议(vlan封装方式)
Router(config-subif)# ip address 192.168.100.1 255.255.255.0 // 为该接口划分网关地址,针对虚拟接口设置ip是为了分配网关
Router(config-subif)# exit
(3) 三层交换机:在二层交换机的基础上添加路由模块,为每个VLAN分配一个物理接口,每个物理接口配置为相应的Vlan的网关,解决了物理端口需求量大和链路局限的问题,是解决VLAN间路由的首选。三层交换机默认只开启了二层功能,如果需要使用三层功能需要手动开启。
在交换机接口上配置VLAN间路由有两种思路,第一种是利用交换机接口二层功能+路由:
SW(config)# vlan <id> // 和连接的二层交换机配置相同的vlan信息
SW(config-vlan)# name <name> // 为vlan命名
SW(config-vlan)# exit
SW(config)# interface <interface_phy> // 进入物理接口配置,如fa0/1,配置三层功能
SW(config-if)# no shutdown // 激活接口
SW(config-if)# switchport mode access // 允许单个VLAN通过配置接口为access模式
// 允许多个VLAN通过配置接口为trunk模式
SW(config-if)# switchport access vlan <id> // 配置允许通过的vlan id
SW(config-if)# exit
SW(config)# interface vlan <id> // 进入SVI配置
SW(config-if)# ip address <addr> <mac> // 为SVI配置IP,与网关IP一致
SW(config-if)# exit
SW(config)# ip routing // 开启IP路由功能
第二种是利用交换机接口三层功能+路由:
SW(config)# vlan <id> // 和连接的二层交换机配置相同的vlan信息
SW(config-vlan)# name <name> // 为vlan命名
SW(config-vlan)# exit
SW(config)# interface <interface_phy> // 进入物理接口配置,如fa0/1,配置二层功能
SW(config-if)# no shutdown // 激活接口
SW(config-if)# no switchport // 关闭接口二层功能,开启三层功能
// 三层功能接口配置方法和路由器接口相同,但是不能配置虚拟子接口
SW(config-if)# ip address <addr> <mac> // 配置接口IP,与网关IP一致
SW(config-if)# exit
SW(config)# ip routing // 开启IP路由功能
注意:
① 路由器自动开启路由功能,而三层交换机默认没有开启,需要ip routing
命令
② 对三层交换机物理接口配置IP需要先使用no switchport
命令关闭接口二层功能,开启三层功能
③ 出现Native VLAN mismatch discovered...
警告信息,可以关闭VTP来解决,在全局配置模式输入命令 no cdp run
,或者在相应接口关闭VTP no cdp enable
(四) 配置VTP
VTP (Vlan Trunk Protocol) 是CISCO私有的VLAN中继协议,通过同步交换机上VLAN的配置信息简化和统一网络管理。在VTP域中建立VTP Server和VTP Client,在一台VTP Server上配置VLAN时,VLAN信息将自动通过域中所有VTP Server/Client进行分发。
VTP中交换机有Server、Client、Transparent三种模式:
- Server:维护VTP域中所有VLAN 信息,可以建立、删除或修改VLAN,可以同步VLAN配置,并把配置保存在NVRAM存储器中
- Client:从VTP Server学习VLAN配置信息,不能建立、删除或修改VLAN,但可以同步VLAN配置,不保存配置到NVRAM存储器中
- Transparent:独立于VTP域的交换机,仅维护本机上的VLAN信息,不参与VTP的信息同步和自学习机制,可以建立、删除和修改本机上的VLAN信息,并把配置保存在NVRAM存储器中
通常一个VTP域内的设置一个VTP Server和多个VTP Client,交换机之间必须要用中继链路Trunk模式,具体配置如下:
1.VTP Server
SW(config)# vtp mode server // 配置交换机为VTP Server
SW(config)# vtp version <ver> // 配置vtp版本
SW(config)# vtp domain <name> // 配置VTP域
SW(config)# vtp password <pass> // 配置VTP密码
SW(config)# interface <interface_phy> // 配置交换机相连的物理接口为trunk模式
SW(config-if)# switchport mode trunk
SW(config-if)# switchport trunk allowed vlan all
SW(config-if)# exit
2.VTP Client
SW(config))# vtp mode client // 配置交换机为VTP Client
SW(config)# vtp version <ver> // 配置vtp版本,必须与VTP Server一致
SW(config)# vtp domain <name> // 配置VTP域,必须与VTP Server一致
SW(config)# vtp password <pass> // 配置VTP密码,必须与VTP Server一致
SW(config)# interface <interface_phy> // 配置交换机相连的物理接口为trunk模式
SW(config-if)# switchport mode trunk
SW(config-if)# switchport trunk allowed vlan all
SW(config-if)# exit
(五) 配置ACL
访问控制列表 (Access Control Lists, ACL) 可以根据在三、四层设定的条件 (源IP、目的IP、源端口、目的端口等) 对接口上的数据包进行过滤,允许其通过或丢弃,从而限制网段、VLAN间互访。ACL需要在三层设备上进行配置,所有规则都是基于出/入两个方向:
- 出:表示已经由设备处理完毕,正离开设备接口的数据包
- 入:表示已经到达设备接口的数据包,将要被设备处理
ACL按照优先生效的原则,数据包先匹配到的规则直接生效,不会继续向下寻找匹配。CISCO默认在ACL规则结尾添加deny any
规则,即默认丢弃所有没有匹配到规则的数据包,因此如果要正常转发数据包,需要手动添加permit any
规则。
分为标准ACL、扩展ACL和命名ACL三类:
1.标准ACL
对三层数据包中的源IP地址进行过滤,使用访问控制列表号1-99来创建相应的ACL,命令为:
SW(config)# access-list <num> {permit|deny} <addr> <r_mask>
// 标准ACL --> num: 1-99
// CISCO规定ACL中用反向掩码表示子网掩码,比如:192.168.1.1 0.0.0.255 表示192.168.1.1/24
// <addr> <r_mask>替换成any,相当于 0.0.0.0 255.255.255.255
// <addr> <r_mask>替换成host <addr>,如:host 192.168.1.1,相当于:192.168.1.1 0.0.0.0
SW(config)# access-list <num> permit any
// CISCO的ACL默认在规则结尾添加deny any的命令,即丢弃所有不符合匹配规则的数据包
// 因此在配置完限制规则后要加上这一句,否则匹配不到的规则包默认被丢弃
SW(config)# ip access-list standard <num>
SW(config-std-nacl)# <seq_num> {deny|permit} <addr> <r_mask>
// 可以指定添加ACL中具体规则的序号,如果不指定,默认序号按照10,20,30...递增
SW(config-std-nacl)# no <seq_num>
// 只删除ACL中序号为seq_num的规则
SW(config)# exit
SW(config)# interface <interface>
SW(config-if)# ip access-group <num> {in|out}
// 接口类型可以是物理端口、SVI和虚拟子接口
// 针对接口入/出端口应用ACL规则
SW(config)# no access-list <num>
// 删除ACL规则
2.扩展ACL
对三层、四层数据包的源IP地址、端口以及目的IP地址、端口信息进行过滤,使用访问控制列表号100-199来创建相应的ACL,命令为:
SW(config)# access-list <num> {permit|deny} <protocol> <src_addr> <r_mask> <dst_addr> <r_mask> <operator> <service|port>
// 扩展ACL --> num: 100-199
// operator具体包括:It小于,gt大于,eq等于,neq不等于
// 如:access-list 1 deny tcp any host 192.168.1.1 eq www --> 将所有主机访问192.168.1.1的www(80)服务的tcp数据包丢弃
SW(config)# no access-list <num>
// 删除整个ACL规则
SW(config)# ip access-list extend <num>
SW(config-std-nacl)# <seq_num> {deny|permit} <addr> <r_mask>
// 可以指定添加ACL中具体规则的序号,如果不指定,默认序号按照10,20,30...递增
SW(config-std-nacl)# no <seq_num>
// 只删除ACL中序号为seq_num的规则
SW(config)# exit
SW(config)# interface <interface>
SW(config-if)# ip access-group <num> {in|out}
3.命名ACL
基于名称建立标准/扩展ACL规则,或是选择相应的规则对其进行编辑,序号可以当成是一种特殊的名称,所以也可以针对序号规则进行编辑,命令为:
SW(config)# ip access-list {standard|extended} <name>
// 建立一个名为name的标准/扩展ACL
SW(config-std-nacl)# <seq_num> {deny|permit} <addr> <r_mask>
// 可以指定ACL中具体规则的序号,如果不指定,默认序号按照10,20,30...递增
SW(config-std-nacl)# no <seq_num>
// 只删除ACL中序号为seq_num的规则
SW(config-std-nacl)# exit
SW(config)# no ip access-list standard <name>
// 删除整个ACL规则
SW(config)# interface <interface>
SW(config-if)# ip access-group <name> {in|out}
注意:CISCO规定ACL中用反向掩码表示子网掩码,比如用 192.168.1.1 0.0.0.255
表示 192.168.1.1/24
(六) 端口镜像
端口镜像即把交换机源端口 (一个或多个) 的流量完全拷贝一份,然后从目的端口 (一个或多个) 发出,目的端口通常接IDS、Sniffer PC等流量分析设备,以便网络流量监控和故障诊断。在CISCO设备上通过SPAN (Switched Port ANalyzer) 和RSPAN (Remote Switched Port ANalyzer) 技术做端口镜像。
1.SPAN
本地设备端口监控,所有被监听的源端口与镜像目的端口同处于一台交换机上:
SW(config)# monitor session <id> source <interface> {tx|rx|both}
// 配置span镜像源接口
// interface既可以是物理接口,如fa0/1,也可以是SVI,如vlan 100
// tx: 接口发送流量,rx: 接口接收流量,both: 接口收发流量 (默认)
SW(config)# monitor session <id> destination <interface_phy>
// 配置span镜像目的接口
// interface_phy是连接流量分析设备的物理接口
镜像目的接口配置后,只能接收镜像流量,无法收发正常流量。
2.RSPAN
远端设备端口监控,被监听的源端口与镜像目的端口不在同一台交换机上,这时要在中间经过所有的交换机上配置相同的RSPAN VLAN用于传递镜像流量,交换机之间为Trunk连接。
(1) 在源端口交换机上配置,使镜像端口流量 interface —> rspan vlan:
SW(config)# vlan <id> // vlan id不能和已配置正常vlan相同
SW(config-vlan)# name <name>
SW(config-vlan)# remote-span // 配置RSPAN模式,专用于传递镜像流量
SW(config-vlan)# exit
SW(config)# monitor session <id> source <interface> {tx|rx|both}
// 配置rspan镜像源接口
// interface既可以是物理接口,如fa0/1,也可以是SVI,如vlan 100
SW(config)# monitor session <id> destination remote vlan <id> reflector-port <interface>
// 镜像目的端口配置为rspan vlan
// 反射端口(reflector-port)负责将镜像流量转发到rspan vlan
(2) 在中间交换机上配置 (如果存在的话) RSPAN VLAN,使镜像端口流量 rspan vlan —> interface:
SW(config)# vlan <id> // vlan id要与镜像源端口所在交换机的vlan一致
SW(config-vlan)# name <name>
SW(config-vlan)# remote-span // 配置RSPAN模式,专用于传递镜像流量
SW(config-vlan)# exit
SW(config)# monitor session <id> source remote vlan <id>
// 镜像源端口配置为rspan vlan
SW(config)# monitor session <id> destination <interface_phy>
// 配置rspan镜像目的端口的流量
// session id不需要和源交换机一致
// interface_phy是连接下一个交换机的物理接口
(3) 在目的端口交换机上配置,使镜像端口流量 rspan vlan —> interface:
SW(config)# vlan <id> // vlan id要与镜像源端口所在交换机的vlan一致
SW(config-vlan)# name <name>
SW(config-vlan)# remote-span // 配置RSPAN模式,专用于传递镜像流量
SW(config-vlan)# exit
SW(config)# monitor session <id> source remote vlan <id>
// 镜像源端口配置为rspan vlan
SW(config)# monitor session <id> destination <interface_phy>
// 配置rspan镜像目的端口的流量
// interface_phy是连接流量分析设备的物理接口
(七) GRE隧道
通用路由封装 (General Routing Encapsulation, GRE) 通过对三层数据报文进行封装,使被封装的报文可以在另一种三层网络协议中传输,从而连接两个不同的网络,为数据传输提供一个透明的隧道。在路由器R1和R2之间建立一条GRE (IP-over-IP) 隧道,R1、R2两路由器配置命令相似,基本过程为:
- 创建隧道,配置IP,作为隧道源IP地址
- 指定隧道源接口和目的接口IP,建立隧道
- 为隧道配置路由 (目的地址是隧道对端可以访问的网段,路由地址是隧道对端IP)
以R1为例:
R1(config)# interface <interface> // 配置接口,作为隧道源接口,如fa0/1
R1(config-if)# ip address <addr> <mask> // 配置接口IP
R1(config-if)# exit
R1(config)# interface tunnel <id> // 创建隧道
R1(config-if)# tunnel mode gre ip // 在IP协议上封装GRE
R1(config-if)# ip address <addr> <mask> // 配置隧道IP,隧道IP是虚拟IP
R1(config-if)# tunnel source <interface> // 配置隧道源接口,如fa0/1
R1(config-if)# tunnel destination <addr> // 配置隧道目的接口IP,注意与隧道IP (虚拟IP) 相区分
// 如果源接口IP和目的接口IP之间能正常通信,通道开启
R1(config-if)# exit
R1(config)# ip route <dst_addr> <mask> <forward_ip> // forward_ip 是隧道对端IP
// 通过指定隧道IP的方式,路由通向某一网段的流量
// 注意参数 dst_addr 应是网络号 (IP地址与掩码相与的结果,如 192.168.1.0),否则会报错 "%Inconsistent address and mask"
理解隧道两端为什么除了接口IP还需要隧道IP,因为通过GRE隧道的包外层协议IP地址是接口IP,而内层协议IP地址是隧道IP。
GRE具有配置简单、便于维护、包头小、效率高的优势,但不对数据进行加密,通常可结合IPSec协议以保证通信安全性。
(八) NAT配置
网络地址转换 (Network Address Translation, NAT) 提供了一种将内网地址转换成外网地址的方法,让内网计算机通过有限的外网IP访问外网资源,从而节省了IP资源。内网的私有IP如果想访问外网资源,在边界路由器上就必须配置NAT,因为外网主机无法对私有IP进行路由。
NAT常见三种类型:
- 静态地址转换:将内网IP一对一地转换为外网IP,内网IP地址对应唯一的外网地址
- 动态地址转换:将内网IP随机地转换为合法外网IP池中的地址,内网IP地址对应多个外网地址
- 端口地址转换:即PAT (Port Address Translation),内网所有主机均可共享一个合法外网IP,采用端口多路复用,改变出网数据包的源端口并进行端口转换,从而可以最大限度地节约IP地址资源,目前使用的NAT技术一般都是PAT
NAT一般是针对边界路由设备进行配置,分为三类:
1.静态地址转换
Router(config)# interface <interface_inside> // 配置连接内网的接口,如fa0/1
Router(config-if)# ip address <addr> <mask>
Router(config-if)# ip nat inside // 配置内网NAT接口,启用NAT
Router(config-if)# exit
Router(config)# interface <interface_outside> // 配置连接外网的接口,如fa0/1
Router(config-if)# ip address <addr> <mask>
Router(config-if)# ip nat outside // 配置外网NAT接口,启用NAT
Router(config-if)# exit
Router(config)# ip route <dst_addr> <mask> <forward_ip> // 配置路由
Router(config)# ip nat inside source static <in_addr> <out_addr> // 配置内网IP与外网IP的静态NAT
// 外网IP是ISP分配的合法IP
2.动态地址转换
动态NAT配置需要定义ACL和NAT地址池,然后将ACL映射到NAT地址池:
Router(config)# interface <interface_inside> // 配置连接内网的接口,如fa0/1
Router(config-if)# ip address <addr> <mask>
Router(config-if)# ip nat inside // 配置内网NAT接口,启用NAT
Router(config-if)# exit
Router(config)# interface <interface_outside> // 配置连接外网的接口,如fa0/1
Router(config-if)# ip address <addr> <mask>
Router(config-if)# ip nat outside // 配置外网NAT接口,启用NAT
Router(config-if)# exit
Router(config)# access-list <num> {permit|deny} <addr> <r_mask> // 创建ACL
Router(config)# ip nat pool <name> <start_addr> <end_addr> netmask <mask> // 创建NAT地址池
// 地址池中地址为ISP分配的合法IP
Router(config)# ip route <dst_addr> <mask> <forward_ip> // 配置路由
Router(config)# ip nat inside source list <number> pool <name> // 将NAT地址池中地址和ACL规则相关联
3.端口地址转换
PAT是动态的,配置也需要定义ACL,如果想要所有内网IP在出网时映射到单一IP地址做PAT,则ACL规则关联出网接口,如果想要所有内网IP在出网时映射到多个IP地址做PAT,则需要建立NAT地址池,ACL规则关联NAT地址池:
Router(config)# interface <interface_inside> // 配置连接内网的接口,如fa0/1
Router(config-if)# ip address <addr> <mask>
Router(config-if)# ip nat inside // 配置内网NAT接口,启用NAT
Router(config-if)# exit
Router(config)# interface <interface_outside> // 配置连接外网的接口,如fa0/1
Router(config-if)# ip address <addr> <mask>
Router(config-if)# ip nat outside // 配置外网NAT接口,启用NAT
Router(config-if)# exit
Router(config)# access-list <num> {permit|deny} <addr> <r_mask> // 创建ACL
Router(config)# ip nat pool <name> <start_addr> <end_addr> netmask <mask> // 创建NAT地址池
// 地址池中地址为ISP分配的合法IP
Router(config)# ip route <dst_addr> <mask> <forward_ip> // 配置路由
Router(config)# ip nat inside source list <number> interface <interface_outside> overload // 将外网接口和ACL规则相关联
// 除了将外网接口和ACL规则相关联外,也可以将NAT地址池中地址和ACL规则相关联
// 这样内网IP出网时就可以转换为NAT地址池中的多个IP,在多个IP上做PAT
Router(config)# ip nat inside source list <number> pool <name> overload