引入
因为最近不在学校,而学校的部分资源使用了只能校内部分局域网才能访问(注意这里的局域网有对外出口网关),所以之前考虑搭建翻这种网关防火墙的程序。这样需要解决的主要是以下问题
- 内网ip映射成可访问的公网ip
一开始我考虑的方案是使用VPN的结构,采用一个具有公网ip的服务器来搭建VPN server,然后内容通过路由连接服务器,客户端可以通过socks来连接服务器实现请求路由,服务器端通过配置iptables来实现路由转发。
这个也是一个可行的方案,但是朋友的拿出了一个正向代理+DDNS的方案,我觉得很有意思就研究了以下。
(正向代理:实现网关和加速访问的作用
DDNS:通过与花生壳服务器建立连接来将内网的某个端口暴露给外网,本身是通过服务器与客户机不断发送连接请求来实现中间链路的keep alive,缺点是内网的出口网关上的端口是在不断改变的,所以无法建立类似VPN之类协议需要的长连接)
代理的概念
代理主要分以下三种
正向代理
用户需要知道代理的ip和端口和目标服务器的地址,代理服务器通过代替客户机去访问目标ip,主要实现以下功能(我用到的)
隐藏源ip
绕过防火墙或者损坏链路
访问控制
反向代理代理
用户需要知道代理服务器的ip,代理服务器代理目标服务器的请求,可以简化成如下场景
现有目标服务器ip 11.11.11.11
代理服务器的ip为 11.12.12.12
我需要请求目标的服务器上的图标a.jpg
我可以通过请求 11.12.12.12/.../a.jpg 获得
实现的主要功能
缓存内容,减缓服务器的压力(我通过建立多个反向代理,每个代理上都存一部分目标服务器上的静态资源,那么大部分请求静态资源的请求就没必要继续传送到目标服务器上)
加速访问(集群实现能力扩展也是采用了相似的策略
透明代理
用户需要知道代理服务器和端口的ip,代理服务器实现的是一个网关路由的作用,实现路由转发和访问控制的作用,目标服务器和客户机在使用过程中是感知不到代理服务器的存在。
主要功能:
访问控制
内容过滤
配置Squid
Squid是一个很早之前开始的项目,经历了时间和实践的检验,他支持以上三种模式,并且能够提供不错的性能,本身的配置不太复杂,其他相关的内容自行百度吧。
配置准备
设备:可以通过ip访问的主机一台:e.g具有公网IP的电脑或服务器
测试电脑一台
系统:Ubuntu12.04 (在这样的环境下操作的,其他环境下不能保证环境一致)
在主机上进行如下操作
安装 squid
sudo apt-get install squid
最后下载下来的是squid3
路径位于/etc/squid3
验证squid的安装位置可以通过find 命令查找确认
find / -name "\*squid\*"
下一步是配置squid的参数
vi /etc/squid3/squid.conf
修改以下字段
http_access deny all -> http_access allow all #开启访问权限
http_port 3128 -> http_port 3131 #处于安全考虑修改默认端口
cache_mem 256MB -> cache_mem 32MB #根据服务器内存调整缓存内容的大小
cache_mgr webmaster -> cache < email address > #cache出现故障的时候通知的邮箱
visible_hostname localhost -> visible_hostname < some message or mark> #错误页面中会包含的关于hostname 的提示
dns_v4_first off -> dns_v4_first on #在dns支持ipv6的时候服务器默认是拿到ipv6 ip,但是网关不支持ipv6的情况下,我们可以通过设置这一项来强制服务器优先使用ipv4 ip
开启squid
sudo service squid3 stop
sudo squid -z #初始化
sudo service start
附言
代理终究是代理网络请求,所以如果访问的内容不经过加密还是会被相关的机构过滤 比如 GWF
之前我在国外的服务器上搭建了正向代理,发现youtube之类的很多国外网站访问不了,在确认问题的时候发现了这个。
Linux下配置Squid代理服务器:http://www.linuxdiyf.com/linux/12366.html
Linux入门教程:Squid代理服务器:http://www.linuxdiyf.com/linux/10528.html
RHEL6.4搭建Squid代理服务器:http://www.linuxdiyf.com/linux/10655.html
10个关于Linux中Squid代理服务器的实用面试问答:http://www.linuxdiyf.com/linux/10443.html
CentOS 6.4下Squid代理服务器的安装与配置:http://www.linuxdiyf.com/linux/7048.html