Apache Traffic Server正向代理规则配置

两年前写的一篇文章,转到自己的阵地来。

文章以ATS3.3.1-dev版本为例.
作为正向代理我们要实现的是将HTTP(TCP80端口)的数据转发到ATS监听的端口(以8080为例)

ATS的部署一般分为两种方式:
1、ATS与网关(Linux router)一体
2、ATS与网关独立

网关可使用Linux机器来允当,配双网卡。
eth0为LAN口,IP:192.168.1.1 ,LAN下接交换机,将内网PC接入。
eth1为WAN口,IP:192.168.16.1

一、ATS与网关一体
这种模式有两种配置方法
1、使用DNAT配置如下

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j DNAT –to-destination 192.168.1.1:8080

使用这种方式,将修改数据包的目的地址和端口,修改为192.168.1.1 8080。按照正常的数据转发流程,这个数据包从eth0进来,通过PREROUTING、FORWARD、POSTROUTING三个链,从eth1出去然后到达源服务器。
现在在PREROUTING链的NAT表中将协议为TCP,端口为80的数据做了DNAT重定向,定向到了本地的8080端口。现在的数据包将从eth0进来,依次通过PREROUTING、INPUT、OUTPUT、POSTROUTING。

还有一种类似的方式用REDIRECT

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-ports 8080

REDIRECT与DNAT是有差别的,REDIRECT只能是本机转发。

2、使用TPROXY
官方文档里有写TPROXY这种方式,我现在的配置方式与文档上的有些差别。配置如下:

iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK –set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
iptables -t mangle -A PREROUTING -p tcp –dport 80 -j TPROXY –tproxy-mark 0×1/0×1 –on-port 8080

注意,ATS配置也要修改
records.conf

CONFIG proxy.config.http.server_ports STRING 8080:ipv4:tr-in

TPROXY,说是可以在不改变数据包的情况下,将数据包定向到本地监听端口。有了解这个的朋友,麻烦补充一个TPROXY原理。

在records.conf中还有一个tr-pass参数,说明用来解决non-http的,现在还没有弄明白。

二、ATS与网关分开
ATS服务器接入到网关的LAN口的交换机,IP为192.168.1.16
我现在使用的只有DNAT这一种

iptables -t nat -A PREROUTING -i eth0 ! -s 192.168.1.16 -p tcp –dport 80 -j DNAT –to 192.168.1.16:8080
iptables -t nat -A POSTROUTING -d 192.168.1.16 -p tcp –dport 8080 -j SNAT –to 192.168.1.1

第一条规则将从LAN进来的非来自ATS服务器的HTTP请求重定向到ATS服务器。第二条将转发到ATS的数据包的源IP修改成网关的IP,因为如果不修改源IP,那么源IP是客户端的IP,ATS将直接通过LAN口的交换转发把响应的数据包发到客户PC,但客户PC一看源IP是ATS服务器的,它没有发送过这样的请求,会将数据包丢掉。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>