NAT
我们知道,一般在公司内部都使用私有地址进行通信。但由于私有地址只能在局域网中传输,如果想要外网上传输就需要公有地址。通常来说采用如下的架构,在出口路由器上配置一个公有 IP 和 ISP 的入口相连。
如果公司内部的设备想要和外网进行通信,就通过 R1 将私有 IP 转换成公有 IP 进行访问。这个转换的技术就称为 NAT - 网络地址转换,让内部的网络共享一个或多个公网地址继续访问。
NAT 解决的问题:
- IPV4 地址不够的问题
- 私有地址不能在公网上传输的问题
NAT 类型
Static NAT:一对一地址转换,一个私有对一个公有
Dynamic NAT:多对多地址转换,一组私有对一组公有
PAT:多对一地址转换,一组私有对一个公有
NAT 通信过程
Local 地址:转换前的私有地址
Global 地址:转换后的公有地址
如果以出口路由器为视角,和内部相连的称为 Inside 区域,和 ISP 相连称为 Outside 区域。则目前看共有四个 IP:
类型 | 描述 |
---|---|
Inside Local | 内部转换前的私有地址 |
Outside Local | 想要去往的公有地址 |
Inside Global | 内部转换后的公有地址 |
Outside Global | 想要去往的公有地址 |
初始方向:是将Inside Local 转换为 Inside Global 地址。
回来方向:将 Inside Global 装换为 Inside Local.
转换方式:
Inside Local -> Inside Global: 从内部到外部,
ip nat inside source
Inside Global -> Inside Local: 从外部到内部,
ip nat inside destination
Outside global -> Outside local: 一般用到同网段的合并
ip nat outside source
入接口过程:
- 先检查 ACL
- 查路由表
- NAT 转换
- 查路由表(将 Outside Global 转换成 Outside Local,会有该步骤)
出接口过程:
- 先检查 ACL
- 查 NAT
- 查 路由表
NAT 的 Trade-off
优点:
- 保留了公网地址
- 保持了网络通信的一致性
- 提供了安全性(因为在公网视角,并不知道公司局域网内部的 NAT 转换前的地址)
缺点:
- 缺失了端到端的连接
- 端到端的跟踪丢失
- 隧道技术变得更难配置
- TCP 内部可能中断(校验和可能不通过)
- 降低设备性能
NAT 配置
配置流程:
- 确定 inside 和 outside
- 确定 inside local 地址
- 确定 outside global 地址
- 配置
实现效果:
R1 表示内网,有 192.168.1.0 和 2.0 网段,配置默认路由将其数据包发给 R2.
R2 上开启静态路由到 192.168.1.0 和 2.0 网段,模拟内网情况。另外开启 EIGRP 表示和外网通信,注意这里仅仅开始 e0/1 23.1.1.0 所在网络。
R3 表示外网,配置 3.3.3.0 和 23.1.1.0 网络,纳入 EIGRP.
目前看 R1 ping 3.3.3.3 网络并不能通信(因为在 R3 没有去往 192.168.1.0 和 2.0 的路由),但可在 R2 上配置 NAT 进行转换。
Static 配置:
# R1
interface Loopback0
ip address 192.168.1.1 255.255.255.0
!
interface Loopback1
ip address 192.168.2.1 255.255.255.0
!
interface Ethernet0/0
ip address 12.1.1.1 255.255.255.0
# 默认路由
ip route 0.0.0.0 0.0.0.0 12.1.1.2
# R2
# 给公网网段配置一个接口,用于 EIGRP 传递
interface Loopback0
ip address 2.2.2.2 255.255.255.0
!
interface Ethernet0/0
ip address 12.1.1.2 255.255.255.0
ip nat inside
!
interface Ethernet0/1
ip address 23.1.1.1 255.255.255.0
ip nat outside
!
router eigrp 100
network 2.2.2.0 0.0.0.255
network 23.1.1.0 0.0.0.255
!
ip nat inside source static 192.168.1.1 2.2.2.10
ip nat inside source static 192.168.2.1 2.2.2.20
ip route 192.168.1.0 255.255.255.0 12.1.1.1
ip route 192.168.2.0 255.255.255.0 12.1.1.1
!
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- 2.2.2.10 192.168.1.1 --- ---
--- 2.2.2.20 192.168.2.1 --- ---
# R3
!
interface Loopback0
ip address 3.3.3.3 255.255.255.0
!
interface Ethernet0/0
ip address 23.1.1.2 255.255.255.0
!
router eigrp 100
network 3.3.3.0 0.0.0.255
network 23.1.1.0 0.0.0.255
!
Dynamic 配置:
# R2
!
interface Ethernet0/0
ip address 12.1.1.2 255.255.255.0
ip nat inside
!
interface Ethernet0/1
ip address 23.1.1.1 255.255.255.0
ip nat outside
!
# 声明 local 范围
Router(config)#access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)#access-list 10 permit 192.168.2.0 0.0.0.255
# 声明外网地址范围
Router(config)#ip nat pool dynamic 2.2.2.1 2.2.2.254 netmask 255.255.255.0
# 应用 nat
Router(config)#ip nat inside source list 10 pool dynamic
Router(config)#end
Router#show ip nat translations
Pro Inside global Inside local Outside local Outside global
icmp 2.2.2.1:14 192.168.1.1:14 3.3.3.3:14 3.3.3.3:14
--- 2.2.2.1 192.168.1.1 ---
PAT 配置, 通过端口号区分:
# 声明 local 范围
Router(config)#access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)#access-list 10 permit 192.168.2.0 0.0.0.255
# 应用 nat
Router(config)#ip nat inside source list 10 interface ethernet 0/1 overload