草庐IT

华为静态NAT、动态NAT、PAT端口复用

China-P 2025-06-30 原文

一、网络环境及TOP

1.1 R1 相当于内网的一台PC, IP:192.168.1.10  网关为 192.168.1.254

[R1]ip route-static 0.0.0.0 0 192.168.1.254 # R1配置默认路由(网关)

1.2 R2为出口路由器,分别连接内网R1及外网R3

1)R2 内网接口IP:192.168.1.254

2)R2 外网接口IP:100.1.1.10

2)R2 NAT地址为:100.1.1.11-100.1.1.14

二、静态NAT配置

1.1 静态NAT(一对一双向)

R2 配置静态NAT, 将公网IP100.1.1.11 映射到内网R1 192.168.1.10

[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]nat static global 100.1.1.11 inside 192.168.1.10

1.2 静态NAT端口映射 (目的NAT,指定公网访问内网服务器的IP及端口)

R2配置静态NAT ,将公网IP 100.1.1.11 的10010端口,映射到内网IP192.168.1.10的 telnet端口

[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]nat static protocol tcp global 100.1.1.11  10010 inside 192.168.1.10 telnet

1.3 静态NAT 是一对一映射, 单一的将内网IP与公网IP进行转换,所以不能节约公网IP

三、动态NAT地址池

3.1 R2 创建一个动态NAT地址池,范围:100.1.1.12-100.1.1.14,实现与内网的动态映射

[R2]nat address-group 1 100.1.1.12 100.1.1.14 
[R2]acl 2000
[R2-acl-basic-2000]rule 0 permit source 192.168.1.0 0.0.0.255  
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]nat outbound 2000 address-group 1
[R2-GigabitEthernet0/0/1]nat outbound 2000 address-group 1 no-pat #no-pat 表示不启用端口复用

3.2 与静态NAT类似,动态NAT,是将地址池中的公网IP与内网IP一对一随机映射,默认开启端口复用。使用no-pat 关闭

四、使用外网接口地址做端口复用(常用)

4.1 R2使用出接口IP做NAT,将内网所有的地址,通过NAT转换后上网,是目前主流配置方法,可节约公网IP地址

[R2]acl 2001
[R2-acl-basic-2001]rule 0 permit source 192.168.1.0 0.0.0.255  #匹配的内网网段,多个网段写多条
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]nat outbound 2001

五、查看NAT

[R2]dis nat static          #查看静态NAT
[R2]dis nat address-group   #查看NAT地址池
[R2]dis nat session all     #查看NAT会话信息

有关华为静态NAT、动态NAT、PAT端口复用的更多相关文章

  1. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  2. 华为常用命令 - 2

    system-view进入系统视图quit退到系统视图sysname交换机命名vlan20创建vlan(进入vlan20)displayvlan显示vlanundovlan20删除vlan20displayvlan20显示vlan里的端口20Interfacee1/0/24进入端口24portlink-typeaccessvlan20把当前端口放入vlan20undoporte1/0/10删除当前VLAN端口10displaycurrent-configuration显示当前配置02配置交换机支持TELNETinterfacevlan1进入VLAN1ipaddress192.168.3.100

  3. ruby - 在 Ruby 中动态创建数组 - 2

    有没有办法在Ruby中动态创建数组?例如,假设我想遍历用户输入的书籍数组:books=gets.chomp用户输入:"TheGreatGatsby,CrimeandPunishment,Dracula,Fahrenheit451,PrideandPrejudice,SenseandSensibility,Slaughterhouse-Five,TheAdventuresofHuckleberryFinn"我把它变成一个数组:books_array=books.split(",")现在,对于用户输入的每一本书,我想用Ruby创建一个数组。伪代码来做到这一点:x=0books_array.

  4. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

  5. ruby-on-rails - carrierwave:在序列化动态属性上安装 uploader - 2

    首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟

  6. ruby - 在 Ruby 中动态生成多维数组 - 2

    我正在尝试动态构建一个多维数组。我想要的基本上是这样的(为简单起见写出来):b=0test=[[]]test[b]这给了我错误:NoMethodError:undefinedmethod`test=[[],[],[]]而且它工作正常,但在我的实际使用中,我不会事先知道需要多少个数组。有一个更好的方法吗?谢谢 最佳答案 不需要像您正在使用的索引变量。只需将每个数组附加到您的test数组:irb>test=[]=>[]irb>test[["a","b","c"]]irb>test[["a","b","c"],["d","e","f"]]

  7. ruby-on-rails - 使用 gmaps4rails 动态加载谷歌地图标记 - 2

    如何只加载map边界内的标记gmaps4rails?当然,在平移和/或缩放后加载新的。与此直接相关的是,如何获取map的当前边界和缩放级别? 最佳答案 我是这样做的,我只在用户完成平移或缩放后替换标记,如果您需要不同的行为,请使用不同的事件监听器:在你看来(index.html.erb):{"zoom"=>15,"auto_adjust"=>false,"detect_location"=>true,"center_on_user"=>true}},false,true)%>在View的底部添加:functiongmaps4rail

  8. ruby - 动态方法链? - 2

    如何在对象上调用方法名称的嵌套哈希?例如,给定以下哈希:hash={:a=>{:b=>{:c=>:d}}}我想创建一个方法,给定上面的散列,执行以下操作:object.send(:a).send(:b).send(:c).send(:d)我的想法是我需要从一个未知的关联中获取一个特定的属性(这个方法不知道,但程序员知道)。我希望能够指定一个方法链来以嵌套哈希的形式检索该属性。例如:hash={:manufacturer=>{:addresses=>{:first=>:postal_code}}}car.execute_method_hash(hash)=>90210

  9. ruby - 如何使用 method_missing 动态声明方法? - 2

    我有一个ruby​​程序,我想接受用户创建的方法,并使用该名称创建一个新方法。我试过这个:defmethod_missing(meth,*args,&block)name=meth.to_sclass我收到以下错误:`define_method':interningemptystring(ArgumentError)in'method_missing'有什么想法吗?谢谢。编辑:我以不同的方式让它工作,但我仍然很好奇如何以这种方式做到这一点。这是我的代码:defmethod_missing(meth,*args,&block)Adder.class_evaldodefine_method

  10. ruby - 动态扩展现有方法或覆盖 ruby​​ 中的发送方法 - 2

    假设我们有A、B、C类。Adefself.inherited(sub)#metaprogramminggoeshere#takeclassthathasjustinheritedclassA#andforfooclassesinjectprepare_foo()as#firstlineofmethodthenrunrestofthecodeenddefprepare_foo#=>prepare_foo()neededhere#somecodeendendBprepare_foo()neededhere#somecodeendend如您所见,我正在尝试将foo_prepare()调用注入

随机推荐