首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >华为设备ACL与NAT技术

华为设备ACL与NAT技术

作者头像
王瑞MVP
发布于 2022-12-28 07:22:58
发布于 2022-12-28 07:22:58
62700
代码可运行
举报
运行总次数:0
代码可运行

ACL 访问控制列表(Access Control Lists),是应用在路由器(或三层交换机)接口上的指令列表,用来告诉路由器哪些数据可以接收,哪些数据是需要被拒绝的,ACL的定义是基于协议的,它适用于所有的路由协议,并根据预先定义好的规则对数据包进行过滤,从而更好的控制数据的流入与流出.

♥ 文章声明 ♥ 该系列文章部分文字描述,整理于以下文献,化繁为简. 《网络设备配置与管理》 - 邱洋 《HCIP 华为 - 安全认证》 - 学习笔记

NAT 网络地址转换(Network Address Translation),是一个互联网工程任务组的标准,它可以实现内部私有IP地址和公网IP地址的转换,能够起到节约公网IP地址的作用,以下将介绍NAT的三种方式,静态转换、动态转换和端口复用技术.

华为ACL访问控制

路由器接口的访问控制取决于应用在其上的ACL,数据在进出网络前,路由器会根据ACL对其进行匹配,匹配成功将对数据进行过滤或者是转发,匹配失败则丢弃数据包,目前主要有三种ACL控制,标准ACL,扩展ACL,命名ACL,我们只介绍前两种.

在路由器上应用ACL时,可以为每种协议,每个端口,每个方向,和每个接口,配置一个ACL,一般称为3p原则.

◆标准ACL配置◆

标准ALCL只能通过源地址进行访问过滤与控制,因此只能阻止/允许来自指定IP地址的访问请求.

配置路由器: 接着配置路由器,开启路由器的Eth0/0/0和Eth0/0/1端口,并配置上网关地址.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Huawei> system-view
[Huawei]interface GigabitEthernet 0/0/0
[Huawei-GigabitEthernet0/0/0] ip address 192.168.1.254 255.255.255.0
[Huawei-GigabitEthernet0/0/0] quit

[Huawei]interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1] ip address 192.168.2.254 255.255.255.0
[Huawei-GigabitEthernet0/0/1] quit

配置拒绝ACL规则: 这里我们在路由器上配置一条标准的ACL规则,禁止PC1访问Server1服务器.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Huawei>system-view
[Huawei] acl 2000                                                 // 指定一个序号 2000-2999
[Huawei-acl-basic-2000] rule deny source 192.168.1.1 0.0.0.0      // 拒绝源地址访问
[Huawei-acl-basic-2000] rule deny source 192.168.1.1 0.0.0.255    // 拒绝整个网段
[Huawei-acl-basic-2000] rule permit source 192.168.1.1 0.0.0.0    // 允许源地址访问
[Huawei-acl-basic-2000] quit

[Huawei] interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1] traffic-filter outbound acl 2000   // 在出口方向应用规则
[Huawei-GigabitEthernet0/0/1] traffic-filter inbound acl 2000    // 在入口方向应用规则

测试过滤效果: 配置完规则以后,我们测试一下效果,使用PC1无法访问Server1服务器而是用PC2则可以访问.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PC1> ping 192.168.2.1
Request timeout!
Request timeout!

PC2> ping 192.168.2.1
From 192.168.2.1: bytes=32 seq=1 ttl=254 time=47 ms
From 192.168.2.1: bytes=32 seq=1 ttl=254 time=47 ms

这里需要注意一点,如果你有两个路由器相连,那么ACL规则应该设置在距离限制的目标较近的路由器上,否则可能会出现有效数据在到达目标之前就被过滤掉了.

◆拓展ACL配置◆

标准ACL只能使用源地址作为匹配条件,无法对访问进行精确的控制,为了解决这一问题,可以采用扩展ACL来对数据加以限制,接下来我们将配置扩展ACL,其拓扑结构图还是使用上图.

