透明代理(NAT)

【网络】NAT、代理服务、内网穿透 NAT技术、NAT技术IP转换过程,什么是代理服务器?什么是内网穿透? 阅读详情

        透明代理的实现目前Linuxn内核提供两种实现的方式:NAT和TPROXY。Nat 方式其实就是内内核通过地址转换实现的;而 TPROXY 是内核通过对设置的数据包打标记,然后通过策略路由将打标记的数据包重定向到本地监听进程上。此次我们借助iptables的nat表的规则对数据包进行重定向。具体配置及步骤如下。

试验环境

          将试验环境的配置如下:

名称IP地址网关设置
客户端192.168.200.184192.168.200.111
代理服务器192.168.200.111192.168.200.1(内网真实网关IP)
服务器172.16.9.66

        环境网络结构图如下:

 试验步骤

        1、需要添加iptables规则,将经过代理服务器的数据包重定向到本地代理监听进程上去;具体添加规则命令如下:     

        1、在nat表上新建名为MY_TCP自定义链
                 iptables -t nat -N MY_TCP

        2、将MY_TCP加入到PREROUTING链后
                iptables -t nat -A PREROUTING -d 172.16.9.66 -j MY_TCP

        3、将特定数据包转到6666端口
                iptables -t nat -A MY_TCP -p tcp --dport 12345 -j REDIRECT --to-ports 2223

        2、试验过程的客户端跟服务器用TCP工具创建一个客户端跟服务端。透明代理端需写简单的服务端代码,代码如下:

#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/netfilter_ipv4.h>
#define PORT 2223		//端口号
#define BACKLOG 5	//最大监听数
 
int main()
{
	int iSocketFD = 0;  //socket句柄
	int iRecvLen = 0;   //接收成功后的返回值
	int new_fd = 0; 	//建立连接后的句柄
	char buf[4096] = {0}; //
	int n = 0;
	int ret = 0;
	struct sockaddr_in stLocalAddr = {0}; //本地地址信息结构图,下面有具体的属性赋值
	struct sockaddr_in stRemoteAddr = {0}; //对方地址信息
	socklen_t socklen = 0;  
 
	iSocketFD = socket(AF_INET, SOCK_STREAM, 0); //建立socket
	if(0 > iSocketFD)
	{
		printf("创建socket失败!\n");
		return 0;
	}	
 
	stLocalAddr.sin_family = AF_INET;  /*该属性表示接收本机或其他机器传输*/
	stLocalAddr.sin_port = htons(PORT); /*端口号*/
	stLocalAddr.sin_addr.s_addr=htonl(INADDR_ANY); /*IP,括号内容表示本机IP*/
 
	//绑定地址结构体和socket
	if(0 > bind(iSocketFD, (void *)&stLocalAddr, sizeof(stLocalAddr)))
	{
		printf("绑定失败!\n");
		return 0;
	}
 
	//开启监听 ,第二个参数是最大监听数
	if(0 > listen(iSocketFD, BACKLOG))
	{
		printf("监听失败!\n");
		return 0;
	}
 
	printf("iSocketFD: %d\n", iSocketFD);	
	//在这里阻塞知道接收到消息,参数分别是socket句柄,接收到的地址信息以及大小
	while(1)
	{
		new_fd = accept(iSocketFD, (void *)&stRemoteAddr, &socklen);
		printf("new_fd: %d\n", new_fd);	
		if(0 > new_fd)
		{
			printf("接收失败!\n");
			return 0;
		}else{
			printf("接收成功!\n");
			n = sizeof(struct sockaddr_in);
			ret = getsockopt(new_fd, SOL_IP, SO_ORIGINAL_DST, &stRemoteAddr, &n);
			if(0 != ret)
			{
				printf ("error getting original destination address.\n");
				close (new_fd);
				return -1;
			}
			stRemoteAddr.sin_family = AF_INET; 
			printf("original destination address %u:%hu\n", ntohl(stRemoteAddr.sin_addr.s_addr), ntohs(stRemoteAddr.sin_port));	
			//发送内容,参数分别是连接句柄,内容,大小,其他信息(设为0即可) 
			recv(new_fd, buf, sizeof(buf), 0);
			printf("从客户端上接收到的信息是:%s\n", buf);
			//send(new_fd, "这是代理服务器接收成功后发回的信息!", sizeof("这是代理服务器接收成功后发回的信息!"), 0);
 
			/* 连接服务器*/
			int iSockClientFD = 0;
			iSockClientFD = socket(AF_INET, SOCK_STREAM, 0);
			if(0 > iSockClientFD)					
			{
				printf("代理向服务器建立连接失败!\n");
				return 0;
			}
			if(0 > connect(iSockClientFD, (void *)&stRemoteAddr, sizeof(stRemoteAddr)))
			{
				printf("代理向服务器建立连接失败!\n");
				return 0;
			}
			send(iSockClientFD, buf, sizeof(buf), 0);//向服务器发送消息
			recv(iSockClientFD, buf, sizeof(buf), 0);//接收来自服务器的消息
			printf("从服务器端收到的消息:%s\n", buf);//打印接收到的来自服务器的消息
			send(new_fd, buf, sizeof(buf), 0);//向客户端发送消息		
			sleep(5);	
		}
	}
	close(new_fd);
	close(iSocketFD);
 
	return 0;
}

