# socks技术方案
- Socket Secure,网络协议,处于会话层,用于管理网络连接并提供安全性和隐私保护;
- 通过Socks代理服务器,实现隐藏真实ip和其他身份信息,匿名访问互联网资源。
- 防火墙系统作为应用层网关,将内网与外网隔离开来,管理网络之间的通信。socks5 协议位于应用层和传输层之间,提供了一种能够在防火墙上透明且安全地通信的通用方式。
# 与VPN的对比
* 与VPN的技术路线不同;VPN基于stun技术路线;socks基于代理;
# 参考文档
- socks5协议-https://www.cnblogs.com/chr1ce/articles/16246884.html
- linux设置socks代理-https://blog.csdn.net/weixin_39712991/article/details/143665010
# socks的简易流程
- 参考文档: socks5 代理服务器原理及实现--https://zhuanlan.zhihu.com/p/703624588
# 协商验证阶段
- socks5客户端与服务端通信,进行认证;
- 类似于stun的过程,本地启动客户端代理;
# 传输阶段
- 宿主机某个应用正常的请求经过socks客户端报文封装后,传递给socks服务端
- socks服务端解析地址,并创建stun类型的tcp连接到目标地址;
- 宿主机应用通过socks客户端发送报文,经过服务端的stun完成整个链路;
# socks的关键
- socks客户端代理与socks服务端;
- socks服务端,即常说的节点;
- 某个应用需要使用代理,应用本身需要支持支持客户端代理才行;
# 客户端代理
- 大多数主流软件都提供了客户端代理功能,常用的代理参数:http_proxy,https_proxy;
- 也有直接用proxy的,常见的还有ftp_proxy,需要注意,具体的代理协议支持程度由应用本身决定,而不是通过这个参数名称判断,如http_proxy不只是能代理http协议;
- 代理机制是跟应用绑定的,比如: 开启魔法后,浏览器能访问google,youtube等,但是直接ping或者telnet不能通;这与vpn是明显不同的;
# 常用的socks客户端代理
- ShadowSocksR
- ClashForWindows,ClashForLinux
- AriConnect
- V2ray
# 备注
- 大部分已经跑路
- 通常被称之为机场
# linux常见应用代理配置
# 参考文档
- linux常用配置代理proxy--https://www.cnblogs.com/mq0036/p/17351647.html
# 备注
- linux通过设置http_proxy,https_proxy变量,可以设置全局代理;
- yum,wget,curl配置代理都是有针对性的代理,即时配置了全局代理,仍然不能生效;
# docker配置代理
- 全局代理配置后,docker不能生效,要单独配置!
- 具体在
/etc/docker/daemon.json
中配置即可.参考:给docker配置socks代理--https://www.cnblogs.com/lrui1/p/18353634 - 注意,代理最好使用局域网ip,使用127.0.0.1可能会踩坑
{
"registry-mirrors": ["https://registry.devops-engineer.com.cn/"],
"data-root":"/hd01/docker-root",
"proxies":{
"http-proxy":"http://127.0.0.1:7890",
"https-proxy":"http://127.0.0.1:7890"
},
"dns": ["8.8.8.8", "8.8.4.4"]
}
systemctl daemon-reload
systemctl restart docker
- 注意,如果daemon.json没有配置dns,内部将无法正常访问域名(如Dockerfile中安装文件将失败);下方配置示例
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
# yum设置代理
- 在
/etc/yum.conf
中配置 - 添加proxy变量
# wget配置代理
- 在
/etc/wgetrc
中进行配置 - 添加http_proxy,https_proxy配置;
- 注意,实际使用中可能有出入,新版本可能已经支持全局代理;
# curl配置代理
- 在使用过程中,使用参数 http_proxy=socks客户端;
- 注意,实际使用中可能有出入,新版本可能已经支持全局代理;
# git使用代理
- 在使用命令中,使用参数 http_proxy=socks客户端;
- 注意,实际使用中可能有出入,新版本可能已经支持全局代理;
git config --global http.proxy http://127.0.0.1:7890 #代理
git config --global --unset http.proxy #取消代理
git config --global http.proxy #查询是否使用代理