配置路由器: 接着配置路由器,开启路由器的Eth0/0/0和Eth0/0/1端口,并配置上网关地址.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Huawei> system-view
[Huawei]interface GigabitEthernet 0/0/0
[Huawei-GigabitEthernet0/0/0] ip address 192.168.1.254 255.255.255.0
[Huawei-GigabitEthernet0/0/0] quit

[Huawei]interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1] ip address 192.168.2.254 255.255.255.0
[Huawei-GigabitEthernet0/0/1] quit

配置禁止ICMP: 禁止192.168.1.1访问192.168.2.1icmp协议.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Huawei> system-view
[Huawei] acl 3000
[Huawei-acl-adv-3000] rule deny icmp source 192.168.1.1 0 destination 192.168.2.1 0

[Huawei] interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1]
[Huawei-GigabitEthernet0/0/1] traffic-filter outbound acl 3000
[Huawei-GigabitEthernet0/0/1] quit

[Huawei] display acl all
 Total quantity of nonempty ACL number is 1 
 rule 5 deny icmp source 192.168.1.1 0 destination 192.168.2.1 0 (27 matches)

禁止指定端口: 禁止TCP协议,的源地址192.168.1.1目标地址192.168.2.1,端口号80的协议.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Huawei> system-view
[Huawei] acl 3000
[Huawei-acl-3000] rule deny tcp source 192.168.1.1 0 destination 192.168.2.1 0 destination-port eq 80

[Huawei] interface GigabitEthernet 0/0/1
[Huawei-GigabitEthernet0/0/1]
[Huawei-GigabitEthernet0/0/1] traffic-filter outbound acl 3000

[Huawei]display acl all
 Total quantity of nonempty ACL number is 1 
 rule 5 deny icmp source 192.168.1.1 0 destination 192.168.2.1 0 (27 matches)

测试过滤效果: 配置完规则以后,我们测试一下效果,使用PC1无法访问Server1服务器而是用PC2则可以访问.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PC1> ping 192.168.2.1
Request timeout!
Request timeout!

PC2> ping 192.168.2.1
From 192.168.2.1: bytes=32 seq=1 ttl=254 time=47 ms
From 192.168.2.1: bytes=32 seq=1 ttl=254 time=47 ms

与标准ACL相比,扩展ACL能够更加精确的匹配和过滤数据包,因此扩展ACL的放置位置应该离源地址越近越好,这样才能够有效的提高链路的使用效率.

华为NAT地址转换

NAT 网络地址转换(Network Address Translation),是一个互联网工程任务组的标准,它可以实现内部私有IP地址和公网IP地址的转换,能够起到节约公网IP地址的作用,以下将介绍NAT的三种方式,静态转换、动态转换和端口复用技术.

NAT技术中有四种地址即,内部本地地址,内部全局地址,外部本地地址,外部全局地址.

◆配置静态NAT◆

静态NAT是指将内部本地地址与内部全局地址进行对应转换,某个本地地址只能转换为某个全局地址,通过配置静态NAT可以实现内部网络对外部网络的访问,也可以实现外部网络对内部网络中某个设备的访问.

配置路由器: 配置路由器,开启R1路由器的Eth0/0/0Ser0/0/0端口,并配置上网关地址.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ----配置R1路由器-----------------------------
<R1> system-view
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.1.1 255.255.255.0
[R1-Ethernet0/0/0] quit
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ip address 10.10.10.1 255.0.0.0
[R1-Ethernet0/0/0] quit

# ----配置R2路由器-----------------------------
<R2> system-view
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 10.10.10.2 255.0.0.0
[R2-Ethernet0/0/0] quit

配置静态NAT: 在路由器R1上配置静态NAT,将私有地址转为全局地址(内网地址-->外网地址).

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] nat static enable   //启用静态nat
[R1-GigabitEthernet0/0/1] quit

