网络代理那些事

最近碰到了网络代理,老总韩国有一台永不关机的电脑,通过大陆让我们公司人都用上,为此我学习了下网络代理这些方面的事情.

这些让我想到小时候 刷QQ欢乐斗地主欢乐豆 多开房间填代理的事情,哈哈哈哈哈

nginx正向代理http

nginx 经常反向代理 服务器 实现负载均衡就不多说了

nginx 也可以做正向代理服务器,很简单

一句话,代理服务器站在客户端那边就是正向代理,代理服务器站在原始服务器那边就是反向代理.

正向代理 端口8580,外网ip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 8580;
# 配置 DNS 解析 IP 地址,以及超时时间,
resolver 114.114.114.114 8.8.8.8;
resolver_timeout 30s;

location / {

proxy_pass $scheme://$host$request_uri;
# proxy_set_header 部分的配置,是为了解决如果 URL 中带 "."(点)后 Nginx 503 错误
proxy_set_header Host $http_host;
# 配置缓存大小,关闭磁盘缓存读写减少I/O,以及代理连接超时时间
proxy_buffers 4 256k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
# 配置代理服务器 Http 状态缓存时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
access_log logs/proxy-aceess.log main;
error_log logs/proxy-error.log;
}

使用:mac打开网络偏好设置 – 代理 – http 代理设置外网ip及端口号,Windows 360浏览器设置代理

nginx正向代理https

因为 Nginx 不支持 CONNECT,所以无法正向代理 Https 网站。 如果访问 Https 网站,比如:https://www.baidu.com,Nginx access.log 日志如下: “CONNECT www.baidu.com:443 HTTP/1.1” 400

但是 !!! 但是 !!! 但是~ 总有牛人实现了这个模块

项目地址: https://github.com/chobits/ngx_http_proxy_connect_module

注意看下面2行字:

This module provides support for the “CONNECT” HTTP method.
This method is mainly used to tunnel SSL requests through proxy servers.

完全ok..

Squid 实现

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

基本

1
2
3
# 官网下载安装包
./configure --prefix=/usr/local/squid
make && make install

初始化你在 squid.conf 里配置的 cache 目录

1
/usr/local/squid/sbin/squid -z //初始化缓存空间

启动squid在后台运行

1
/usr/local/squid/sbin/squid -s

这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。

停止 squid

1
/usr/local/squid/sbin/squid -k shutdown

更新squid

1
2
# 载入新的配置文件
/usr/local/squid/sbin/squid -k reconfigure

更多参考 http://blog.sina.com.cn/s/blog_6c764a7b0100sg7u.html

配置

squid的权限控制很灵活,默认的配置只能允许内网用户访问

1
2
3
4
5
# 暂且把所有的acl控制干掉
# 这个IP地址池匹配所有可能的IP地址,但是这样做是有风险的,因为所有人都可以使用你的代理了
vim /usr/local/squid/etc/squid.conf

acl localnet src 0.0.0.1-255.255.255.255

// 载入新的配置文件

1
/usr/local/squid/sbin/squid -k reconfigure

可以愉快的上网啦

使用密码

1.使用密码功能要借助一个包

1
yum install httpd-tools -y

2.htpasswd生成passwd文件并创建用户

1
htpasswd -c /usr/local/squid/etc/passwd sui

3.测试密码

1
2
3
4
5
6
/usr/local/squid/libexec/basic_ncsa_auth /usr/local/squid/etc/passwd
# 输入 用户名 密码
sui 123456
# 提示OK说明成功,ERR是有问题,请检查一下之前步骤
OK
# 测试完成,crtl + c 打断

4.设置配置文件

1
2
3
4
5
6
7
8
vim /usr/local/squid/etc/squid.conf

# 在最后添加
auth_param basic program /usr/local/squid/libexec/basic_ncsa_auth /usr/local/squid/etc/passwd
acl auth_user proxy_auth REQUIRED
http_access allow auth_user
# 这里是端口号
http_port 3128

ss5(很强大的玩意)

SOCKS5 是一个代理协议,它在使用TCP/IP协议通讯的前端机器和服务器机器之间扮演一个中介角色,使得内部网中的前端机器变得能够访问Internet网中的服务器,或者使通讯更加安全。

1
2
3
4
5
6
7
8
9
10
11
12
# 安装依赖(centos7环境)
yum install gcc openldap-devel pam-devel openssl-devel

tar zxvf ss5-3.8.9-8.tar.gz

cd ss5-3.8.9

./configure

make

make install

默认是1080端口,如果想改端口的话,./configure –with-defaultport=10800

2.启动脚本加执行权限

