运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • 操作系统

  • 域名解析

  • 公有云

  • CI&CD

  • 数据库

  • 负载均衡&反向代理

    • keepalived
    • haproxy问题
    • Nginx+keepalived
    • haproxy+keepalived
    • lvs三种模式和调度算法
    • lvs+keepalived
    • lvs+heartbeat
    • nginx缓存加速应用
    • 智能DNS+squid反向代理
  • 存储系统

  • 容器&容器编排

  • 批量管理

  • 邮件系统

  • 监控系统

  • Web服务

  • 虚拟化

  • 防火墙

  • 压测

  • 文件同步

  • 私有云

  • 日志系统

  • 代码仓库&版本管理

  • 安全审计

  • 远程拨号

  • 大数据

  • 统一认证

  • 消息队列

  • Apollo

  • 运维杂记
  • 负载均衡&反向代理
lyndon
2022-06-12

智能DNS+squid反向代理

# 概述

Squid 一款开源的代理服务软件,用于实现HTTP和FTP以及DNS查询,SSL等应用的应用层代理,官方站点:http://www.squid-cache.org

squid 作为应用层代理服务软件,主要提供缓存加速,应用层过滤控制的功能(访问的目标,客户机地址,访问的时间)

squid可构建的代理服务:传统代理、透明代理、反向代理

DNS view(视图) + SQUID 反向代理 = CDN(内容分发网络)

代理的工作原理:

客户端通过代理来请求web页面时,指定的代理服务器首先检查自己的高速缓存,是否有客户端请求的页面,有则直接从缓存中读取页面反馈给客户端,没有则缓存服务器向Internet发送访问请求,将结果缓存到本地并返回给客户端,缓存对象主要是文字,图像等静态的元素。当客户机在不同的时候访问同一WEB元素,不同的客户机访问相同的WEB元素时,可以直接从代理服务器的缓存中获得结果

优点:

  • 减少向Internet提交重复访问过程
  • 隐藏客户端的IP地址
  • 加快客户端访问速度
  • 在代理访问过程中过滤和控制机制(访问目标,客户机地址,时间段)

代理的基本类型:根据实现方式,服务对象的不同,代理服务器可分为传统代理,透明代理和反向代理

传统代理:

普通的代理服务,以提供 HTTP、FTP 代理为主,客户端需要在浏览器或QQ聊天工具,下载软件中手动指定代理服务器的地址和端口号(默认为3128),对于网页浏览器,域名解析也会发给指定的代理服务器。对于企业局域网来说同样可通过代理接入Internet,但只能访问 HTTP、FTP 代理的缓存机制可为用户访问web站点提高访问速度 。

应用场景:QQ程序使用代理可以隐藏本机真实IP地址、下载工具使用多个代理规避服务器的并发连接限制

透明代理(Transparent Proxy):

提供与传统代理相同功能,对于客户端来说代理服务器是透明的,客户端不需要指定IP地址与端口号,而是通过默认路由,防火墙策略将web访问重定向,实际上还是交给代理服务器处理,域名解析优先发给DNS服务器。透明:客户端不需要在浏览器中指定代理服务器的地址和端口号

应用场景:Squid+Iptables 将访问请求通过Iptables(Redirect 重新定向)给本机的代理服务程序

反向代理:

反向代理(Reverse.Proxy)也同样提供缓存加速,只不过服务的对象反过来了。传统代理也好,透明代理也好,大多是为局域网用户访问Internet中的Web站点提供缓存代理;而反向代理恰恰相反,主要为Internet中的用户访问企业局域网内的 Web 站点提供缓存加速,是一个反向的代理过程,因此称为反向代理。

对于一些访问量较大的Web站点(如新浪,搜狐等),提供反向代理可以起到加速作用,同时缓解Web服务器的压力。例如,使用nslookup工具解析出www.sina.com.cn站点对应的IP地址(通常有多个,这是基于DNS解析的负载分担),任选其中一个在浏览器中直接访问,就会发现Squid反向代理服务反向的错误信息。而使用www.sina.com.cn域名访问新浪站点使,用户基本上感觉不出squid服务的存在。

Internet应用:

  • 传统代理
  • 反向代理

局域网应用:

  • 透明代理

# 部署准备

环境描述

dns 192.168.1.11 bind

squid1 192.168.1.12 squid-3.0

squid2 192.168.1.13 squid-3.0