[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] nat static global 10.10.10.20 inside 192.168.1.2
[R1-GigabitEthernet0/0/1] nat static global 10.10.10.20 inside 192.168.1.2
[R1-GigabitEthernet0/0/1] nat static global 10.10.10.20 inside 192.168.1.2

查询NAT配置: 配置完成后,使用display nat static 命令可以查询端口情况.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[R1] display nat static

  Static Nat Information:
  Interface  : GigabitEthernet0/0/1
    Global IP/Port     : 10.10.10.20/---- 
    Inside IP/Port     : 192.168.1.2/----
    Protocol : ----     
    VPN instance-name  : ----                            
    Acl number         : ----
    Netmask  : 255.255.255.255 
    Description : ----

  Total :    1

测试通信情况: 此时在PC1主机可Ping通R2路由器.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PC1> ping 10.10.10.2

Ping 10.10.10.2: 32 data bytes, Press Ctrl_C to break
From 10.10.10.2: bytes=32 seq=1 ttl=254 time=47 ms

--- 10.10.10.2 ping statistics ---
  1 packet(s) transmitted
  1 packet(s) received
  0.00% packet loss
  round-trip min/avg/max = 47/47/47 ms

◆配置动态NAT◆

动态NAT是指内部本地地址与内部全局地址进行转换时,内部地址可以随机转换为指定的外部全局地址,此过程是动态分配的不需要认为干预,从而减少了配置的工作量.

但需要注意的是,配置动态NAT只能实现内部网络对互联网的访问,无法实现互联网中的主机对内部网络中的主机的访问,它是一种单向的NAT技术.

动态NAT是在出口路由器上做了一个地址池,内网PC访问外网时会从地址池内获取一个公网IP,此种技术也无法节约公网IP地址资源,接下来还是使用上面的拓扑图,但需要清空规则.

配置路由器: 配置路由器,开启R1路由器的Eth0/0/0Ser0/0/0端口,并配置上网关地址.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ----配置R1路由器-----------------------------
<R1> system-view
[R1] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 192.168.1.1 255.255.255.0
[R1-Ethernet0/0/0] quit
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ip address 10.10.10.1 255.0.0.0
[R1-Ethernet0/0/0] quit

# ----配置R2路由器-----------------------------
<R2> system-view
[R2] interface GigabitEthernet 0/0/0
[R2-GigabitEthernet0/0/0] ip address 10.10.10.2 255.0.0.0
[R2-Ethernet0/0/0] quit

配置动态NAT: 在路由器R1上配置动态NAT,将私有地址转为全局地址(内网地址-->外网地址).

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[R1] nat address-group 1 10.10.10.20 10.10.10.40                 // 创建公网地址池
[R1] acl 2000                                                    // 定义访问控制列表
[R1-acl-basic-2000] rule permit source 192.168.1.0 0.0.0.255     // 定义ACL列表
[R1-acl-basic-2000] quit

[R1] interface GigabitEthernet 0/0/1

// 将ACL与地址池关联,no-pat表示不可反复使用
[R1-GigabitEthernet0/0/1] nat outbound 2000 address-group 1 no-pat

// 将ACL与地址池关联,可反复使用
[R1-GigabitEthernet0/0/1] nat outbound 2000 address-group 1

拓展(端口映射): 将内网的192.168.1.1:8080映射到外网的10.10.10.1:80,配置如下.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[R1] interface GigabitEthernet 0/0/1
[R1] nat server protocol tcp global 10.10.10.1 80 inside 192.168.1.1 8080

测试通信情况: 此时在PC1主机可Ping通R2路由器.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PC1> ping 10.10.10.2

Ping 10.10.10.2: 32 data bytes, Press Ctrl_C to break
From 10.10.10.2: bytes=32 seq=1 ttl=254 time=47 ms