chmod +x /etc/init.d/ss5

3.设置监听端口

1
2
3
vim /etc/sysconfig/ss5  
# Add startup option here
SS5_OPTS=" -u root -b 0.0.0.0:6666"

目前为止只是安装上了ss5,也可以正常运行服务,但实际上代理服务还是用不了,
需要配置一下文件。

4.修改ss5的配置文件

1
vim /etc/opt/ss5/ss5.conf

把auth,permit两处的注释打开(就是auth,permit这两行)

保存并重启ss5(service ss5 restart)

测试工具: 可以适用qq自带的代理设置

5.设置用户,只允许他们使用代理

如需使用用户名密码登录,修改配置文件中的两行

1
2
3
vim /etc/opt/ss5/ss5.conf  
auth 0.0.0.0/0 - u
permit u 0.0.0.0/0 - 0.0.0.0/0 - - - - -

就是将其中的一个’-‘用’u’代替。

设置用户名和密码,一个用户和密码一行,用空格间隔

1
2
3
vim /etc/opt/ss5/ss5.passwd  
user1 123
user2 123

重启服务 ,ok~

danted

ubuntu 通过danted搭建socks5代理
(https://blog.csdn.net/BQL_Email/article/details/80110208)

http://blog.sina.com.cn/s/blog_7f2a9a390102vdqn.html

pam方式添加用户密码形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
danted配置:
danted.conf

logoutput: /var/log/danted.log
internal: 121.65.111.888 port = 10086
external: 121.65.111.888
method: username #none
user.privileged: root
user.notprivileged: 123
user.libwrap: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error # connect disconnect iooperation
method: username
}
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error

}

测试工具 :http://www.proxifier.com/

ssr

俗称纸飞机,很方便.资料很多.大名鼎鼎的shadowsocksR

平常大部分我们用到的都是图形化界面的客户端,客户端,客户端,搭在vps上的是服务端.这里主要记录下centos 7的安装,其他的过于简单.

编译安装

1
2
3
4
5
6
7
8
9
10
11
# 解决依赖
yum install epel-release -y
yum install gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto c-ares-devel libev-devel libsodium-devel mbedtls-devel -y
# 下载
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev
git submodule update --init --recursive

# 进入目录 编译安装三部曲
./autogen.sh && ./configure --prefix=/usr/local/ssr && make
sudo make install

参考网址: https://github.com/shadowsocks/shadowsocks-libev

客户端配置

1
2
3
mkdir - p /etc/shadowsocks
cd /etc/shadows
touch client.json server.json

vim client.json

1
2
3
4
5
6
7
8
9
{
"server":"103.114.161.158",
"server_port":666,
"local_address": "0.0.0.0",
"local_port":1080,
"password":"222",
"timeout":300,
"method":"aes-256-cfb",
}

运行: /usr/local/ssr/bin/ss-local -c /etc/shadowsocks/client.json -v

检测是否设置成功: qq的代理设置工具可以检测,或者 curl --socks5 127.0.0.1:1080 http://ifconfig.me 发现ip变成代理ip

此时mac电脑打开网络设置-代理-SOCKS 设置服务器ip及端口.

服务端配置

vim server.json

1
2
3
4
5
6
7
8
{
"server":"0.0.0.0",
"server_port":3000,
"password":"123456",
"timeout":30000,
"method":"aes-256-cfb",
"nameserver":"8.8.8.8"
}

运行: /usr/local/ssr/bin/ss-server -c /etc/shadowsocks/server.json -v

用客户连接即可.

v2ray

新型代理

目录介绍

1
2
3
4
5
/usr/bin/v2ray/v2ray:V2Ray 程序;
/usr/bin/v2ray/v2ctl:V2Ray 工具;
/etc/v2ray/config.json:配置文件;
/usr/bin/v2ray/geoip.dat:IP 数据文件
/usr/bin/v2ray/geosite.dat:域名数据文件

脚本运行完成后,你需要:

编辑 /etc/v2ray/config.json 文件来配置你需要的代理方式;
运行 service v2ray start 来启动 V2Ray 进程;
之后可以使用 service v2ray start|stop|status|reload|restart|force-reload 控制 V2Ray 的运行。

官方文档 :https://www.v2ray.com/ui_client/service.html

小技巧

curl ifconfig.me 查看自己的公网ip地址,很方便~

  • 由于手机端的vpn特别多,可以通过 proxy server类似软件连接手机ip实现其他设备上网
  • connectify https://www.connectify.me/zh-hans/ 设备发射出热点用于网络连接

工具

Proxifier,sstap 实现ss全局代理

纵有疾风起,人生不言弃!