squid3 192.168.1.14 squid-3.0

web 192.168.1.15 jdk-7、tomcat-7

在每台服务器上做以下操作

关闭防火墙和selinux

service iptables stop
setenforce 0
1
2

修改主机名

hostname 主机名
bash
1
2

首选DNS

指向192.168.1.11并修改/etc/hosts文件

vim /etc/resolv.conf

nameserver 192.168.1.11

vim /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.11  dns.amber.com  dns
192.168.1.12  squid1.amber.com    squid1
192.168.1.13  squid2.amber.com    squid2
192.168.1.14  squid3.amber.com    squid3
192.168.1.15  web.amber.com  web
1
2
3
4
5
6
7
8
9
10
11
12
vim scp.sh      //编写脚本实现批量发送配置文件到其他主机
#!/bin/bash
i=(2 3 4 5)
for i in ${i[\*]}
do
scp /etc/resolv.conf 192.168.1.1$i:/etc/resolv.conf
scp /etc/hosts 192.168.1.1$i:/etc/hosts
done

// 执行
sh scp.sh
1
2
3
4
5
6
7
8
9
10
11

# 部署dns服务

yum -y install bind bind-chroot bind-utils bind-libs

cp /etc/named.conf /etc/named.conf.bak

vim /etc/named.conf
options {
     listen-on port 53 { 192.168.1.11; };
     directory "/var/named";
     dump-file     "/var/named/data/cache_dump.db";
     statistics-file "/var/named/data/named_stats.txt";
     memstatistics-file "/var/named/data/named_mem_stats.txt";
     allow-query   { any; };
     recursion yes;
     dnssec-enable yes;
     dnssec-validation yes;
     dnssec-lookaside auto;
     /\* Path to ISC DLV key \*/
     bindkeys-file "/etc/named.iscdlv.key";
     managed-keys-directory "/var/named/dynamic";
};

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };

};

view squid1 {
match-clients { 192.168.1.20; };
zone "amber.com" IN {
    type master;
    file "squid1.amber.zone";
};

};

view squid2 {
match-clients { 192.168.1.30; };
zone "amber.com" IN {
    type master;
    file "squid2.amber.zone";
};

};

view squid3 {
match-clients { 192.168.1.40; };
zone "amber.com" IN {
    type master;
    file "squid3.amber.zone";
};

};

vim /var/named/squid1.amber.zone
$TTL  86400

@    SOA   amber.com.   admin.amber.com.    (
        20150813
        3H
        15M
        1W
        1D
)
        IN   NS       dns.amber.com.
dns       IN   A        192.168.1.11
www       IN   A        192.168.1.12

cp squid{1,2}.amber.zone
vim /var/named/squid2.amber.zone //修改第11行
11 www         IN   A        192.168.1.13

cp squid{1,3}.amber.zone
vim /var/named/squid3.amber.zone //修改第11行
11 www         IN   A        192.168.1.14

named-checkzone amber.com squid1.amber.zone //检查区域配置文件
zone amber.com/IN: loaded serial 20150813
OK

named-checkzone amber.com squid2.amber.zone
zone amber.com/IN: loaded serial 20150813
OK

named-checkzone amber.com squid3.amber.zone
zone amber.com/IN: loaded serial 20150813
OK

/etc/init.d/named start
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

# 部署squid

安装squid

软件下载位置:http://www.squid-cache.org/Versions/v3/3.0/

三台squid安装过程相同:

useradd -M -s /sbin/nologin squid
tar xf squid-3.0.STABLE24.tar.gz -C /usr/src/
cd /usr/src/squid-3.0.STABLE24/
./configure --prefix=/usr/local/squid && make && make install
1
2
3
4

配置squid1

cd /usr/local/squid/ etc/
egrep -v "^$|^#" squid.conf > squid1.conf
mv squid1.conf squid.conf

vim squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 192.168.1.12 192.168.1.13 192.168.1.14
acl SSL_ports port 443
acl Safe_ports port 80       # http

acl Safe_ports port 21       # ftp

acl Safe_ports port 443      # https

acl Safe_ports port 70       # gopher

acl Safe_ports port 210      # wais

acl Safe_ports port 1025-65535   # unregistered ports

acl Safe_ports port 280      # http-mgmt

acl Safe_ports port 488      # gss-http

acl Safe_ports port 591      # filemaker

