局域网下通过代理实现服务器的互联网访问

背景

  局域网下有两台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中就可以了。

  (完~)

  

  

时间: 2024-10-05 18:05:06

局域网下通过代理实现服务器的互联网访问的相关文章

windows下nginx代理ftp服务器

我所在的开发环境里,nginx和ftp在同一台服务器. ftp根目录: nginx的配置: 在nginx.conf中加入: server { listen 9090; server_name localhost; location / { root C:/FTPRoot; index *.*; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; ad

Nginx构建反向代理缓存服务器

防伪码:曾经沧海难为水,除却巫山不是云. 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上,然后由代理服务器去访问Web服务器, 并将Web服务器的Response回传给客户端:  反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提

nginx反向代理缓存服务器的构建

Nginx反向代理缓存服务器构建 一:代理服务可简单的分为正向代理和反向代理: 正向代理:用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上, 然后由代理服务器去访问Web服务器,并将Web服务器的Response回传给客户端: 反向代理:与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就

Nginx反向代理缓存服务器搭建

Nginx反向代理 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上, 然后由代理服务器去访问Web服务器,并将Web服务器的Response回传给客户端: 反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理.

linux-centos7-nginx-反向代理缓存服务器搭建

代理服务器分正向代理,反向代理 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上, 然后由代理服务器去访问Web服务器, 并将Web服务器的Response回传给客户端: 反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理. 反向代理服务器接受来自Int

nginx反向代理缓存服务器构建

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 代理服务可简单的分为正向代理和反向代理: 正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上, 然后由代理服务器去访问Web服务器,并将Web服务器的Response回传给客户端: 反向代理: 与正向代理相反,如果局域网

nginx 反向代理缓存服务器构建

代理服务可简单的分为正向代理和反向代理:   正向代理: 用于代理内部网络对Internet的连接请求(如VPN/NAT),客户端指定代理服务器,并将本来要直接发送给目标Web服务器的HTTP请求先发送到代理服务器上, 然后由代理服务器去访问Web服务器, 并将Web服务器的Response回传给客户端: 反向代理: 与正向代理相反,如果局域网向Internet提供资源,并让Internet上的其他用户可以访问局域网内资源, 也可以设置一个代理服务器, 它提供的服务就是反向代理. 反向代理服务器

nginx反向代理-后端服务器组设置

nginx服务器的反向代理时其最常用的重要功能之一,在实际工作中应用广泛,涉及的配置指令也比较多.下面会尽量详细地介绍对应的指令,及其使用状态. 反向代理一般是互联网需要向内网拉取资源,比如访问一个web网站时,互联网应用通过一个代理服务器到后面真实的web服务器拉取应用所需的数据. nginx服务器反向代理用到的指令如果没有特别的说明,原则上可以出现在nginx配置文件的http块,server块和location块中,但是同正向代理一样,一般是搭建在nginx服务器中单独配置一个server

Linux下squid代理缓存服务环境部署

代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用户想要下载一个主页时,可以向Squid 发出一个申请,要Squid 代替其进行下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid 把保存的备份立即传给用户,使用户觉得速度相当快.Squid 可以代理HTTP.FTP.GOPHER.SS