10 NAT网络地址转换

广域网技术

上面聊的内容都是内网的一些配置,但内网终将要访问外网的,我们需要怎么处理呢?一般使用HDLC(高级数据链路控制协议)或者PPP(点对点协议)。

image-20231223200049834.png

使用PPP安全接入Internet

PPP(Point-to-Point Protocol 的缩写)点到点协议,提供在点到点链路上传输、封装网络层数据包的数据链路层协议。

PPP 协议支持同步、异步线路,能够提供验证,可以验证对端设备的合法性,在一定程度上保证链路的安全;支持网络层地址协调,支持 IP 地址的远程分配,能满足拨号线路的需求,无重传机制,网络开销小,并且易于扩展。

会话建立流程为:

image-20231223200503927.png

其中PAP和CHAP是两种认证协议

1.PAP:密码认证协议

image-20231223200704245.png

2.CHAP:竞争握手认证协议

image-20231223200730067.png

PPP+PAP的配置方案如下:

  1. PAP设置用户名、密码和服务类型
[RT1]local-user name
[RT1-user-name]password { cipher | simple } 密码
[RT1-user-name]service-type ppp
  1. 封装PPP协议
[RT1-S1/0]link-protocol PPP
  1. 配置认证方式
[RT1-s1/0]ppp authentication-mode { pap | chap }
  1. 被认证端详主认证端发送认证信息
[RT2-S1/0]ppp pap local-user name password { cipher | simple } 密码

image-20231223201633008.png

实战

image-20231223210727731.png

我们先配置一下PC的IP和路由器的接口IP,现在PC1是ping不同PC2的。

[RT1]int g0/0
[RT1-GigabitEthernet0/0]ip add 10.110.10.1 24
[RT1-GigabitEthernet0/0]quit
[RT1]int s1/0
[RT1-Serial1/0]ip add 211.16.12.1 24
[RT1-Serial1/0]quit

[RT2]int g0/0
[RT2-GigabitEthernet0/0]ip addr 211.16.3.1 24
[RT2-GigabitEthernet0/0]quit
[RT2]int s1/0
[RT2-Serial1/0]ip addr 211.16.12.2 24
[RT2-Serial1/0]quit

路由器配置OSPF

[RT1]router id 1.1.1.1
[RT1]ospf 1
[RT1-ospf-1]area 0
[RT1-ospf-1-area-0.0.0.0]network 10.110.10.0 0.0.0.255
[RT1-ospf-1-area-0.0.0.0]network 211.16.12.0 0.0.0.255
[RT1-ospf-1-area-0.0.0.0]quit

[RT2]router id 2.2.2.2
[RT2]ospf 1
[RT2-ospf-1]area 0
[RT2-ospf-1-area-0.0.0.0]network 211.16.12.0 0.0.0.255
[RT2-ospf-1-area-0.0.0.0]%Dec 23 21:18:42:480 2023 RT2 OSPF/5/OSPF_NBR_CHG: OSPF 1 Neighbor 211.16.12.1(Serial1/0) changed from LOADING to FULL.

[RT2-ospf-1-area-0.0.0.0]network 211.16.3.0 0.0.0.255
[RT2-ospf-1-area-0.0.0.0]quit

现在PC1能够Ping通PC2,主要是因为路由表里有数据了。

[RT1]dis ip routing-table

Destinations : 15       Routes : 15

Destination/Mask   Proto   Pre Cost        NextHop         Interface
0.0.0.0/32         Direct  0   0           127.0.0.1       InLoop0
10.110.10.0/24     Direct  0   0           10.110.10.1     GE0/0
10.110.10.1/32     Direct  0   0           127.0.0.1       InLoop0
10.110.10.255/32   Direct  0   0           10.110.10.1     GE0/0
127.0.0.0/8        Direct  0   0           127.0.0.1       InLoop0
127.0.0.1/32       Direct  0   0           127.0.0.1       InLoop0
127.255.255.255/32 Direct  0   0           127.0.0.1       InLoop0
211.16.3.0/24      O_INTRA 10  1563        211.16.12.2     Ser1/0
211.16.12.0/24     Direct  0   0           211.16.12.1     Ser1/0
211.16.12.1/32     Direct  0   0           127.0.0.1       InLoop0
211.16.12.2/32     Direct  0   0           211.16.12.2     Ser1/0
211.16.12.255/32   Direct  0   0           211.16.12.1     Ser1/0
224.0.0.0/4        Direct  0   0           0.0.0.0         NULL0
224.0.0.0/24       Direct  0   0           0.0.0.0         NULL0
255.255.255.255/32 Direct  0   0           127.0.0.1       InLoop0