acl Safe_ports port 777      # multiling http

acl CONNECT method CONNECT

http_access allow all

http_access allow manager localhost

http_access deny manager

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access allow localnet

http_access deny all

icp_access allow localnet

icp_access deny all

#htcp_access allow localnet

#htcp_access deny all

#http_port 3128

hierarchy_stoplist cgi-bin ?

access_log /usr/local/squid/var/logs/access.log squid

refresh_pattern ^ftp:            1440     20% 10080

refresh_pattern ^gopher:        1440     0%  1440

refresh_pattern -i (/cgi-bin/|\?)  0    0%  0

refresh_pattern .           0    20% 4320

icp_port 3130

coredump_dir /usr/local/squid/var/cache

cache_effective_user squid

cache_effective_group squid

visible_hostname squid1.amber.com

http_port 80 accel vhost vport

cache_peer squid2.amber.com sibling 80 3130

cache_peer squid3.amber.com sibling 80 3130

cache_peer 192.168.1.15 parent 8080 0 no-query originserver round-robin name=web

maximum_object_size 10240 KB

maximum_object_size_in_memory 512 KB

cache_mem 32 MB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

复制配置文件到squid2、squid3

scp squid.conf squid2:/usr/local/squid/etc/squid.conf
scp squid.conf squid3:/usr/local/squid/etc/squid.conf
1
2

在squid2、squid3上分别修改以下参数

配置squid2

vim /usr/local/squid/etc/squid.conf
39 visible_hostname squid2.amber.com
41 cache_peer squid1.amber.com sibling 80 3130
42 cache_peer squid3.amber.com sibling 80 3130
1
2
3
4

配置squid3

vim /usr/local/squid/etc/squid.conf
39 visible_hostname squid3.amber.com
41 cache_peer squid1.amber.com sibling 80 3130
42 cache_peer squid2.amber.com sibling 80 3130
1
2
3
4

启动squid

在三台squid上在相同操作

chown -R squid.squid /usr/local/squid/
/usr/local/squid/sbin/squid - k parse/reconfigure   
/usr/local/squid/sbin/squid -z  //生成缓存目录
/usr/local/squid/sbin/squid -D  //启动squid服务
netstat -anptu |grep squid

tcp    0   0 0.0.0.0:80         0.0.0.0:\*          LISTEN   20205/(squid)    

udp    0   0 0.0.0.0:51382        0.0.0.0:\*                20205/(squid)    

udp    0   0 0.0.0.0:3130        0.0.0.0:\*                20205/(squid)  
1
2
3
4
5
6
7
8
9
10
11

若停止服务可以如下操作:

pkill squid

# 安装tomcat

在web服务器上安装tomcat

tar xf jdk-7u65-linux-x64.tar.gz 
mv jdk1.7.0_65/ /usr/local/java

vim /etc/profile
在最后添加以下两行内容
JAVA_HOME=/usr/local/java
PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
tar xf apache-tomcat-7.0.54.tar.gz 
mv apache-tomcat-7.0.54 /usr/local/tomcat7
/usr/local/tomcat7/bin/startup.sh

netstat -anpt |grep 8080
tcp    0   0 0.0.0.0:8080        0.0.0.0:\*          LISTEN   2412/java
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 测试

启动linux客户端使用不同IP访问web服务器

1.配置客户端IP为192.168.1.20

img

访问web服务器

img

查看squid1和web的访问日志

tail -f /usr/local/squid/var/logs/access.log

img

tail -f /usr/local/tomcat7/logs/localhost_access_log.2016-12-24.txt

img

2.配置客户端IP为192.168.1.30

img

访问web服务器

img

tail -f /usr/local/squid/var/logs/access.log

img

tail -f /usr/local/tomcat7/logs/localhost_access_log.2016-12-24.txt

img

3.配置客户端IP为192.168.1.40

img

tail -f /usr/local/squid/var/logs/access.log

img

tail -f /usr/local/tomcat7/logs/localhost_access_log.2016-12-24.txt

img

显示以上页面为成功,智能DNS服务器能根据客户端IP把访问地址解析到对应的squid服务器上,由squid服务器处理请求,如有缓存就直接返回给客户端,否则就到源web服务器上请求数据。

上次更新: 2022/06/12, 15:48:09
nginx缓存加速应用
ceph

← nginx缓存加速应用 ceph→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式