Netscaler立身之本—NAT
Netscaler立身之本—NAT
http://blog.51cto.com/caojin/1926579
一、前言
ADC的主要作用是作为服务器的反向代理来进行应用发布的,介于客户端和服务器端之间,那么NAT就是它必然要面临的工作。归根结底,NAT就是ADC的数据转发立身之本。能否支持更多、更灵活、控制力更强的NAT转换就是衡量一个ADC是否合格的关键因素之一。这也对工程师提出了最基本的要求,如果连如何控制NAT都不清楚,那么遇到各种不同的场景就无法做出对应的方案。
二、什么是NAT
1.NAT简介
借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。
NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据都分别嵌入IP地址的应用程序就不能正常工作。
2.NAT实现方式
NAT的实现方式有三种,即静态转换Static Nat、动态转换Dynamic Nat 和 端口多路复用OverLoad。
静态转换是指将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
动态转换是指将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
端口多路复用(Port address Translation,PAT)是指改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation).采用端口多路复用方式。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,目前网络中应用最多的就是端口多路复用方式。
3.Netscaler的NAT
下面我们主要讨论netscaler的NAT是如何做的,哪些参数影响到netscaler的NAT动作。
影响netscaler做NAT的参数主要分为以下8类:
ü RNAT
ü INAT
ü IP mode
ü Netprofile
ü USIP
ü MAC mode
ü Service port=*
ü Service use proxy port
我们分别针对每个参数做测试和理解,以下是环境概述
实验环境:
Client ip:192.168.20.1
SNIP: 192.168.20.11
192.168.0.21
192.168.10.11
VIP: 172.16.10.10
172.16.10.11
10.10.1.2
Server ip: 192.168.0.50
10.10.1.1
三、影响NAT的参数测试
1.RNAT
客户端的网关是netscaler,但服务器没有客户端的回程路由
客户端直接访问服务器,网络不通

抓包情况:
因为服务器没有客户端192.168.20.1的回程路由,所以ICMP无响应

Netscaler上配置RNAT

客户端的地址由192.168.20.1被netscaler替换为192.168.10.11,遂可以访问服务器资源

抓包情况:

2.INAT
在netscaler上配置INAT策略,将10.10.1.2转换为192.168.0.50

Netscaler中没有建立10.10.1.2的vserver

抓包情况:
用户端192.168.20.1访问10.10.1.2被netscaler转换为192.168.0.21访问192.168.0.50.

用户成功打开页面,在INAT中也可以灵活控制源端口、源地址、目的端口等是否转换。
3.IP mode
IP mode的工作机制是默认同时做源地址和目的地址的替换,即相当于静态NAT

抓包情况:
用户端192.168.20.1访问172.16.10.10,被Netscaler替换为192.168.0.21访问192.168.0.50

4.Netprofile
建立两个Netprofile

将Netprofile_vs绑定到Vserver

抓包情况:
客户端192.168.20.1访问172.16.10.10被Netscaler替换为192.168.10.11访问192.168.0.50,源地址不是snip:192.168.0.21而是Netprofile_vs的地址192.168.10.11

将Netprofile_vs绑定到Vserver同时将Netprofile_service绑定到service
Vserver

Service

抓包情况:
客户端192.168.20.1访问172.16.10.10被Netscaler替换为192.168.10.22访问192.168.0.50,源地址而非Netprofile_vs中的192.168.10.11

通过Netprofile测试说明了Netprofile绑在service的优先级高于vserver
5.USIP
保留Netprofile在service上开启USIP,并将服务器的网关指向netscaler

抓包情况:
用户端192.168.20.1访问172.16.10.10,只有目的地址被Netscaler替换为192.168.0.50,源地址不变。

此项说明一旦启用USIP,netscaler所有基于源地址替换的操作全部禁用,不管是默认用SNIP轮训还是指定Netprofile都不生效。
6.MAC mode
MAC mode不做目的地址替换,必须是any的协议才能启用,主要用在LLB。
配置mac mode的VS、servicegroup、member



10.10.1.1是服务器的第二IP
抓包情况:
客户端192.168.20.1访问10.10.1.1,被netscaler替换源地址192.168.10.11后直接访问10.10.1.1,目的地址不做替换。


当然如果需要也可以控制是否做源地址、源端口、目的端口的替换。
7.Service port=*
服务器同时开启8000口的服务
建立两个service

http协议的8000口和TCP协议的any口
建立两个vserver

抓包情况:
用户端192.168.20.1带端口访问172.16.10.10:3000

被NS同时替换源IP+端口和目的IP+端口,源地址变为192.168.0.21:30748目的地址变为192.168.0.50:8000.

但如果用户访问的是any的Vserver话目的端口不会改变
抓包情况:
用户端192.168.20.1访问172.16.10.11:8000

被netscaler替换为192.168.0.21:40948访问192.168.0.50:8000

访问过程目的端口不会改变。
8.Proxy port
如果想源端口也不变需要去掉use proxy port选项,同时开启USIP

抓包情况:
用户端192.168.20.1:4503访问172.16.10.10:3000

被netscaler替换为192.168.20.1:4503访问192.168.0.50:8000,源地址和源端口不做替换