配置PAP

[RT2]local-user RT1 class network
New local user added.
[RT2-luser-network-RT1]password simple 1234Abcd1234
[RT2-luser-network-RT1]service-type ppp

配置PPP协议

[RT2-Serial1/0]link-protocol ppp
[RT2-Serial1/0]ppp authentication-mode pap
[RT2-Serial1/0]quit

被验证方配置

[RT1-Serial1/0]link-protocol ppp
[RT1-Serial1/0]ppp pap local-user RT1 password simple 1234Abcd1234

NAT

概述

NAT是一种将私有地址转换成公有地址的技术,它实现了私有网络中主机可以通过共享少量公有地址访问Internet。

从内部网络到外部网络的实现流程为:

image-20231223121839909.png

请求从外部网络返回到内部网络的实现流程为:

image-20231223121946237.png

当然,上面的实现只是其中一种,但核心过程都差不多。NAT的实现方式有

  • Basic NAT:一对一转换,一个内部IP对应一个外部IP
  • NAPT(网络地址端口转换):一对多转换,一个外部IP可对应多个内部IP

image-20231223124327974.png

  • NAT Server(内部服务器):内部提供服务供外网访问

Basic NAT

Basic NAT实现一对一的转换,同时访问外网的主机数受地址池中共有地址数限制。

假设只允许市场部访问外网。

image-20231223130855063.png

配置方案一般分为如下几步:

1.配置ACL,哪些私有地址可以访问外网

[RT1]acl number 2000
[RT1-acl-basic-2000]rule permit source 10.110.10.0 0.0.0.255
[RT1-acl-basic-2000]rule deny source any

2.配置可使用的公网地址

nat address-group pool-index start-addr end-addr

[RT1]nat address-group pool1 211.35.77.1 211.35.77.5

3.在出口将ACL与地址池关联

nat outbound acl-number address-group pool-index no-pat

[RT1]interface S0/1/0
[RT1-Serial0/1/0]nat outbound 2000 address-group pool1 no-pat

4.查看效果

display nat session

NAPT

Basic NAT因为是一对一转换,所以同一时刻访问外网的主机数有限。

而NAPT借助端口复用技术,通过对数据包的 IP 地址、协议类型和传输层端口号同时进行转换,极大地提高了公有 IP 地址的利用效率。

下图比较清晰的展示了NAPT的实现原理,10.0.0.1的请求经过转换后的信息。

image-20231223131827908.png

在配置上和Basic NAT没有太大区别,出口配置的时候,不填写no-pat

nat outbound acl-number address-group pool-index 

[RT1]interface S0/1/0
[RT1-Serial0/1/0]nat outbound 2000 address-group pool1

Easy IP - NAPT特例

在实际应用中,常用的拨号接入的上网方式,公网 IP 地址是运营商动态分配的,无法提前获知,又该如何使用 NAPT 进行转换?解决这个问题,要引入 Easy IP 特性。Easy IP 直接使用与公网连接的接口 IP 地址作为转换后的地址。本质上省掉了“配置可使用的公网地址”这步。

image-20231223132502259.png

1.配置允许NAT转换的内网地址段

[RT1]acl number 2000
[RT1-acl-basic-2000]rule permit source 10.110.10.0 0.0.0.255

2.在出接口S0/1/0上做Easy IP

[RT1]interface S0/1/0
[RT1-Serial0/1/0]ip address 211.35.77.1 255.255.255.0
[RT1-Serial0/1/0]nat outbound 2000

3.查看

[RT1]display nat bound

NAT Server

NAT Server是解决外网主机首先发起链接,如何进行地址转换的问题。它能将私有地址和端口静态的映射为公网地址和端口,供公网用户访问服务器。

image-20231223171503933.png

配置过程

1.接口视图下配置内部服务器

interface interface-type interface-number
nat server protocol pro-type global golbal-address [global-port] inside local-address [local-port]

//举例,202.38.1.1为对外提供服务的IP地址
nat server protocol tcp global 202.38.1.1 80 inside 10.110.10.1 www

2.查看配置

display nat server

