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