背景

  局域网下有两台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 root@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

  另外建议在HOSTB实现互联网访问功能后,使用pip3安装shadowsocks(像HOSTA一样),然后就可以直接执行下面的命令与shadowsocks服务端连接,而无需依靠上文的shadowsocks源码了:

sslocal -s 110.1.1.65 -p 6666 -k 12345678

  当然也可直接使用上面的源码安装shadowsocks的ssserver和sslocal:

 

python3 setup.py install

 

  另外建议使用shadowsocks配置文件来启动和访问ssserver服务,配置文件shadowsocks.json(文件名任意)如下:

{
    "server":"my_server_ip",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

  服务器端执行如下命令:

ssserver -c /etc/shadowsocks.json -d start          # -d表示后台启动
# ssserver -c /etc/shadowsocks.json -d stop           #关闭服务

  客户端执行如下命令:

nohup sslocal -c /etc/shadowsocks.json

 

  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

  编译安装:

tar -zxvf privoxy-3.0.26-stable-src.tar.gz
cd privoxy-3.0.26-stable
groupadd privoxy
useradd -g privoxy privoxy #编译provixy需要先创建privoxy组和用户,但编译安装命令仍然是在root用户下执行的
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:password@proxy_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中就可以了。

  

  本文链接:http://www.cnblogs.com/xshrim/p/5934032.html 

  

 

 

  

posted on 2016-10-06 18:06  xshrim  阅读(10528)  评论(0编辑  收藏  举报