IP透明代理 是不是如何用ip访问网站站的时候 网站知道我的原IP?

[精彩] 如何用iptables将透明代理请求重定向另一主机?【已解决】 - ChinaUnix.net
[精彩] 如何用iptables将透明代理请求重定向另一主机?【已解决】
http://www.chinaunix.net 作者:&&发表于: 01:32:37
如题,我做透明代理,不过是分别做到2台不同的机器上,一台nat,另一台专职做proxy.想实现透明代理功能.
假设a为nat,b为proxy机
试了一下,用&DNAT&--to-destination&b:3128
REDIRECT&又不能指到其他机器上去。..
(squid的透明代理几个选项已设置好的)
求教特此[&本帖最后由&platinum&于&&13:14&编辑&]
& 回复于: 15:04:08
C/NAT/PROXY&之间的网络拓扑是怎样的,路由关系是怎样的?
& 回复于: 15:09:03
引用:原帖由&skylove&于&&15:00&发表
如题,我做透明代理,不过是分别做到2台不同的机器上,一台nat,另一台专职做proxy.想实现透明代理功能.
假设a为nat,b为proxy机
试了一下,用&DNAT&--to-destination&b:3128
REDIRECT&又不能指到其他机器上去。..
&...&
别加端口.&
然后在&proxy&上再做&redirect&.
& 回复于: 15:11:01
proxy是台solaris...汗,不是linux
nat倒是台linux
& 回复于: 15:13:11
引用:原帖由&skylove&于&&15:11&发表
proxy是台solaris...汗,不是linux
nat倒是台linux&
那就试试&--to-des...&--to-port....&我可没这么试过.&
BTW.&那就把&proxy&改成&80&好&了.
& 回复于: 15:17:55
引用:原帖由&platinum&于&&15:04&发表
C/NAT/PROXY&之间的网络拓扑是怎样的,路由关系是怎样的?&
& 回复于: 15:19:00
结构大概如下
公网ip&1
|
A(nat)
&|
内网ip1
|
|
内部网络----&&&&内网ip2--b(proxy)--公网ip2
ip1为A机ip,ip2为b机ip[&本帖最后由&skylove&于&&15:26&编辑&]
& 回复于: 15:25:57
大概其对了,但不严谨,由于不知道你的拓扑结构,所以不好说
不过从你的解决方案来看,client&应该是可以直接与&proxy&通信的,中途不必借用&nat&中转,和传统的内网映射性质不同
& 回复于: 15:28:27
引用:原帖由&platinum&于&&15:25&发表
大概其对了,但不严谨,由于不知道你的拓扑结构,所以不好说
不过从你的解决方案来看,client&应该是可以直接与&proxy&通信的,中途不必借用&nat&中转,和传统的内网映射性质不同&
是的,麻烦就麻烦在如果用内网ip就是直接跳过去,不用nat转更好...
主要是其他服务都走a机出,不能让用户改网关
其实这样的情形做非透明代理是最合适的,但是想试下做透明的
& 回复于: 15:41:55
最后自己的变态搞法自己搞定....&用b的外网ip就行了~~~~~DNAT&--to
然后squid里设置好netmask&就行了...
不过还是奇怪,为什么指定成b网的内网ip就不可以呢?(b网是2个ip,b自身是直接出去的,不用经过a)
& 回复于: 15:43:20
其实应该这样设置
1、PREROUTING&该怎么做还怎么做,DNAT&到那个&PROXY
iptables&-t&nat&-I&PREROUTING&-s&&内网IP&&-d&!&&内网IP&&-p&tcp&--dport&80&-j&DNAT&&PROXY_IP&:3128
2、针对访问&PROXY&的数据首包进行一次原地址修改
ipitables&-t&nat&-I&POSTROUTING&-d&&PROXY_IP&&-p&tcp&--dport&3128&-j&SNAT&--to&&LINUX_IP&
& 回复于: 15:44:44
引用:原帖由&skylove&于&&15:41&发表
最后自己的变态搞法自己搞定....&用b的外网ip就行了~~~~~DNAT&--to
然后squid里设置好netmask&就行了...
不过还是奇怪,为什么指定成b网的内网ip就不可以呢?(b网是2个ip,b自身是直接出去的,不用经过a)&
nat&表不是每个数据包都经过的,它只处理一个&connection&的首包(我理解是)
& 回复于: 15:45:12
引用:原帖由&platinum&于&&15:43&发表
其实应该这样设置
1、PREROUTING&该怎么做还怎么做,DNAT&到那个&PROXY
iptables&-t&nat&-I&PREROUTING&-s&&内网IP&&-d&!&&内网IP&&-p&tcp&--dport&80&-j&DNAT&&PROXY_IP&:3128
2、针对&...&
:em06::em06:&loop&了.
& 回复于: 15:46:21
引用:原帖由&q1208c&于&&15:45&发表
:em06::em06:&loop&了.&
不会啊,为何会&loop&呢?
& 回复于: 15:51:01
引用:原帖由&platinum&于&&15:46&发表
不会啊,为何会&loop&呢?&
proxy_server&也会向&"&!&&内网IP&&&--dport&80"&发包的.&
要先加一条&让那个&proxy_server&直接出去才行的.
& 回复于: 15:51:33
我用上面的方法也做了一个自己的,可以试试哦,看是不是&loop&^_^
http://61.48.176.206
我的链路是&ADSL,下行&1Mbps,上行&512Kbps
而真正访问后,我的实际流量很小,这也就是我上面说的只针对首包修改的意思
& 回复于: 15:54:50
引用:原帖由&q1208c&于&&15:51&发表
proxy_server&也会向&"&!&&内网IP&&&--dport&80"&发包的.&
要先加一条&让那个&proxy_server&直接出去才行的.&
我的“内网IP”指的是&client&那些机器的&IP&范围
因为我不知道&skylove&的网络拓扑,不知道&nat&和&proxy&的关系是怎样的,也许&proxy&不走&nat&出去也说不定,所以只好先这样写了&:mrgreen:
& 回复于: 15:54:51
proxy&不走nat出去,proxy本身就是有2个网卡,其中一个是外网ip,而且网关也是公网上的
我现在觉得好奇的就是...&为什么内网ip那里会需要改掉源地址???&&
现在的想法是...可能是因为正好下面的完全snat冲突了,如果下面snat那里&!80大概就不用改才对....
& 回复于: 16:03:37
引用:原帖由&platinum&于&&15:54&发表
我的“内网IP”指的是&client&那些机器的&IP&范围
因为我不知道&skylove&的网络拓扑,不知道&nat&和&proxy&的关系是怎样的,也许&proxy&不走&nat&出去也说不定,所以只好先这样写了&:mrgreen:&
:em06::em06::em20::em20:
& 回复于: 16:06:51
算了,我也不折腾自己了...折磨2位了
想了想大概是策略冲突
因为在DNAT的时候,虽然是dnat到内网proxy的;但是由于nat上还有一条snat的默认出去策略,根据iptables的依次执行原则,就把源地址给改成了nat的外网ip了.
理论上如果要做到我想的&,那么在做snat的时候就该指定是除目的端口为tcp&80以外的才做snat....估计这样才行...
& 回复于: 16:13:10
又做了一次简单尝试
dnat&到&内网&proxy地址,直接把snat&那句给屏蔽掉,结果还是不行.&不搞了...还是写论文去了,改天来想这问题
& 回复于: 16:16:46
引用:原帖由&skylove&于&&15:54&发表
我现在觉得好奇的就是...&为什么内网ip那里会需要改掉源地址???&&
嗯,这里是最不能让人理解的地方,其实是这样
NAT&机器在这里不仅完成了一次&DNAT&修改目的地址的动作,也必须完成一次&SNAT&的动作才可以
B------C
|
|
|
A
好比上图,A&可以直接访问&C&而不经过&B
现在&A&访问&B,B&把&A&的目的地址改为&C,因此&A&的数据包可用到&C
C&看到的是&A&的地址,如果&C&收到&SYN&后返回&SYN/ACK,他就要返回给&A
因为&A&的&socket&没有针对&C&的内容,所以即使&A&收到了&C&的&SYN/ACK,他也会直接扔掉
此时,如果&B&在修改&A&的目的地址的同时把原地址也改成自己,那么&C&看到的完完全全是&B&的包,SYN/ACK&也发回给&B
因为&NAT&的标准,B&里有个记录表,他收到&C&的包后返还给&A,而&A&的&socket&是针对&B&的,所以这样能实现&A&与&C&的通讯
后面是我不明白的,真正传输数据时,B&没什么流量,B&上面的&iptables&也没什么匹配,A&直接和&C&通讯,为什么?
& 回复于: 16:33:35
我也有同样的疑问.看来得去官方站点问问看了呢~~~
& 回复于: 16:37:04
引用:原帖由&platinum&于&&16:16&发表
嗯,这里是最不能让人理解的地方,其实是这样
NAT&机器在这里不仅完成了一次&DNAT&修改目的地址的动作,也必须完成一次&SNAT&的动作才可以
B------C
|
|
|
A
好比上图,A&可以直接访问&C&而不经&...&
:m01::m01::m01:&没学好ICMP吧?&
routing&redirect&呀.&
不信你试试,&在一个&LAN&里用好多台机器比如&192.168.1.1,&1.2,&1.3.&然后,&每一个的网关都指向下一个,&就是&1.1=&&1.2&1.2&=&&1.3.&然后,&你从1.1&ping&1.3&看看会收到什么.
& 回复于: 16:39:39
引用:原帖由&q1208c&于&&16:37&发表
:m01::m01::m01:&没学好ICMP吧?&
routing&redirect&呀.&
不信你试试,&在一个&LAN&里用好多台机器比如&192.168.1.1,&1.2,&1.3.&然后,&每一个的网关都指向下一个,&就是&1.1=&&1.2&1.2&=&&1.3.&然后,&&...&
问题是,C&并不知道是来自&A&的请求啊,它怎么知道是&A&要访问它?
& 回复于: 17:05:56
我想应该是发送包的路径(路由)和返回的不同,不同的地方在nat那里,所以应该做一个SNAT.否则DNAT到proxy外网ip应该也不行吧,除非你把proxy上内网的路由去掉了.
& 回复于: 17:09:31
引用:原帖由&platinum&于&&16:39&发表
问题是,C&并不知道是来自&A&的请求啊,它怎么知道是&A&要访问它?&
:m01::m01:&我想应该能知道,&因为你当初是&redirect&来的,&而不是NAT&来的.
& 回复于: 17:09:46
等等,既然大家都有兴趣讨论,俺把示意图画出来....等着
& 回复于: 17:26:34
& 回复于: 17:30:26
引用:原帖由&skylove&于&&17:26&发表
结构如图&
我想到一个笨办法,&你试试,&
就是先&redirect&到本机的&3128,&然后再&把&3128&的&redirect&到&proxy&上去.
& 回复于: 17:30:39
引用:原帖由&q1208c&于&&17:09&发表
:m01::m01:&我想应该能知道,&因为你当初是&redirect&来的,&而不是NAT&来的.&
谁说是&REDIRECT&了,我一直说&SNAT&和&DNAT&啊,NAT&和&REDIRECT&是不同的
skylove&的环境用&REDIRECT&是无法实现的!
& 回复于: 17:32:50
引用:原帖由&platinum&于&&17:30&发表
谁说是&REDIRECT&了,我一直说&SNAT&和&DNAT&啊,NAT&和&REDIRECT&是不同的
skylove&的环境用&REDIRECT&是无法实现的!&
:em17::em17:&为什么不能实现?&
另,&SNAT&就一定行么?&因为&SNAT&好象不能改&port&吧?
& 回复于: 17:33:06
引用:原帖由&q1208c&于&&17:30&发表
我想到一个笨办法,&你试试,&
就是先&redirect&到本机的&3128,&然后再&把&3128&的&redirect&到&proxy&上去.&
问题不在这里,我现在是可以直接&DNAT&--to&proxy外网ip地址:3128&,这样做透明代理是没问题的.
而如果用&DNAT&--to&proxy内网ip地址:3128&&则不行...
& 回复于: 17:33:14
引用:原帖由&q1208c&于&&17:30&发表
我想到一个笨办法,&你试试,&
就是先&redirect&到本机的&3128,&然后再&把&3128&的&redirect&到&proxy&上去.&
呵呵,已经&REDIRECT&了,这个做过处理的数据包已经脱离了&nat&表的&PREROUTING&链,你怎么还对他进行控制啊
& 回复于: 17:33:50
很明确,&proxy从nat那里接受请求,当返回请求的时候,根据路由表,是直接返回给client机器,而不是nat(没有做SNAT)
& 回复于: 17:34:19
引用:原帖由&q1208c&于&&17:32&发表
:em17::em17:&为什么不能实现?&
另,&SNAT&就一定行么?&因为&SNAT&好象不能改&port&吧?&
不能实现的原因似乎是&redirect&只有&to-port&的功能,无法重定位到其他机器
& 回复于: 17:36:11
引用:原帖由&tingyu&于&&17:33&发表
很明确,&proxy从nat那里接受请求,当返回请求的时候,根据路由表,是直接返回给client机器,而不是nat(没有做SNAT)&
恩,有道理...&所以就无法根据tcp的3次握手建立连接...因为对client来看,似乎就是从一个从未发起过syn的地方来的"非法"握手连接...有点明白了
& 回复于: 17:36:37
引用:原帖由&skylove&于&&17:34&发表
不能实现的原因似乎是&redirect&只有&to-port&的功能,无法重定位到其他机器&
正确,REDIRECT&是&DNAT&的一个特例
iptables&-t&nat&-A&PREROUTING&-s&192.168.0.0/24&-p&tcp&--dport&80&-j&REDIRECT&--to&3128
等同于
iptables&-t&nat&-A&PREROUTING&-s&192.168.0.0/24&-p&tcp&--dport&80&-j&DNAT&--to&localhost:3128
& 回复于: 17:37:33
引用:原帖由&platinum&于&&17:33&发表
呵呵,已经&REDIRECT&了,这个做过处理的数据包已经脱离了&nat&表的&PREROUTING&链,你怎么还对他进行控制啊&
:em06::em06:&别忘了是本机的.&还是prerouting.
& 回复于: 17:37:48
引用:原帖由&skylove&于&&17:36&发表
恩,有道理...&所以就无法根据tcp的3次握手建立连接...因为对client来看,似乎就是从一个从未发起过syn的地方来的"非法"握手连接...有点明白了&
我在&22&楼说的你是否能看明白?我说的是否有错误?和&tingyu&说的是否是一个意思?
& 回复于: 17:39:15
引用:原帖由&q1208c&于&&17:37&发表
:em06::em06:&别忘了是本机的.&还是prerouting.&
如果一个数据包最后&NF_DROP&或者&NF_ACCEPT&后,他就会脱离这个“框架”,因此你在&PREROUTING&做过一次明确处理后,后面的规则不会再继续匹配到他,因为他已经被“生效”了
& 回复于: 17:40:28
根据&tingyu&先生的意见,我大致上明白思路了
首先
1.client&--&nat&连接,需要DNAT&到&proxy&,并同时修改snat为&nat&机器;
2.&proxy&处理需求,将结果反馈给nat&机;(这里不能直接转给client的原因是,client根本没有朝proxy发起过tcp连接的记忆)
3.nat&机再转交给client端...
大致应该这样才对...也就是说dnat和snat得同时修改...呵呵
& 回复于: 17:41:01
引用:原帖由&platinum&于&&17:39&发表
如果一个数据包最后&NF_DROP&或者&NF_ACCEPT&后,他就会脱离这个“框架”,因此你在&PREROUTING&做过一次明确处理后,后面的规则不会再继续匹配到他,因为他已经被“生效”了&
难道不是这样么?&
192.168.1.1:80&--&&&redirect&192.168.1.1:3128
192.168.1.1:3128&--&&redirect(dnat)&192.168.1.2:&3128
:em14::em14:
& 回复于: 17:41:26
引用:原帖由&platinum&于&&17:39&发表
如果一个数据包最后&NF_DROP&或者&NF_ACCEPT&后,他就会脱离这个“框架”,因此你在&PREROUTING&做过一次明确处理后,后面的规则不会再继续匹配到他,因为他已经被“生效”了&
这个...&snat是在路由后处理,dnat是在路由前处理的,所以都会执行到的...
& 回复于: 17:43:49
http://bbs.chinaunix.net/viewthread.php?tid=227018&highlight=skylove
突然发现自己在2003年12月就遇到过同样问题并且解决掉了...&汗...&真是越老越不中用了.
& 回复于: 17:45:25
引用:原帖由&skylove&于&&17:41&发表
这个...&snat是在路由后处理,dnat是在路由前处理的,所以都会执行到的...&
q1208c&的意思是
引用:
192.168.1.1:80&--&&&redirect&192.168.1.1:3128
192.168.1.1:3128&--&&redirect(dnat)&192.168.1.2:&3128
两个都是&REDIRECT,REDIRECT&是&PREROUTING&链特有的东西
& 回复于: 17:46:25
skylove&兄,我在&22&楼所说的那些你能否理解?
& 回复于: 17:47:02
这样redirect&2次不划算的,事实上dnat是没有任何问题的,不是转指不成功
& 回复于: 17:53:30
[font=宋体]引用:原帖由&skylove&于&&17:47&发表
这样redirect&2次不划算的,事实上dnat是没有任何问题的,不是转指不成功&
晕,你和&q1208c&都没明白我的意思,只要数据包被处理过(target),都会逃出&netfilter&匹配框架
我来举例说明好了
引用:
[root@PT_LINUX&root]#&iptables&-t&nat&-I&PREROUTING&-s&61.48.85.30&-p&tcp&--dport&80&-j&REDIRECT&--to&23
[root@PT_LINUX&root]#&iptables&-t&nat&-I&PREROUTING&2&-s&61.48.85.30&-p&tcp&--dport&23&-j&REDIRECT&--to&21
加入了两条规则,从我的&IP&过来的,访问&TCP/80&的,先转到&TCP/23,再转到&TCP/21
引用:
[root@PT_LINUX&root]#&iptables&-vnL&-t&nat
Chain&PREROUTING&(policy&ACCEPT&778K&packets,&80M&bytes)
&pkts&bytes&target&&&&&prot&opt&in&&&&&out&&&&&source&&&&&&&&&&&&&&&destination
&&&&0&&&&&0&REDIRECT&&&tcp&&--&&*&&&&&&*&&&&&&&61.48.85.30&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:80&redir&ports&23
&&&&0&&&&&0&REDIRECT&&&tcp&&--&&*&&&&&&*&&&&&&&61.48.85.30&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:23&redir&ports&21
&&&&0&&&&&0&DNAT&&&&&&&tcp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:26881&to:172.17.39.3
&&&&0&&&&&0&DNAT&&&&&&&udp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&udp&dpt:26881&to:172.17.39.3
&&&&0&&&&&0&DNAT&&&&&&&tcp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:36881&to:172.17.39.3
&&&&0&&&&&0&DNAT&&&&&&&udp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&udp&dpt:36881&to:172.17.39.3
&&&&0&&&&&0&DNAT&&&&&&&tcp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:8881&to:172.25.39.2
&&&&0&&&&&0&DNAT&&&&&&&udp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&udp&dpt:8881&to:172.25.39.2
Chain&POSTROUTING&(policy&ACCEPT&179K&packets,&7202K&bytes)
&pkts&bytes&target&&&&&prot&opt&in&&&&&out&&&&&source&&&&&&&&&&&&&&&destination
&&&&0&&&&&0&MASQUERADE&&all&&--&&*&&&&&&ppp0&&&&172.17.39.0/24&&&&&&&0.0.0.0/0
&&&50&&3200&MASQUERADE&&all&&--&&*&&&&&&ppp0&&&&172.25.39.0/24&&&&&&&0.0.0.0/0
Chain&OUTPUT&(policy&ACCEPT&2449&packets,&132K&bytes)
&pkts&bytes&target&&&&&prot&opt&in&&&&&out&&&&&source&&&&&&&&&&&&&&&destination
按照你们的理论我&telnet&IP&80&后,应该无相应才对(因为我有&telnet&服务,没有&ftp&服务),应该两条策略都匹配到数据
引用:
[root@PT_LINUX&root]#&iptables&-vnL&-t&nat
Chain&PREROUTING&(policy&ACCEPT&778K&packets,&80M&bytes)
&pkts&bytes&target&&&&&prot&opt&in&&&&&out&&&&&source&&&&&&&&&&&&&&&destination
&&&&1&&&&48&REDIRECT&&&tcp&&--&&*&&&&&&*&&&&&&&61.48.85.30&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:80&redir&ports&23
&&&&0&&&&&0&REDIRECT&&&tcp&&--&&*&&&&&&*&&&&&&&61.48.85.30&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:23&redir&ports&21
&&&&0&&&&&0&DNAT&&&&&&&tcp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:26881&to:172.17.39.3
&&&&0&&&&&0&DNAT&&&&&&&udp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&udp&dpt:26881&to:172.17.39.3
&&&&0&&&&&0&DNAT&&&&&&&tcp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:36881&to:172.17.39.3
&&&&0&&&&&0&DNAT&&&&&&&udp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&udp&dpt:36881&to:172.17.39.3
&&&&0&&&&&0&DNAT&&&&&&&tcp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&tcp&dpt:8881&to:172.25.39.2
&&&&0&&&&&0&DNAT&&&&&&&udp&&--&&ppp0&&&*&&&&&&&0.0.0.0/0&&&&&&&&&&&&0.0.0.0/0&&&&&&&&&&&udp&dpt:8881&to:172.25.39.2
Chain&POSTROUTING&(policy&ACCEPT&179K&packets,&7202K&bytes)
&pkts&bytes&target&&&&&prot&opt&in&&&&&out&&&&&source&&&&&&&&&&&&&&&destination
&&&&0&&&&&0&MASQUERADE&&all&&--&&*&&&&&&ppp0&&&&172.17.39.0/24&&&&&&&0.0.0.0/0
&&&68&&4352&MASQUERADE&&all&&--&&*&&&&&&ppp0&&&&172.25.39.0/24&&&&&&&0.0.0.0/0
Chain&OUTPUT&(policy&ACCEPT&2451&packets,&133K&bytes)
&pkts&bytes&target&&&&&prot&opt&in&&&&&out&&&&&source&&&&&&&&&&&&&&&destination
[root@PT_LINUX&root]#
而实际呢?我&telnet&IP&80&后,出现了登录界面,而且第二条策略没有匹配到任何东西,不知我这样说你们能明白了吗?
这个问题我在&34&楼和&41&楼的时候都已经说过[/font][&本帖最后由&platinum&于&&18:32&编辑&]
& 回复于: 17:54:01
引用:原帖由&platinum&于&&17:46&发表
skylove&兄,我在&22&楼所说的那些你能否理解?&
谢谢指教,明白.
一开始被自己搞糊涂了,因为我在用直接公网上的proxy的时候,可以直接一句dnat&--to&搞定,忘记了这是因为nat&由于本身就默认有一句snat语句,所以也对http请求做了隐性的snat处理.&之后在内网时候,由于默认的出口snat语句肯定不会作用于此,所以自然调试不通.
自己被自己给搞糊涂了,该打:em10::em06:
& 回复于: 17:57:26
引用:原帖由&platinum&于&&17:53&发表
[font=宋体]
晕,你和&q1208c&都没明白我的意思,只要被处理过,都会逃出&netfilter&匹配框架
我来举例说明好了
加入了两条规则,从我的&IP&过来的,访问&TCP/80&的,先转到&TCP/23,再转到&TCP/21
按照你&...&
恩,看明白了~~~~~~:mrgreen::mrgreen::mrgreen:&,刚才在思考解决自己的那个问题,对于redirect&仅仅一次匹配这个问题没注意.&(想来dnat,snat这些也是一次修改匹配才对)
& 回复于: 18:02:46
引用:原帖由&skylove&于&&17:57&发表
恩,看明白了~~~~~~:mrgreen::mrgreen::mrgreen:&,刚才在思考解决自己的那个问题,对于redirect&仅仅一次匹配这个问题没注意.&(想来dnat,snat这些也是一次修改匹配才对)&
我指的是在同一个链里,不要误解,DNAT&和&SNAT&是在不同链里做的
一个是“前置于路由”,一个是“后置于路由”,分别在&PREROUTING&链和&POSTROUTING&链里
两个链的东西是分先后的,所以&SNAT&和&DNAT&不会冲突,不会因为匹配到一个逃离&netfilter&框架
我指的“逃离&netfilter&框架”指的是“同一个&chain”而言的
比如,INPUT&链里&ACCEPT&掉一个后,后面的相同规则的匹配就会失效
再比如,往往不想针对一个网站使用代理,就在&PREROUTING&链的最前面针对&-d&某网站&-j&ACCEPT,这样就逃脱了&PREROUTING,从而使后面的“透明代理”失效,从而使用户访问那个网站的时候仍然走&NAT&^_^
& 回复于: 18:06:29
:em14::em14:
怎么越来越乱了.&
楼主弄好了再写出来吧.&
主要是我现在没法试.&:em06::em06:
& 回复于: 18:30:36
引用:原帖由&platinum&于&&18:02&发表
我指的是在同一个链里,不要误解,DNAT&和&SNAT&是在不同链里做的
一个是“前置于路由”,一个是“后置于路由”,分别在&PREROUTING&链和&POSTROUTING&链里
两个链的东西是分先后的,所以&SNAT&和&DNAT&不会冲&...&
你误会了,我的意思是SNAT也不能重复指定2次;DNAT也不能重复指定2次
& 回复于: 18:33:49
引用:原帖由&q1208c&于&&18:06&发表
:em14::em14:
怎么越来越乱了.&
楼主弄好了再写出来吧.&
主要是我现在没法试.&:em06::em06:&
以下2句在nat上设置了就好了,调试通过...&
/sbin/iptables&-t&nat&-A&PREROUTING&-i&nat内网网卡接口&-p&tcp&-s&!&proxy内网ip&--dport&80&-j&DNAT&--to&proxy内网ip:代理端口
/sbin/iptables&-t&nat&-A&POSTROUTING&-o&nat内网网卡接口&-s&内网网络地址段&-d&proxy内网ip&-j&SNAT&--to&nat内网ip地址
& 回复于: 18:33:54
引用:原帖由&skylove&于&&18:30&发表
你误会了,我的意思是SNAT也不能重复指定2次;DNAT也不能重复指定2次&
嗯。。。如果你当初要表述的意思是遮掩的话。。。
恭喜你,终于大彻大悟了&^_^
& 回复于: 18:38:23
引用:原帖由&platinum&于&&18:33&发表
嗯。。。如果你当初要表述的意思是遮掩的话。。。
恭喜你,终于大彻大悟了&^_^&
:em08::em08::em08:&这个算是意外收获~~~~~:em17::em17:
不过实在没想到2003年的我比现在还熟悉iptables一些,真的是越活越倒退了,以后不能再混清茶了:em06::em06:
& 回复于: 18:40:05
引用:原帖由&skylove&于&&18:38&发表
:em08::em08::em08:&这个算是意外收获~~~~~:em17::em17:
不过实在没想到2003年的我比现在还熟悉iptables一些,真的是越活越倒退了,以后不能再混清茶了:em06::em06:&
也不是啊,那会的你是“知其然,不知其所以然”,虽然调通了蒙对了,但不知道为啥这么就对了,下次设置也未必还会设
而现在的你不仅“知其然”,也想“知其所以然”了,是一个很大的进步
& 回复于: 18:48:39
引用:原帖由&platinum&于&&18:40&发表
也不是啊,那会的你是“知其然,不知其所以然”,虽然调通了蒙对了,但不知道为啥这么就对了,下次设置也未必还会设
而现在的你不仅“知其然”,也想“知其所以然”了,是一个很大的进步&
:em16:&错了,当时因为刚考过了ccna不久,所以关于nat这些还记忆得相当清晰,现在却总是照抄当年写的一些脚本和配置,忘记的7788了~~~~:em10::em16:
& 回复于: 21:13:04
你要在第一台机器上做DNAT,在第二台机器上做SNAT问题就解决了
& 回复于: 21:38:33
引用:原帖由&顽主&于&&21:13&发表
你要在第一台机器上做DNAT,在第二台机器上做SNAT问题就解决了&
skylove&都已经说了,那台(第二台,也就是&proxy&那台)是&Solaris&系统
而且你说的没有根据,请看前面的讨论
& 回复于: 09:08:12
测试了16个小时了,缓存了大约4G多一点的数据...
根据我的用户量来看,缓存的还是有点太少了...哎,现在用静态的站点,或者把站点最终生成静态发布的站点太少了...
如果动态站点用xml+xsl&配合js和css也好啊...至少只有xml是动态的,xsl,js和css都能缓存...&期待各个站点制作技术的进步.&btw,那天看到某论坛是xml配合xsl的,速度相当猛.
& 回复于: 09:21:31
在linux网关机器上用iptables把http请求识别出来,然后用一个专门的路由表来转发,而这个路由表里面则把下一跳地址指向proxy就可以了。
& 回复于: 09:25:48
引用:原帖由&急不通&于&&09:21&发表
在linux网关机器上用iptables把http请求识别出来,然后用一个专门的路由表来转发,而这个路由表里面则把下一跳地址指向proxy就可以了。&
skylove&的拓扑不适于这样做,因为&client&可以与&proxy&直通
& 回复于: 09:59:51
引用:原帖由&platinum&于&&09:25&发表
skylove&的拓扑不适于这样做,因为&client&可以与&proxy&直通&
我用的那个结构比较有代表性,适合比较大的intranet使用该模式,必要的时候还可以指定多个proxy分解压力...&
另,我这样的原因是
squid在sparc下表现比较好,特别是squid的线程在solaris表现地很好.
而nat使用linux的netfilter/iptables&则比较方便我进行一些高级控制和管理.
& 回复于: 10:02:17
天缘,你甚至可以用&-j&DNAT&IP-IP&的方法实现&proxy&负载均衡
不过&POSTROUTING&就要针对每一个&PROXY_IP&的&TCP/3128&做一下&SNAT&了
& 回复于: 10:20:59
引用:原帖由&platinum&于&&10:02&发表
天缘,你甚至可以用&-j&DNAT&IP-IP&的方法实现&proxy&负载均衡
不过&POSTROUTING&就要针对每一个&PROXY_IP&的&TCP/3128&做一下&SNAT&了&
是啊,不过用不着,我现在这个代理够用了,4g的内存,80g的scis硬盘,sparc上装的solaris,跑的solaris,开16个线程,写缓存2m,ausf方式设置了2个分区的共计30g缓存区,内存1g缓存区,感觉速度上和应用上基本已经够了...
用均衡的方式,遇到需要session的场合,如果前后数据被分配到了不同的proxy上,可能引发其他的一些问题呢,暂时这样就已经ok了~~~到目前为止,
&kthr&&&&&&memory&&&&&&&&&&&&page&&&&&&&&&&&&disk&&&&&&&&&&faults&&&&&&cpu
&r&b&w&&&swap&&free&&re&&mf&pi&po&fr&de&sr&s0&sd&sd&--&&&in&&&sy&&&cs&us&sy&id
&0&0&0&&&0&&1&&1&&0&&0&&0&&0&&0&&0&&245&&155&&113&&1&&1&99
还是相当满意的
& 回复于: 10:22:25
引用:原帖由&skylove&于&&10:20&发表
用均衡的方式,遇到需要session的场合,如果前后数据被分配到了不同的proxy上,可能引发其他的一些问题呢
的确是这样,一般网上银行尤为如此,另外还有少许变态网站也在其中
& 回复于: 10:39:56
引用:原帖由&platinum&于&&10:22&发表
的确是这样,一般网上银行尤为如此,另外还有少许变态网站也在其中&
是的,安全性稍微高的站,都比喜欢用cookie方式,而是直接用session在server端保存信息&(&但是我在学asp的时候,明确告之,即使是只用session,也需要在client允许使用cookie,想来是放一些特殊的id编号等等吧)
上面我提到过,本身目前用html类的站点就不多,需要缓存的就不多
如果真的需要多台了,我想按照ip段进行划分后dnat到不同的proxy比较合理,比如给电信一个proxy,网通一个proxy,教育网一个proxy...呵呵~~~~&这样利用目的ip进行均衡的方式比较简单,设置起来也只需要归纳几个ip段而已...开销不是太大
& 回复于: 11:25:12
引用:原帖由&顽主&于&&21:13&发表
你要在第一台机器上做DNAT,在第二台机器上做SNAT问题就解决了&
您的思路见解很独到,snat修改后理论上也是可以做到,但那样理解起来就很复杂了,而且还得牵扯到proxy上面的地址修改问题...&当然我因为用的是solaris,我甚至目前还不知道怎么在上面做snat...呵呵~~~:oops:
谢谢您的思路,下次有机会我用台linux做类似的结构来作以尝试看看~~~
& 回复于: 11:53:14
应使用iptables的netmap功能试试
& 回复于: 16:03:21
client于proxy可以直达也可以做,没问题的,只要强制http请求的路由转往proxy,proxy回来的应答不需要再沿原路经route回来,而是直接发给client。还是达到了节省流量、提高响应速度的目的。只要把直达的问题想通了,很多问题很好解决的。我这里经常在这种直达的拓扑环境里搞路由转向,实现proxy、流量整形等等应用。
& 回复于: 16:25:09
引用:原帖由&急不通&于&&16:03&发表
client于proxy可以直达也可以做,没问题的,只要强制http请求的路由转往proxy,proxy回来的应答不需要再沿原路经route回来,而是直接发给client。还是达到了节省流量、提高响应速度的目的。只要把直达的问题想通了&...&
我只做dnat的话不行的,得snat一起做才行.&您想,tcp是3次连接,proxy直接朝client丢的话,必须就在proxy上完成snat的伪造,否则client认为自己根本没朝proxy丢过包,又怎么答应接收呢?
& 回复于: 20:04:10
1、用本网段强制路由转向把请求发给proxy服务器
2、proxy服务器上配置了透明代理功能的话,会截获http请求,发给squid,由squid去取页面。只要proxy知道到client的路由(其实是proxy的内网卡直连网段的,当然知道了),就可以把squid的回应丢给client
& 回复于: 20:20:49
引用:原帖由&急不通&于&&20:04&发表
1、用本网段强制路由转向把请求发给proxy服务器
2、proxy服务器上配置了透明代理功能的话,会截获http请求,发给squid,由squid去取页面。只要proxy知道到client的路由(其实是proxy的内网卡直连网段的,当然知道&...&
嗯,这样也可以,这样的话,nat&服务器实际上又启用了策略路由功能
& 回复于: 22:00:35
引用:原帖由&急不通&于&&20:04&发表
1、用本网段强制路由转向把请求发给proxy服务器
2、proxy服务器上配置了透明代理功能的话,会截获http请求,发给squid,由squid去取页面。只要proxy知道到client的路由(其实是proxy的内网卡直连网段的,当然知道&...&
恩,想明白了。。。我仔细地想了想,觉得您这样做的方式似乎效率还要更高一些的,谢谢指教了
& 回复于: 11:42:10
引用:原帖由&platinum&于&&20:20&发表
嗯,这样也可以,这样的话,nat&服务器实际上又启用了策略路由功能&
这个好像和策略路由无关巴~~
nat服务器负责转发所有80的请求到squid的3128,squid回复client的80请求的包是不会再回nat了,是直接发给client了。
& 回复于: 11:53:50
引用:原帖由&glider126&于&&11:42&发表
这个好像和策略路由无关巴~~
nat服务器负责转发所有80的请求到squid的3128,[color=Red]squid回复client的80请求的包是不会再回nat了,是直接发给client了[/color]。&
从&TCP&的三次握手来讲,从&client&端的&socket&来讲,如果真的按你说的那样,通讯将无法进行
另外一点,nat&是&L4&的东西,路由是&L3&的东西,从效率上讲是不同的
& 回复于: 12:06:08
引用:原帖由&platinum&于&&11:53&发表
从&TCP&的三次握手来讲,从&client&端的&socket&来讲,如果真的按你说的那样,通讯将无法进行
另外一点,nat&是&L4&的东西,路由是&L3&的东西,从效率上讲是不同的&
squid的透明代理就是伪造,不然的话,client请求到&的80端口的请求,重新定向到squid的3128端口,如果squid不伪造,那为什么client得到了&的80端口的回应,但是client不会认为是squid在当中呢?
[color=Red]实际上是squid和的80通讯了,cilent并没有和:80通讯[/color]
& 回复于: 12:18:26
这又是一个&layer&的问题
routing&在&L3
nat&在&L4
squid&在&L7
我们讨论的不是同一个&layer
的确,squid&实际上是自己在访问网页,然后进行数据回传,但这是&L7&的动作
那么问题是,数据回传给谁呢?给&nat&地址还是直接给&client&?
如果&client&的&GW&指向&nat,他对外的请求是走&nat&的,client&与&nat&建立了&socket(此时并未与&squid&建立)
nat&负责修改用户数据包中的&destnation,之后继续经过&routing&过程,然后自己把这个包送给&squid,此时&nat&与&squid&又建立了&socket
整个过程中,client&始终未与&squid&直接建立连接,若&squid&强行将数据回送给&client&的话,由于&client&没有记录他与&squid&的&socket,因此这个包将被&OS&的&TCP/IP&协议栈丢弃
这个问题,在本贴和“风影”那个贴子里都有讨论,有耐心的话可以翻一下
& 回复于: 12:22:52
& 回复于: 16:21:50
引用:原帖由&platinum&于&&12:18&发表
这又是一个&layer&的问题
routing&在&L3
nat&在&L4
squid&在&L7
我们讨论的不是同一个&layer
的确,squid&实际上是自己在访问网页,然后进行数据回传,但这是&L7&的动作
那么问题是,数据回传给谁呢?给&&...&
第一:在NAT机器上可以设置目标为tcp&80端口(即将要转发至proxy服务器)的数据包不做NAT,这样,相当于client不知情的情况下,给了client一个http请求的&next&hop网关(当然,严格的将,请求发出的时候,proxy实际上是第二跳,回来的时候是不必经过NAT而直达的)
第二:如果非要在NAT机器上一概做NAT,也无非是来回的路由对称了(当然也还有些细节要注意),请求过程是&client-&NAT-&proxy-&internet&WEB&&;&&而回应过程是&[&internet&WEB-&&]&proxy&-&&NAT-&client&(上面的做法,其实就是省了经过NAT了)[&本帖最后由&急不通&于&&16:34&编辑&]
& 回复于: 16:59:23
是的,如果做策略路由的话,回来的数据包是不用经过&nat&而直达于&client&的
但如果是通过&DNAT&转到&proxy&上的,那回来的时候[color=Red]必[/color]再经&nat&不可
& 回复于: 15:51:16
引用:原帖由&急不通&于&&20:04&发表
1、用本网段强制路由转向把请求发给proxy服务器
2、proxy服务器上配置了透明代理功能的话,会截获http请求,发给squid,由squid去取页面。只要proxy知道到client的路由(其实是proxy的内网卡直连网段的,当然知道&...&
请教一下,具体应该怎样强制转向
& 回复于: 07:56:15
哦,明白了,用在mangle表中mark一下80端口,然后再利用iproute指定到squid-box即可
& 回复于: 11:27:41
学校三层交换机采用神州数码的6512,网段172.16.2.X-172.16.50.X,掩码:255.255.255.0
三层交换机的默认路由指向172.16.1.22(装RH9,作NAT服务器,双网卡,别一个IP172.16.1.21,网关指向172.16.1.100为防火墙,防火墙为方通100)现内网上网一切正常,还需解决下列两个问题:
1、网内不能使用域名访问学校网站(学校网站内部IP为172.16.2.41)
2、根据需要记录内网访问网站日志
恳请各位高手相授
& 回复于: 11:43:48
引用:原帖由&aximofu&于&&07:56&发表
哦,明白了,用在mangle表中mark一下80端口,然后再利用iproute指定到squid-box即可&
还必须要在proxy中把squid的端口改为80,对吧?
& 回复于: 19:54:27
引用:原帖由&aximofu&于&&07:56&发表
哦,明白了,用在mangle表中mark一下80端口,然后再利用iproute指定到squid-box即可&
呵呵&,我叫这个&基于目的端口的策略路由~
& 回复于: 18:01:14
引用:原帖由&woooo_111&于&&11:43&发表
还必须要在proxy中把squid的端口改为80,对吧?&
肯定的...因为iproute只管route转向...不管端口的.
而且...iptables本身直接就有个&route策略模块
仔细看下iptables的帮助文件,有一个很重要的netfilter功能包.名字叫ROUTE.它包含在patch-o-matic&补丁中,给内核打上这个补丁后,就可以在iptalbes的命令中直接支持策略路由.[&本帖最后由&skylove&于&&18:02&编辑&]
& 回复于: 21:48:59
我倒,刚才还说试一下。。。结果很耿直地,squid&的port&修改为&80后就启不来了,提示&can&not&open&http&port&。。。而用&81,&82&这些都可以的&(我绝对看过了,没有任何进程在用80口,stat&-an&中也是没有任何程序在监听80)。。。
难道squid&不可以设置为监听80口&么??&&我在cu的proxy版面也看到好几张类似的询问帖子了。。。
& 回复于: 01:32:37
留个脚印,以后好好学习
原文链接:
转载请注明作者名及原文出处

我要回帖

更多关于 透明代理 的文章

 

随机推荐