代理服务原理
代理服务器有很多种,大体来说有http,ftp,socks代理三种,其中又分透明代理和不透明代理。其中透明代理一般是网关,是硬件。所以这里讨论不透明代理。
当机器通过代理服务器上网时。通讯是分两次的,先是机器和代理服务器通讯,再是代理服务器和目的地址通讯。
- 机器和代理服务器通讯时,目的IP是代理服务器的IP。
- 代理服务器和目的地址通讯时,源IP是代理服务器的IP。
HTTP代理过程
用http代理上网的过程如下:
机器和代理服务器建立TCP连接。
机器发出GET命令给代理服务器(这时GET命令中包含URL或IP地址,数据是明文)。
代理服务器将其中的URL转换为IP地址,可能会有DNS。将源数据包中的数据拷贝下来。去掉URL,重新组包,再发出去。
代理方式对比
http (get)
http (connect)
ftp (user user@host:port)
ftp (user user@host port)
ftp (open host)
ftp (site host)
ftp (site user@host)
socks5
socks4
这些代理方式都有一个特点:在连接时,都会先和代理服务器连接,发出请求,一般为 command url,command就是get,connect,user 等。http和ftp都一样,可以通过关键字来识别。而且url是明文。Socks有些特别。它不是明文的,而是十六进制数据。要获得IP地址,还要经过转换。
Nginx代理Socts5
Nginx版本 >= 1.13,但是并不会默认安装,需要在编译时通过指定 –with-stream 参数来激活这个模块。
配置文件
1 | user root; |
Dockerfile
1 | FROM nginx |
运行Docker
1 | docker run --name nginx_proxy -d --rm -p 8000:8000 image:nginx |