使用结果截图如下:

        1、代理服务器配置规则如下:

         2、客户端、服务器试验截图如下:

        3、代理服务器的代理监听程序打印如下:

使用 Pipy 和 eBPF 实现透明代理 这个透明代理示例虽然简单,但它有效地展示了 Pipy 与 eBPF 两种可编程技术的结合力量。尽管离实现理想中的透明代理存在差距——例如,目标服务器看到的是代理地址而非客户端的真实 IP,这一点对于需要记录真实客户 IP 的应用场景尤为关键——但通过 eBPF 技术,我们依然能够达成目标。具体做法是,利用 eBPF 程序调整 Pipy 转发的网络包中的源地址和端口,同时修改返回数据包中的目标地址和端口,以实现对目标服务器的透明性。 阅读详情

相关推荐

eNSP防火墙实战:DNS透明代理与多出口NAT策略部署

本文详细介绍了在eNSP环境中部署DNS透明代理与多出口NAT策略的实战方法,帮助企业优化网络架构,解决跨网延迟问题。通过智能DNS解析和策略路由联动,实现安全高效的网络访问,提升用户体验。重点涵盖运营商地址库配置、虚拟DNS服务器设置及NAT策略联动等关键技术要点。

weixin_30338481的博客 431

透明代理和不透明代理

总的来说,透明代理在网络层面上自动拦截和转发请求,对客户端是透明的,客户端无需配置代理信息。综上所述,透明代理之所以需要先连接到路由再到代理服务器,是因为它在网络层面上实现了透明转发的特性,通过与路由器协作来拦截并转发所有流量,让客户端无需额外的配置即可使用代理。相比之下,不透明代理需要客户端主动配置代理服务器的地址和端口,因此客户端需要明确指定请求的目标是通过代理服务器转发还是直接连接。透明代理的设计目标是在网络层面上实现透明的代理转发,让客户端无需额外的配置即可使用代理。

smallfatman的博客 5101

eNSP防火墙实战:构建DNS透明代理与多出口NAT策略

本文详细介绍了在eNSP环境中配置防火墙实现DNS透明代理与多出口NAT策略的实战方法。从实验环境搭建、基础网络配置到DNS透明代理实现,再到安全策略与NAT的协同设计,提供了完整的配置步骤和排错技巧,帮助网络工程师高效部署企业级防火墙解决方案。

weixin_42530732的博客 121

图解正向代理、反向代理、透明代理

一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。关于正向代理的概念如下:正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。如下图1.1(图1.1)从上面的概念中,我们看出,文中所谓的正向代理就是代理服务器替代访问方【用户

chenrui310的博客 4462

iptables+NAT+端口映射

 文章来源:先飞电脑技术实现目标:    利用iptabels给局域网做NAT透明代理,比如网吧或公司企业的上网代理服务器!同时实现了内网WEB服务器的端口映射!并且解决了WEB服务器访问者IP都为代理服务器IP的问题!同时内外网皆可正常通过公网IP访问内网的WEB服务器! 实现目标:    利用iptabels给局域网做NAT透明代理,比如网吧或公司企业的上网代理服务器!同时实现了内网W

Linux&amp;ubuntu资源分享 3255

ip代理的匿名度