一、总结:
以上展示了可以控制netscaler NAT行为的所有参数,可知netscaler有非常丰富的参数来根据需要灵活控制NAT行为(对于INAT部分有另一篇文章做详细讨论)根据数通设备习惯的NAT术语,总结了netscaler各个参数对应的NAT类型。
|
项目 |
Netscaler默认情况 |
Netscaler可调整情况 |
|
RNAT |
动、静态SNAT |
动、静态PNAT |
|
INAT |
静态DNAT |
静态PNAT |
|
IP mode |
动、静态SNAT+DNAT |
动、静态PNAT |
|
Netprofile |
动、静态SNAT |
动、静态PNAT |
|
USIP |
静态SNAT |
静态PNAT |
|
MAC mode |
动态SNAT(固定目的IP) |
|
|
Service port=* |
目的端口不变PNAT |
|
|
Service use proxy port |
源端口不变PNAT |
动、静PNAT |
Netscaler立身之本—NAT的更多相关文章
- LVS简单实现NAT&DR模型
LVS:Linux Virtual Server 一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org. 现在LVS已经是Linux标准内核的一部分 ...
- NetScaler 10.1的配置以及结合StoreFront的部署
工作需要,所以英文+中文,绝壁不是装逼...(关于这点勿喷) This post will cover only the basics for getting NetScaler up and run ...
- SNMP OID Reference - NetScaler 10
SNMP OID Reference - NetScaler 10 https://docs.citrix.com/content/dam/docs/en-us/netscaler/10/downlo ...
- Netscaler的超高端口复用助力应对公网地址紧张
Netscaler的超高端口复用助力应对公网地址紧张 http://blog.51cto.com/caojin/1898351 经常会有人问一个IP只有65535(姑且不考虑预留端口),从Big-ip ...
- ns nat rule
ns nat rule NAT实现方式: NAT的实现方式有三种,即静态转换(Static Nat).动态转换(Dynamic Nat) 和 端口多路复用(OverLoad). 静态转换是指将内部网络 ...
- 浅谈iptables 入站 出站以及NAT实例
--------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...
- 解决VMWARE NAT SERVICE服务无法启动或服务消失的问题
解决VMWARE NAT SERVICE服务无法启动或服务消失的问题 2016-02-02 11:18 2012人阅读 评论(2) 收藏 举报 分类: 网络通信(3) 今日使用VMware中的Wi ...
- linux 做gw(nat)详细配置
linux 做企业网关gw(nat)详细配置 最近因为公司的路由器老化导致上网时断时续,上半小时网就断一次网,为此我头疼不已,本着为公司节约成本的宗旨, ...
- OpenStack三种类型的NAT转换
SNAT SNAT即源网络地址转换,这个NAT路由修改IP包包头中的源IP地址.SNAT功能通常用于让只具有私有IP地址的主机能够访问外网,比如,多个PC使用路由器共享上网,每个PC都配置了内网IP, ...
随机推荐
- 【mysql学习笔记整理】
/*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...
- flutter开发之配置环境以及一些问题的处理方案~
今天flutter1.0已经发布了,有没有一点小小的兴奋,为了纪念这个令人激动的日子,我决定发一篇flutter的基本环境搭建的教程送给大家:) 由于这是一篇关于flutter配置环境的教程, ...
- Flask之endpoint错误View function mapping is overwriting an existing endpoint function: ***
最近在学习Flask, 其中遇到了一个错误, 发现这个问题和Flask, 路由有关系, 所以就记了下来 错误代码: from flask import Flask, render_template, ...
- hive 学习系列二(数据库的创建删除修改) 拿走,不谢。
database 相当于一个目录或者命名空间,用来更好地进行表的管理 在hdfs 的目录位置大致如下: [root@iZbp12vtv76y9q3d633bh6Z /]# hadoop fs -ls ...
- Python学习之魔法方法
Python中会看到前后都加双下划线的函数名,例如 __init__(self),这类写法在Python中具有特殊的含义.如果对象使用了这类方法中的某一个,那么这个方法将会在特殊的情况下被执行,然而几 ...
- POJ2762 单向连通图(缩点+拓扑排序
Going from u to v or from v to u? Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 19552 ...
- 小程序开发-7-访问api数据与ES6在小程序中的应用
访问API数据与ES6在小程序中的应用 看待组件的两种观点 组件复用 代码分离-(特别重要) 不能在一个页面写所有的代码,代码分离具有很强的可读性.可维护性 Blink Api 介绍与测试API ur ...
- (数据科学学习手札33)基于Python的网络数据采集实战(1)
一.简介 前面两篇文章我们围绕利用Python进行网络数据采集铺垫了很多内容,但光说不练是不行的,于是乎,本篇就将基于笔者最近的一项数据需求进行一次网络数据采集的实战: 二.网易财经股票数据爬虫实战 ...
- Servlet生命周期与线程安全
上一篇介绍了Servlet初始化,以及如何处理HTTP请求,实际上在这两个过程中,都伴随着Servlet的生命周期,都是Servlet生命周期的一部分.同时,由于Tomcat容器默认是采用单实例多线程 ...
- ABAP CDS ON HANA-(5)テーブル結合ビュー
JOINs in CDS View In ABAP CDS, Join between two data sources is allowed. Allowed joins are:- Inner J ...