# 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  #查询是否使用代理