实战

这次主要配置NAPT,我们在刚配置的架构图上做修改。

image-20231223215230215.png

[RT2]undo ospf
[RT1]undo ospf
[RT1]ip route-static 0.0.0.0 0.0.0.0 s1/0

[RT1]acl number 2000
[RT1-acl-ipv4-basic-2000]rule permit source 10.110.10.0 0.0.0.255
[RT1-acl-ipv4-basic-2000]quit


[RT1]nat address-group 1
[RT1-address-group-1]address 211.16.12.10 211.16.12.20
[RT1-address-group-1]quit

[RT1]int s1/0
[RT1-Serial1/0]nat outbou
[RT1-Serial1/0]nat outbound 2000 address-group 1
[RT1-Serial1/0]quit

查看效果

[RT1-Serial1/0]dis nat session brief
Slot 0:
Protocol   Source IP/port         Destination IP/port    Global IP/port
ICMP       10.110.10.2/207        211.16.3.2/2048        211.16.12.11/0

Total sessions found: 1

总结

总算能上网了,但是吧,感觉哪里不太对,还是得真的申请一个固定IP,然后用真机测试一下。后面会把防火墙的配置再学习一下,然后以小公司的网络配置设计一个架构图,用真机进行配置。另外也会把交换机、路由器常用的命令梳理好,方便自己也方便大家查找。

最后

大家如果喜欢我的文章,可以关注我的公众号(程序员麻辣烫)

我的个人博客为:https://shidawuhen.github.io/

往期文章回顾:

  1. 设计模式
  2. 招聘
  3. 思考
  4. 存储
  5. 算法系列
  6. 读书笔记
  7. 小工具
  8. 架构
  9. 网络
  10. Go语言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/267687.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Podman配置mongodb

文章目录 查询镜像拉取镜像查看镜像运行容器创建root用户 查询镜像 podman search mongo拉取镜像 podman pull docker.io/library/mongo查看镜像 podman images运行容器 podman run -d -p 27017:27017 --namemongodb-test docker.io/library/mongo创建root用户 podman exe…

详解现实世界资产(RWAs)

区块链中的现实世界资产(RWAs)是代表实际和传统金融资产的数字通证,如货币、大宗商品、股票和债券。 实际世界资产(RWA)的通证化是区块链行业中最大的市场机会之一,潜在市场规模可达数万万亿美元。理论上&…

12章总结

一.集合类概述 java.util包中提供了一些集合类,这些集合类又被称为容器。 集合类与数组的不同之处: 数组的长度是固定的,集合的长度是可变的:数组用来存放基本类型的数据,集合用来存放对象的引用。 常…

windows下使用vccode+cmake编译cuda程序

1、在vscode中安装Nsight Visual Studio Code Edition 在vscode中安装插件能够对cuda的代码进行语法检查 2、编写cuda程序 #include <iostream>__global__ void mykernelfunc(){}; int main() {mykernelfunc<<<1,1>>>();std::cout << "hel…

C++ 比 C语言增加的新特性 2

1.C新增了带默认值参数的函数 1.1 格式 格式&#xff1a;返回值 函数名&#xff08;参数1初始值1&#xff0c;..........&#xff09;{} 例如&#xff1a;void function&#xff08;int a10&#xff09;{} 调用&#xff1a;不需要更改参数的值&#xff1a;function&#x…

Kubernetes 学习总结(40)—— Kubernetes 之 自动伸缩 HPA、VPA、CA和CPA详解

前言 Kubernetes 提供了多种自动伸缩机制&#xff0c;例如 HPA&#xff08;Horizontal Pod Autoscaling&#xff09;&#xff0c;可以根据不同情况动态调整 Pod 副本数量。此功能使 Pod 能够有效地处理当前流量&#xff0c;而无需管理员不断干预来调整副本数量。除了 HPA 之外…

每日一题——LeetCode160.相交链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1&#xff1a;示例2&#xff1a;提示&#xff1a; 2. 思路3. 代码 1. 题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的…

HarmonyOs4.0基础(一)

目录 一、HarmonyOs系统定义 1.1系统的技术特性(三大特征) 1.1.1、硬件互助、资源共享 1.1.2、一次开发、多端部署(面向开发者) 1.1.3、统一OS&#xff0c;弹性部署(支持多种API&#xff1a;ArkTs、JS、C/C、Java) 1.2、系统的技术架构 二、Harmony OS项目搭建 2.1、(D…

