没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
代理服务器操作手册
前言:
1.蓝色字体表示命令行命令,正式执行时不要复制前面的#号,#号只是提示应该使用 root 权
限操作
2.绿色字体表示注释,有时注释太多就不用绿色表示了
3.注意:本文档的所有操作请先在在测环境进行实践,请不要直接在真实的服务器中操作!
版权声明:
本文档以开源的形式发布,所有条款如下:
1. 无担保:作者不保证文档内容的准确无误,亦不承担由于使用此文档所导致的任何后果
2. 自由使用:任何人可以出于任何目的而自由地 阅读/链接/打印/转载/引用/再创作 此文档,无需任何附加条件
若您 阅读/链接/打印/转载/引用/再创作 本文档,则说明接受以上 2 个条款。
作者:李茂福
时间:2022-05-01
章 0、代理_端口转发_NAT_等概念
NAT 网络地址转换:这个概念最早用于路由器和防火墙等实体网络设备上,表示路由器/防
火墙设备将收到的某数据包的 ip 地址/传输层端口号进行修改,再走路由转发到目标主机。
NAT 最初只是指 network address 的转换,即 ip 地址,后来也可以修改传输层的端口号,涉
及到端口号的修改的操作也叫作 PAT(port address 转换),但我们仍习惯于把这二者的修
改统称为 NAT。 NAT 是分 2 个方向的,对源 ip:port 的修改叫作 sNAT(源地址转换),
对目标 ip:port 的修改叫作 dNAT(目的地址转换)
①sNAT (源 NAT)
*sNAT 是指客户端发来的数据报文是给 B 的,但在路由上经过了 A 设备,
*然后 A 对这个流量的源 ip:port 做了修改,改成了 A 的 ip:port,并且 A 记录了这个转换的映
射关系,
*B 收到数据后,响应的报文是发回给 A,因为从 B 那里看,数据的源 ip 是 A
*A 收到 B 发回的响应报文后,再根据 之前保存的映射关系,把响应报文的目的 ip:port 改
为 Client
*最后响应报文走路由层 发到 Client
②dNAT (目的 NAT、端口映射)
*dNAT 如果强调对 端口的修改,也可叫作 端口映射
*dNAT 是指客户端发来的数据报文是给 A 的,但 A 把目的 ip:port 改为了 B 的,并记录这个
转换的映射关系
*B 收到数据后,响应的报文是发给 Client 的,因为之前 A 并没有修改报文的源 ip:port,所
以从 B 那里看,报文就是从 Client 发来的。
*B 发回的响应报文经路由层转发,如果再经过 A 时,A 再根据之前保存的映射关系,把响
应报文的源 ip:port 改回 A 自己的
*响应报文再走路由层发到 Client
***注意,如果 B 发回的响应报文经路由转发后,不经过 A 设备,则源 ip:port 得不到修改,
这样即使 Client 收到了响应报文,Client 也不认这个报文,因为在 tcp 连接里,要求源 ip:port
和目的 ip:port 对得上,不然就不是同一个连接了。
③端口转发 (port-forward)
*端口转发是指客户端发来的数据报文是给 A 的,但 A 把源 ip:port 改为 A 的,同时也把目的
ip:port 改为 B 的,并记录这个映射关系
*B 收到数据后,响应的报文是发给 A 的,因为从 B 那里看,收到的报文源 ip:port 是 A 的
*A 收到响应报文后,再根据映射关系,修改响应报文的源 ip:port 为自己,目的 ip:port 为 Client,
*响应报文再走路由层发到 Client
***端口转发结合了 sNat 和 dNat,确保了 B 的响应报文一定发回给 A,这样就能根据映射关
系修改响应报文的 ip:port,使 Client 收到正确的报文
先来个小结吧:
以上三种情况(sNAT、dNAT、端口转发)都只是在路由层面上对数据包的 ip:port 进行修改,
并维护一个映射关系表,进行数据修改的设备 A 本身并不处理 tcp 连接的问题,关于 tcp 等
相关的事宜是由真正的 Client 和目标 B 来处理。A 设备上是要求开启路由转发的功能。A 的
操作系统里的普通进程并不和这些转发的数据打交道,比如转发的如果是 tcp 层的数据,则
在 A 的系统里用 netstat 命令看不到 tcp 连接情况
以上三种情况一般分别用于以下场景:
sNAT:用于家庭用户的出口网关,因为随着 ipv4 资源的耗尽,以及网民数量的增加,不可
能给每个用户分配一个公网 ip,所以给用户分配的是内网 ip,然后内网数据发往公网时,
要经过出口网关,这时出口网关就是上面例子中的 A 设备,把源 ip:port 进行修改,改
为 A 的公网 ip:port,使得数据能在公网中传输。
dNAT:处于内网的用户可能有一些服务器,要给公网上的用户提供服务,但他们没有公网
ip,或者只有少数几个公网 ip,所以得充分利用这些公网 ip 资源,对目标 ip:port 进行
修改,映射到内网的某服务器的某端口上,也就是访问同一外网 ip 的不同 port,映射
到不同的内网服务器上。
端口转发:适用于隐藏客户端或服务端的真实 ip,使用某个中介进行转发,以突破各方面对
ip 的限制。
根据报文的源 ip:port 及目标 ip:port 的修改情况 可分为 3 种情况:
1.只修改源 ip:port,即 sNAT 源地址转换,其中 ip:port 可以只改 ip,也必须改 ip
响应报文一定原路返回
2.只修改目标 ip:port,即 dNAT 目的地址转换,其中 ip:port 可以只改其一,必改其一
目标的响应报文不一定原路返回,所以 Client 那边会得不到正确的响应,因为报文如果
不经过中间的 A(修改报文 ip:port 的始作俑者),则返回时的报文 ip:port 得不到修改,
所以 client 认为此响应报文不是正确的,所以要确保响应报文在路由上能经过 A
3.修改源 ip:port 以及修改目标 ip:port,即端口转发,源中的 ip:port 可以只改 ip,也必改 ip
目标 ip:port 可以只改其一,即改 ip 或 port 都行,必改其一
响应报文一定原路返回
④端口代理 (port-proxy)
端口代理的用途同端口转发,但实现原理不同
*Client 访问 A 的某 TCP 端口,建立了 tcp 连接,然后 A 再和 B 建立 tcp 连接,这 2 个连接也
是做了映射关系的记录的
*Client 向 A 发送的 tcp 载荷数据,由 A 再发给 B
*B 响应的数据是发给 A 的,A 收到后再把响应数据发给 Client
和端口转发不同的是:
*端口代理时 A 转发的只有载荷数据,不包括 tcp 的控制消息,比如建立连接,维持连接和
关闭连接的 相应控制报文。即在 A 上要监听某个 tcp 端口,要向系统的 tcp/ip 协议
栈请求端口资源,收到 client 的报文后,并不修改其源/目的 ip:port,而是另外再去
和 B 建立 tcp 连接。
*client 和 A 之间的 tcp 连接 并不影响 A 和 B 之间的 tcp 连接。即使 Client 和 A 的连接中断
了,A 和 B 之间也有可能仍在连接。
*也就是说 A 上面要有运行某个普通的进程去监听要转发的端口,当此端口有客户端连接时,
再启用某本地端口和 B 建立一个 tcp 连接。
当有多个客户端和 A 的监听的端口连接时,A 就要和 B 建立多个 tcp 连接
*与端口转发相比,端口代理的开销较大,对 A 的系统本身的资源有一定影响
Linux 上一般是在防火墙进程里启用端口转发(port-forward),系统本身不用监听要转发的
tcp 端口,不处理 tcp 连接的事情,用 netstat 命令看不到监听端口,系统的防火墙也不
用再另外允许此端口入站,因为它只是过路包,不入站
Windows 上一般是在系统里使用 svchost.exe 进行端口代理(portProxy),系统要监听 要代
理的 tcp 端口,处理 tcp 连接的相关事宜,用 netstat 命令可见监听的端口,系统的防火
墙要另外指明允许此端口入站
http(s)/socks 代理(一般指浏览器/web 服务器的代理),分 2 种方向:
⑤正向代理:
*Client 访问的目标不管是谁(只要符合走代理的规则),就统统把流量发给代理服务器,
让 代理帮 Client 去访问目标服务器,
*Client 到代理之间的(http(s)/tcp/udp)流量是封装在代理协议层之上的,也就是说套了一
层代理协议的壳,
*Client 知道自己是把流量发给了代理服务器
*代理服务器收到流量后,再解开这个壳,得到(http(s)/tcp/udp)流量,再根据此流量里的
相关信息(如域名)去找目标服务器的 ip,最后代理再把流量发给目标服务器。
*目标服务器响应的报文是发给代理服务器,
*代理收到响应报文后再根据映射关系,把响应报文里的数据发给 Client
⑥反向代理:
*Client 就正常访问目标服务器 B,Client 并不知道自己访问的是代理,
*结果 B 是一个反向代理服务器(比如 Nginx)它把收到的 client 发来的流量再进行某些修改
(修改 Http 的报头字段,当然也可不修改),再把数据发给后面的真实服务器
*后面的真实服务器的响应报文是发给反向代理,
*反向代理收到响应报文后再根据映射关系,修改某些字段,
*最后把响应报文里的数据发给 Client
关于 http/https/socks 的代理,代理服务器 A 不仅要处理 tcp 的相关事宜,还可能要处理高
层协议的事情,比如 http 层的报文过滤,报头修改等,当然有时域名的解析也是由代理服
务器去做的。
小结:
以上几种情况,凡是带有“代理”2 个字的,都是要由代理服务器/进程(即 A 设备)去处
理 tcp 连接相关的事情,client 和 A 的 tcp 连接建立后,A 再和目标 B 建立连接,然后将这 2
个连接做个映射关系,在这 2 个连接里传输载荷数据,当然,这个载荷数据也可能会被 A
修改某些字段。若某个连接断开了,A 会尽快断开另一连接。
章一、HaProxy(反向代理 https,tcp)
HAproxy 软件常应用于反向代理场景。仅支持 http(s)和 tcp,无缓存,不支持 udp。
可直接 yum 安装 haproxy 软件包
# yum install haproxy
# systemctl enable haproxy
# systemctl start haproxy
★HAProxy 的主配置文件为/etc/haproxy/haproxy.cfg ,默认内容如下:
global
log 127.0.0.1 local2 #定义 haproxy 日志输出设置,1~7
chroot /var/lib/haproxy #修改 haproxy 的工作目录至指定的目录并在放弃权
限之前执行 chroot()操作,可以提升 haproxy 的安全级别
pidfile /var/run/haproxy.pid
maxconn 4000 #最大连接数
user haproxy
group haproxy
daemon #让 haproxy 以守护进程的方式工作于后台
stats socket /var/lib/haproxy/stats #定义统计信息保存位置
nbproc 1 #设置启动服务时可创建的进程数,应小于等于 cpu 核数
defaults
mode http #代理类型(7 层代理 http,4 层代理 tcp)
log global #引入 global 定义的日志格式
option httplog #日志类别为 http 日志格式
option dontlognull #如果产生了一个空连接,则此连接的日志将不会记录
option http-server-close #打开 http 协议中服务器端关闭功能,使得支持长连接,
使得会话可以被重用,使得每一个日志记录都会被记录
option forwardfor except 127.0.0.0/8 #haproxy 会把客户端的 IP 信息发送给后
端服务器,在 HTTP 请求中添加 X-Forwarded-For 字段
option redispatch #当与后端服务器的会话失败时,把会话重新分发到其他健康
的服务器上,当原来故障的服务器恢复时,会话又被定向到已恢复的服务器上
retries 3 #3 次连接失败就认为服务器不可用
timeout http-request 10s #超时设置
timeout queue 1m
timeout connect 10s #haproxy 与后端服务器连接超时时间
timeout client 1m #客户端与 haproxy 连接后,数据传输完毕,不再有数
据传输,即非活动连接的超时时间
timeout server 1m #haproxy 与后端服务器非活动连接的超时时间
timeout http-keep-alive 10s
timeout check 10s #健康检测的时间的最大超时时间
maxconn 3000 #最大并发连接数
#以下为默认的一个示例,正式使用时可删除
frontend main *:5000 #定义一个名为 main 的前端监听器,监听所有 ip 的 5000 端口
剩余58页未读,继续阅读
阿汝娜老师
- 粉丝: 32
- 资源: 309
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (已测试)WordPress企业主题:企业一号 V 1.2.2商业版
- 德普微一级代理 DP3246 QSOP-24/QFN-24 16通道恒流源驱动IC
- SHT30温湿度传感器STM32 IIC程序源码
- 基于java+ssm+mysql+微信小程序的微信阅读小程序 源码+数据库(高分毕业设计).zip
- 基于java+ssm+mysql+微信小程序的图书馆座位再利用系统 源码+数据库(高分毕业设计).zip
- 经管类国自然、国社科立项名单+部分标书1991-2024年-最新出炉.zip
- 德普微一级代理 DP028N12BGN/DP028N12PGN TO-263/TO-220 DPMOS N-MOSFET 120V 180A 2.5mΩ
- 基于java+ssm+mysql+微信小程序的项目申报小程序 源码+数据库+论文(高分毕业设计).zip
- 德普微一级代理 DP900N10DTL TO-252 DPMOS N-MOSFET 100V 16A 83mΩ
- 基于nodejs+mysql+微信小程序的校园兼职系统 源码+数据库(高分毕业设计).zip
- 国密算法sm4加密解密
- 教学创新大赛实施报告图复刻-可编辑修改-2024年最新出炉.zip
- html+css+js网页设计 美食 桂林美食4个页面
- 基于Spring boot+Mybatis+Mysql的登录界面
- 麦克纳姆轮agv小车sw17可编辑全套技术资料100%好用.zip
- 全国教学创新大赛、青教赛、教学能力比赛资料大全-最新出炉.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0