局域網下通過代理實現服務器的互聯網訪問


背景

  局域網下有兩台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 

  

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM