背景
局域网下有两台Linux服务器,信息如下:
服务器 | IP地址 | 操作系统 | Internet访问 |
HOSTA | 110.1.1.65 | CentOS 6.7 x64 | 是 |
HOSTB | 110.1.1.215 | CentOS 6.7 x64 | 否 |
HOSTA和HOSTB均处在局域网中,二者能够互相ping通,HOSTA开通网络策略支持互联网访问,但是HOSTB不支持,现在需要将HOSTA作为代理服务器,让HOSTB通过HOSTA实现互联网访问,主要需要HOSTB能够进行在线的软件包安装(yum和pip)
方案
当前可尝试的两种方式:
1、使用Nginx反向代理将HOSTA作为http服务器,在HOSTB上配置http全局代理;
2、使用shadowsocks服务端和客户端实现socks5代理,然后使用tsocks和privoxy实现应用的单独代理和二级代理形式的http代理。
方式1不知道是什么原因,配置后并没有效果,但在此记下配置方法;方式2可以正常使用,但是配置稍麻烦。
实现
Nginx反向代理实现
工具:
Nginx 1.10.1
步骤:
1、HOSTA上配置yum源,安装nginx:
在/etc/yum.repos.d目录下新建nginx.repo源文件并进行配置:
vi /etc/yum.repos.d/nginx.repo cat /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/ gpgcheck=0 enabled=1 #注:baseurl中OS和OSRELEASE根据当前系统而定,本例中为: baseurl=http://nginx.org/packages/centos/6/$basearch/ 可参考nginx官网文档
安装nginx:
yum install nginx
2、配置nginx反向代理:
nginx配置文件为 /etc/nginx/nginx.conf,nginx.conf中有一些通用配置,其末尾有对conf.d目录下的conf文件的调用。因此我们无需修改nginx.conf文件,直接在/etc/nginx/conf.d目录下新建配置文件即可(每一个服务新建一个conf文件,便于管理):
vi /etc/nginx/conf.d/proxy.conf cat /etc/nginx/conf.d/proxy.conf server { resolver 180.76.76.76; resolver_timeout 5s; listen 0.0.0.0:8080; location / { proxy_pass $scheme://$host$request_uri; proxy_set_header Host $http_host; proxy_buffers 256 4k; proxy_max_temp_file_size 0; proxy_connect_timeout 30; proxy_cache_valid 200 302 10m; proxy_cache_valid 301 1h; proxy_cache_valid any 1m; } } #注:需要修改的只有resolver和listen行,前者表示dns解析服务器,这里使用百度的公共dns,后者为监听端口,这里配置为8080端口。proxy_pass为配置反向代理的关键参数。
3、启动Nginx反向代理服务:
nginx #注:nginx命令即可直接启动nginx服务; nginx -s stop 停止nginx服务; nginx -s reload 重载nginx服务。
4、HOSTB上配置全局代理:
在HOSTB的 /etc/profile 文件中加入如下内容:
#proxy export http_proxy=http://110.1.1.65:8080 export https_proxy=http://110.1.1.65:8080 #注:同时设置http_proxy和https_proxy为相同是因为有时候使用http代理时会自动重定向到https代理,如果https_proxy不设置会导致代理不生效。
如此便实现了全局代理。当然也可以为应用单独设置http代理,而不用设置全局http_proxy和https_proxy。
但是然并卵,代理服务器可能设置得有问题,http反向代理并不生效。
Shadowsocks + tsocks + privoxy
工具:
python 3.4.4、pip 8.1.2、shadowsocks 2.8、tsocks 1.8-0.5、privoxy 3.0.26
步骤:
1、在HOSTA和HOSTB上分别安装python3.4.4:(虽然当前python最新版为3.5,但3.4.4是最广泛使用的python3版本,各种库的兼容性更好)
这里我们采用源码安装的方式,先从官网下载python3.4.4的源码包(源码包自带pip和setuptools):
wget https://www.python.org/ftp/python/3.4.4/Python-3.4.4.tgz
安装依赖包:
HOSTA因为可以连接互联网,因此可以直接安装依赖包,HOSTB则需要配置本地YUM源,此处省略yum源的配置。依赖包安装:
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make#注:readline并非必要的包,但是强烈建议安装此包后在编译安装python,否则python的命令行将非常不好用
编译安装python:
tar zxvf /root/Python-3.4.4.tgz -C /root/ cd /root/Python-3.4.4 ./configure --prefix=/usr/local/python3 #指定python3安装的位置 make make install ln -s /usr/local/python3/bin/python3.4 /usr/bin/python3
将python3的bin目录添加到系统环境变量中,不添加将导致python3的某些库安装后无法使用其命令。向 /etc/profile 文件中添加以下内容:
export PATH=$PATH:/usr/local/python3/bin #此路径依编译时指定的安装位置而定
用python3替换系统默认的python(可选)
CentOS 6.7自带python2.6,系统默认的python命令指向python2.6。替换方法:
rm -rf /usr/bin/python ln -s /usr/local/python3/bin/python3.4 /usr/bin/python
由于系统自带的yum依赖python2.6,更改默认的python后将导致yum不可用,需要将 /usr/bin/yum 文件中首行的 #!/usr/bin/python 改为 #!/usr/bin/python2.6 即可。
2、在HOSTA上安装shadowsocks服务端:
直接使用python版的shadowsocks服务即可,使用pip安装shadowsocks:
pip3 install shadowsocks #注:python3的pip工具的命令在redhat系linux发行版中均为pip3, 当然也可以通过软链接的方式变为pip: ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
开启shadowsocks服务器:
ssserver -p 6666 -k 12345678 -m aes-256-cfb #注:-p表示端口,-k表示密码,-m表示加密方式
3、在HOSTB上安装shadowsocks客户端:
由于HOSTB无法连接互联网,因此这里直接从github上下载shadowsocks源码(ziggear/shadowsocks),然后传输到HOSTB上解压,只需要解压后得到的shadowsocks目录即可:
scp [email protected]110.1.1.65:/root/shadowsocks-master.zip . unzip shadowsocks-master.zip cp -r shadowsocks-master/shadowsocks /opt
4、在HOSTB上运行shadowsocks客户端:
cd /opt/shadowsocks python local.py -s 110.1.1.65 -p 6666 -k 12345678#注:相关参数与服务端类似,这里客户端端口默认为1080.显示如下内容表示成功连接:2016-10-06 21:00:03 INFO loading libcrypto from libcrypto.so.10 2016-10-06 21:00:03 INFO starting local at 127.0.0.1:1080
此时已经可以为应用配置socks5代理实现互联网访问了。部分应用支持设置socks5代理,如firefox,pip3,其中pip3使用socks5代理的方式为:
pip3 --proxy=127.0.0.1:1080 install pyquery
5、安装和配置tsocks:
部分应用不支持设置socks5代理,此时则可以使用tsocks使应用在socks5代理下运行。安装和配置tsocks的步骤如下:
到tsocks官网 https://sourceforge.net/projects/tsocks/ 下载tsocks源码,或者到pkgs.org直接下载对应版本的安装包(rpm、deb等)。
rpm安装包安装方法:
rpm -ivh tsocks-1.8-0.5.beta5.el6.x86_64.rpm
源码编译安装方法:
tar -zxvf tsocks-1.8beta5.tar.gz cd tsocks-1.8 ./configure make make install #注:如提示缺少依赖包则直接先使用本地yum源进行依赖包的安装
配置tsocks:
tsocks安装后会默认在/etc目录下生成名为tsocks.conf的配置文件(如没有则手动创建即可),向该文件中加入如下内容:
# This is the configuration for libtsocks (transparent socks) # Lines beginning with # and blank lines are ignored # # # # # # This sample configuration shows the simplest (and most common) use of # # # tsocks. This is a basic LAN, this machine can access anything on the # # # local ethernet (192.168.0.*) but anything else has to use the SOCKS version # # # 4 server on the firewall. Further details can be found in the man pages, # # # tsocks(8) and tsocks.conf(5) and a more complex example is presented in # # # tsocks.conf.complex.example # # # # # We can access 10.*.*.* directly # # local = 10.0.0.0/255.0.0.0 # # # # # Otherwise we use the server # server = 127.0.0.1 #your proxy domain or IP address server_type = 5 #to use socks V5 server_port = 1080 #the port of your porxy) #注:最后三行为当前的socks5代理配置
然后便可以利用tsocks实现特殊应用的代理访问了,如:
tsocks firefox #注:此时firefox无需任何配置即可访问互联网
6、安装和配置privoxy:
但是仍有部分应用无法通过tsocks的方式使用socks5代理,它们只支持http代理,如yum,wget,系统全局代理等,此时可以使用privoxy做二级代理,将http代理建立在socks5代理之上,从而实现http代理。
从privoxy官网 下载源码包:
wget http://www.privoxy.org/sf-download-mirror/Sources/3.0.26%20%28stable%29/privoxy-3.0.26-stable-src.tar.gz
编译安装:
autoheader && autoconf && ./configure make make install
#注:如提示缺少依赖包则直接先使用本地yum源进行依赖包的安装
配置privoxy:
默认安装的话,配置文件为 /usr/local/etc/privoxy/config, 向其中加入如下内容:
listen-address 127.0.0.1:8888 forward-socks5 / 127.0.0.1:1080 . #注:此时127.0.0.1(本机)的8888端口用于监听http代理请求,将请求转发到socks5代理
启动privoxy服务:
service privoxy start #Usage: /etc/init.d/privoxy {start|stop|restart}
此时就可以配置http代理了:
YUM代理设置 编辑/etc/yum.conf,在最后加入 # Proxy proxy=http://127.0.0.1:8888 也可以使用proxy_username和proxy_password来配置代理的用户名和密码 proxy=http://username:[email protected]_ip:port/ 这样的配置完成后,所有的用户在使用yum时,都会使用代理,可以说是全局代理。 如果需要为单独的用户配置代理,可以在用户的~/.bash_profile中设置。 Wget的代理设置 编辑/etc/wgetrc,在最后加入 # Proxy http_proxy=http://127.0.0.1:8888 ftp_proxy=http://127.0.0.1:8888 系统全局代理 如果需要为某个用户设置一个系统级的代理,可以在~/.bash_profile中设置: export http_proxy=http://127.0.0.1:8888 export https_proxy=http://127.0.0.1:8888 上面的设置只对某个用户生效,如果要对所有系统用户生效,写在/etc/profile中就可以了。
(完~)