--- 10.10.10.2 ping statistics ---
  1 packet(s) transmitted
  1 packet(s) received
  0.00% packet loss
  round-trip min/avg/max = 47/47/47 ms
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Android项目实战(五十一):浅谈GreenDao
HX_User类会变成下面情况,注意 属性值的get和set方法不要自己写,是make project之后自动生成的
听着music睡
2018/09/20
5040
Android项目实战(五十一):浅谈GreenDao
GreenDAO快速入门
之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的差异。只停留在会使用的阶段。说起来也是惭愧。本文的重点也是在于如何快速使用。不会进行较深的探究。
g小志
2018/09/11
9850
GreenDAO快速入门
android数据保存之greendao
有时我们的数据属于保存到数据库,对于Android应用和IOS应用,我们一般都会使用SQLite这个嵌入式的数据库作为我们保存数据的工具。由于我们直接操作数据库比较麻烦,而且管理起来也非常的麻烦,以前
xiangzhihong
2018/02/02
1.8K0
android数据保存之greendao
GreenDao,clearIdentityScope报错Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Com
Error:(41, 22) 错误: 找不到符号 符号:   方法 clearIdentityScope() 位置: 类型为DaoConfig的变量 dataDaoConfig
zhangjiqun
2024/12/16
1650
GreenDao,clearIdentityScope报错Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > Com
Android十八章:是时候在你项目用上greenDAO3GreenDao
GreenDao3.1.0使用案例包含(增删查改,升级数据库),3.+版本比2.+更加便捷生成DaoMaster和DaoSession 本文项目地址
ppjun
2018/09/05
6300
Android GreenDao的基本使用
Android 本地数据库有很多,Sqlite、Dbutils、LitePa、GreenDao等,其他的几个数据库框架都用过了,GreenDao还未在项目中用过,所以在这里记录下GreenDao的基本使用。
黄林晴
2019/01/10
2.4K0
Android greenDAO 3.2.2简单使用
然后编译会在自定义的文件夹包名(比如上面的‘com.yechaoa.test.dao’)下生成3个文件:
yechaoa
2022/06/10
6910
GreenDao 工具类 --- 使用 Json 快速生成 Bean、表及其结构,"炒鸡"快!
作者:林冠宏 / 指尖下的幽灵 腾讯云+社区:https://cloud.tencent.com/developer/user/1148436/activities 掘金:https://jue
林冠宏-指尖下的幽灵
2018/01/03
1.8K0
GreenDao 工具类 --- 使用 Json 快速生成 Bean、表及其结构,"炒鸡"快!
Android集成GreenDao数据库
数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。 目前,Android系统中提供了3种方式的数据持久化技术,即文件存储、SharedPreferences存储以及数据库存储。当然,除了这3种方式之外,你还可以将数据保存在手机的SD卡中,不过使用文件、Shared Preferences或数据库来保存数据会相对更简单一些,而且比起将数据保存在SD卡中会更加地安全。Shared Preferences通常用在轻量级的数据存储场景中,比如账号/密码的存储,而数据库则用在数据量比较大的场景中,比如聊天数据的存储。
xiangzhihong
2022/10/28
6720
GreenDao查询,Querying
查询接口返回符合指定条件的实体对象集合.你可以使用SQL组织你的查询语句,或者采用更好的方法,使用greenDao的QueryBuilder API.greenDao的查询也支持延迟加载结果,当结果集很大的时候,它会节省内存和提高性能.
zhangjiqun
2024/12/16
2040
拆轮子系列之理解GreenDao框架源码
如果Android项目中要使用GreenDAO框架,需要先创建一个Java项目用于生成实体类和DAO类,然后在Android项目中使用这些类,在此过程中分别需要对Android项目添加GreenDAO的核心包依赖和对Java项目添加generator包依赖,所以解析GreenDAO的源码需要解析两部分,而这里只解析GreenDAO核心包在Android项目中的工作原理,generator包中的原理很简单,总的来说有四个作用:就是用于生成实体类、DAO类、建立多表之间的关联以及配置实体类的接口和序列化功能
见得乐
2022/09/08
1.2K0
GreenDao教程1
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个框架还是不错的。直接面向对象的,可以通过对对象的操作,实现数据的存储。
用户3030674
2018/09/14
8780
GreenDao教程1
开源数据库框架greenDAO
最近在对开发项目的性能进行优化。由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写、查询等操作。因此首先想到了对整个项目的数据库框架进行优化。 原先使用android本身内置的sqllite,也就是用的最基本的SQLiteOpenHelper方法,这种方法对自己来说比较方便易懂。但是在使用过程中感觉很繁琐,从建表到对表的增删改查等操作,如果表对象的属性很多,就需要使用大量的代码来执行建表、插入等。在代码执行中还需要对数据库和游标的进行及时关闭(开启使用,用完关闭),而且还需要部分sq
xiangzhihong
2018/01/29
2.4K0
RxCache 整合 Android 的持久层框架 greenDAO、Room一. 背景二. 持久层三. 使用四. 总结
RxCache 是一个支持 Java 和 Android 的 Local Cache 。
fengzhizi715
2018/10/25
1.1K0
RxCache 整合 Android 的持久层框架 greenDAO、Room一. 背景二. 持久层三. 使用四. 总结
Android ORM 框架之 greenDAO
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕育而生了,现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。而今天的主角便是 greenDAO,下面,我将详解地介绍如何在 Android Studio 上使用 greenDAO,并结合代码总结一些使用过程中的心得。 关于 gre
xiangzhihong
2018/02/01
1.3K0
Android ORM 框架之 greenDAO
★ Android基础篇 Android 数据存储与性能
最近到了一家公司,跟一个同事做项目,比如常规的一些操作用SharedPreferences就很好搞定,他跟我说SharedPreferences 会影响性能说了一堆… 难道别的存储方式就不耗费性能吗?不消耗内存吗?
全栈程序员站长
2021/04/07
1.4K0
Android数据层架构的实现 下篇
接上篇:Android数据层架构的实现 上篇 4.外观模式实现数据处理引擎框架暴露出来的api 我们在使用各种开源框架的时候,大多数时候都不会对框架内部的实现进行细究,所以一个好的框架需要一个简单的入口来对整个框架进行使用,我接下来就是要讲解本框架的入口类。 public class DataEngine { public static String TAG="DataEngine"; public static Context nowContext; public static Observa
何时夕
2018/05/02
1.1K0
优雅地烘焙 DBService
记得大二那年第一次接触 GreenDao 这个神奇的数据库,惊叹道,哇,原来代码还能这么写啊,不用自己手撸 SQLiteDatabase,不用写那些麻烦的 SQL 语句,编程还真是一件 “轻松” 的事情呢2333。然而,时隔多年,当我再次看到自己曾经留在项目里的那段代码时,相顾无言,惟有泪千行…
HelloVass
2018/09/12
7410
优雅地烘焙 DBService
1.0-springboot的java配置方式
本文介绍了1.0-springboot的java配置方式,包括创建User实体类、UserDao用于模拟数据库交互、UserService用于实现User数据操作业务逻辑和SpringConfig用于实例化Spring容器。通过测试方法,完美地实现了用Java配置替代了XML配置文件,同时使用AnnotationConfigApplicationContext来实例化Spring容器,并调用UserService中的方法查询用户列表,最后输出用户信息。
用户1134788
2018/01/05
5710
1.0-springboot的java配置方式
GreenDao 兼容升级,保留旧数据的---全方面解决方案
作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/ 腾讯云专栏: https://cloud.tencent.com/developer/user/1148436/activities GreenDaoCompatibleUpdateHelper
林冠宏-指尖下的幽灵
2018/02/11
1.6K0
推荐阅读
相关推荐
Android项目实战(五十一):浅谈GreenDao
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档