HTTP代理按匿名度可分为透明代理、匿名代理和高度匿名代理。 使用透明代理,对方服务器可以知道你使用了代理,并且也知道你的真实IP。 透明代理访问对方服务器所带的HTTP头信息如下: REMOTE_ADDR = 代理服务器IP HTTP_VIA = 代理服务器IP HTTP_X_FORWARDED_FOR = 你的真实IP 透明代理还是将你的真实IP发送给了对方服务器,因此无法达到隐藏身份的目的。...

1779

LIUNX+NAT网吧网段限速透明代理脚本

LIUNX+NAT网吧网段限速透明代理脚本首先我说明一下我这的网络环境我这里上网用的是电信(ISP)公网IP+LIUNX代理服务器(算是简单路由器吧.呵呵)LIUNX装双网卡ETH0  为  内网IPETH1  为 外网IP另外大家有好的IPTABLES规则防火强要在下面跟帖啊,我会把帖子整理出来(会注明哪位兄弟发的::xiao2:: )让大家(包括我)可以学习学习:P 好了,下面是我的限速脚

1610

从零开始:用这些公开数据集搞定电力AI项目(含鸟巢、绝缘子、负荷预测等33个实战资源)

本文系统梳理了电力AI领域33个精选公开数据集,涵盖目标检测、负荷预测等关键场景,如鸟巢检测、绝缘子缺陷识别等。通过实战案例解析数据预处理、模型选型及性能优化策略,帮助工程师快速构建端到端解决方案,解决电力AI项目中的数据获取与处理难题。

weixin_42522552的博客 216

iptables+NAT+squid 透明代理上网实现方案

iptables+NAT+squid 透明代理上网实现方案  历尽千辛万苦,翻变了所有技术论坛,整整研究了一个多月终于搞定啦!  关于此话题网上很多,但没有一篇是能让你实现目标的,惟有这篇!  本人也是Linux菜鸟,刚开始玩Linux,自学的何其经历艰苦!  今天刊登这份文章,希望给象我一样的新手提供帮助。  更希望高手能够指出不足之处,谢谢。  平台:RedHat8.0 各组件均为Linux

在水一方 1140

实测iOS和安卓大不同!用NFC触发小程序跳转的完整避坑指南(含NFC Tools配置)

本文深入解析iOS与安卓在NFC触发小程序跳转时的核心差异,提供微信与支付宝小程序的NFC实现方案及优化技巧。涵盖跨平台兼容性测试方法论、性能优化策略及异常处理方案,帮助开发者避开常见陷阱,提升跳转成功率。特别针对NFC Tools配置和微信Universal Link使用进行详细指导。

asdfghjkl978564的博客 434

极空间NAS零基础部署Wiki.js:Docker+PostgreSQL全流程避坑指南

本文提供了一份在极空间NAS上从零部署Wiki.js私有知识库的详细指南。通过Docker容器化技术,结合PostgreSQL数据库,手把手讲解环境准备、核心组件配置、性能优化及安全加固等全流程,并特别针对极空间平台特性提供了避坑要点,帮助用户打造安全、高效、自主可控的知识管理系统。

3a9bq4r8t2y的博客 486

squid透明代理+LVS(NAT)模式,防火墙放行读取日志

squid(透明)+LVS(NAT)+httpd 基础环境 主机 IP地址 网段 其他备注 client 10.0.0.1/8 10.0.0.254 CIP squid ens33:10.0.0.254/8 无 ens37:172.16.0.254/16 lvs ens33:192.168.10.4/24 ens37:172.16.0.254 ens37:172.16.0....

北海牧野 1022

深入解析DDR5 SDRAM中的CA训练模式(CATM):原理与实现

本文深入解析DDR5 SDRAM中的CA训练模式(CATM),详细探讨其工作原理与实现方法。通过分析JESD79-5标准,揭示CATM在时序校准、信号质量优化和系统稳定性方面的核心价值,并提供硬件设计考量和系统级调试技巧,帮助工程师解决高速内存系统中的信号完整性问题。

weixin_29235923的博客 383

防火墙用户认证、NAT、策略路由、DNS透明代理以及双机热备笔记

防火墙策略路由、DNS透明代理以及双机热备概述

2031

Unity跨平台存储避坑指南:persistentDataPath权限真相