Github 2023-12-24 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-24统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5Jupyter Notebook项目2C项目1C项目1Go项目1Java项目1JavaScript项目1Ruby项目1 Serverless Frame…

【零基础入门Docker】如何构建Web服务Dockerfile?

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门Docker专栏https://blog.csdn.net/arthas777/category_12455882.html 目录 步骤1&#xff1a;第一步是构建我们的Docker文件&#xff0c;您可以使用vim编辑器。 步骤2&#xff1a;下一步是使用docker build命令…

【Python机器学习系列】一文搞懂机器学习中的转换器和估计器(附案例)

一、引言 表格数据一套完整的机器学习建模流程如下&#xff1a; 在机器学习中&#xff0c;转换器&#xff08;Transformer&#xff09;和估计器&#xff08;Estimator&#xff09;是两个重要的概念&#xff0c;转换器和估计器在机器学习中扮演不同的角色&#xff0c;但它们通常…

【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision

时间&#xff1a;2019 年 级别&#xff1a;SCI 机构&#xff1a;南京信息工程大学 摘要 随着多媒体呈现技术、图像采集技术和互联网行业的发展&#xff0c;远程通信的方式已经从以前的书信、音频转变为现在的音频/视频。和 视频在工作、学习和娱乐中的比例不断提高&#xff0…

Python如何将图片转换成字符

PIL(Python Image Library)库是Python平台上一个功能强大的图像处理标准库&#xff0c;支持图像的存储、显示和处理&#xff0c;几乎可以处理所有图片格式&#xff0c;如图像的压缩、裁剪、叠加、添加文字等等。 安装PIL库:pip install pillow from PIL import Image ascii_cha…

35c3 krautflare

参考这篇文章可以彻底了解本题的漏洞所在 https://xz.aliyun.com/t/6527 由于Math.expm1经过patch以后的返回值不可能是-0&#xff0c;但是patch的地方是在typer优化中&#xff0c;所以实际上如果没有优化的话是可以返回-0的&#xff0c;这就意味着如果我们先不停地Math.expm1…

手机技巧:安卓微信8.0.45测试版功能来了

目录 一、更新介绍 二、本次功能更新介绍 2.1 小程序界面优化 2.2 小程序个性化推荐支持关闭 三、其他实用的微信使用长按小技巧 3.1、长按对话框 3.2、长按搜索 3.3、长按相册 3.4、长按视频 3.5、长按表情包&#xff08;能开启2个技巧&#xff09; 3.6、长按音频文…

Linux——环境变量与本地变量

环境变量与本地变量 文章目录 环境变量与本地变量1. 环境变量1.1 命令行参数1.2 环境变量PATH1.3 环境变量的概念和相关操作1.3.1 用命令查看环境变量1.3.2 用命令添加环境变量&#xff1a;1.3.2 用命令删除环境变量1.3.3 利用代码查看环境变量1.3.4 利用代码修改或添加环境变量…

运行时和编译时使用的so库不同是否影响可执行文件执行

引子 近日遇到如下问题: 1.如果可执行文件依赖的so库在编译和执行阶段使用的名字一样&#xff0c;但是内容不一样&#xff0c;比如运行时相比于编译时在so库里增加了几个api定义&#xff0c;so库还可以正常使用吗&#xff1f; 2.如果可执行文件依赖的so库在编译和执行阶段使用的…

一文带你认识JVM

&#x1f697;&#x1f697;&#x1f697;今天给大家分享的关于JVM的一些基本认识。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; ✈️✈…

Lambda表达式超详解

目录 背景 Lambda表达式的用法 函数式接口 Lambda表达式的基本使用 语法精简 变量捕获 匿名内部类 匿名内部类中的变量捕获 Lambda的变量捕获 Lambda表达式在类集中的使用 Collection接口 List接口 Map接口 总结 背景 Lambda表达式是Java SE 8中的一个重要的新特性.…

cygwin64环境搭建

文章目录 cygwin64环境搭建概述为了编译GNU软件需要安装的组件如下当缺软件的时候, 可以用搜索功能END cygwin64环境搭建 概述 cygwin64主页 https://cygwin.com/ 用起来确实有用linux的感觉, 而且兼容性特别好. GNU的工程全部能编译过. 编译后的exe在win10上也运行的很正正…