Application.persistentDataPath是Unity中用于持久化数据的核心路径,表面提供跨平台抽象,实则底层访问机制因操作系统而异。其原理并非简单路径映射,而是受Android Scoped Storage、iOS Data Protection、Windows组策略及macOS隐私权限等多层安全模型动态约束。技术价值在于保障用户数据长期可靠存储,但若忽略平台差异,极易引发‘本地正常、真机崩溃’‘iOS可存、Android报错’等线上事故。典型应用场景包括游戏存档、离线缓存、自定义资源包

weixin_32073537的博客 350

Simulink开发项1000例实战专栏--实例17:基于 Simulink 的 BLDC 电机驱动系统的设计与实现

项目背景无刷直流电机(BLDC)因其高效、可靠、低维护的特点,广泛应用于电动汽车、无人机、工业自动化等领域。基于 Simulink 的 BLDC 电机驱动系统可以实现对电机的精确控制,包括速度控制、位置控制和转矩控制。通过仿真和测试,可以优化控制算法,提高系统的性能和可靠性。

xiaoheshang_123的博客 562

Linux透明代理 —— 使用iptables实现TCP透明代理(nat方式,一个客户端对应一个服务器)

目录: 1、什么是透明代理? 2、透明代理的作用? 2.1 TCP代理服务器可以隐藏背后真正TCP服务器 2.2 保护TCP服务器免受应用层以下级别的协议栈攻击 2.3 TCP转址机 3、socket透明代理的实现原理? 4、在实现TCP代理服务器时,遵循以下几点原则 5、应用背景 6、关键技术? 7、如何建立透明代理? 7.1 Tcp透明代理实现的中心思想 7.2 搭建环...

杰儿__er 的博客 3万+

图像处理之边缘检测[微分算子、Canny算子和LOG算子]

LOG算子是在经典算子的基础上发展起来的边缘检测算子,根据信噪比求得检测边缘的最优滤波器。边缘总是以强度突变的形式出现,可以定义为图像局部特性的不连续性,如灰度的突变和纹理结构的突变等。图像的边缘包含了物体形状的重要信息,它不仅在分析图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构。对于复杂的图像,采用Roberts算子不能较好地得到图像的边缘,而需要采用更加复杂的3X3的算子比如Prewitt算子。对于离散的图像f(x,y),边缘检测算子是用图像的垂直和水平差分来逼近梯度算子,即。

qq_44111805的博客 9833

iptables NAT+squid实现透明代理

iptables 设置(NAT和ip限制,80转发,需要有ip文件ip2.txt): intra="192.168.0.0/24"myip="219.217.235.73"myDNS="202.118.224.101:53"echo 1 &gt; /proc/sys/net/ipv4/ip_forward#清空规则/sbin/iptables -F /sbin/iptables -t nat -...

weixin_34353714的博客 288

AI爬虫:一文讲通AI爬虫技术和原理,及34个AI爬虫工具推荐

AI 爬虫 是一种结合了传统网络爬虫技术和人工智能(AI)技术的工具,能够更智能、高效地从网页中提取和处理数据。与传统爬虫相比,AI 爬虫能够更好地处理动态内容、复杂网页结构以及非结构化数据,同时具备数据清洗、分类、情感分析等高级功能。

数据知道的博客 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

网络地址转换NAT原理

NAT:它是一种把内部私有网络地址(IP地址)翻译成合法网络IP地址的技术。因此我们可以认为,NAT在一定程度上,能够有效的解决公网地址不足的问题。

每天学习一点点,成长一小步 3325

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

智能选路+NAT实验

1、DNS服务器信息配置2、创建虚拟服务,虚拟DNS服务器配置3、实现DNS透明代理功能。

yxs818616的博客 695

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

简单理解 NAT

文章目录简单理解 NAT1. 简介2. 静态NAT(Static NAT)3. 动态NAT(Pooled NAT)4. 网络地址端口转换NAPT(Port-Level NAT)5. 一些问题 简单理解 NAT 写这篇文章仅供自己参考 =W= 1. 简介 NAT(NetworkAddressTranslation),即网络地址转换。利用网关,将不能访问外部网络的IP地址转换为可访问外部的IP地址,...

蒋含竹的博客 3819
上一篇: Qt学习之QFile和QFileInfo
下一篇: Nginx事件模块学习之连接
码农诗人
博客等级 码龄11年 987粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值