Linux设置socks代理
公司里绝大多数主机已经禁止外网访问,仅保留一台主机设置socks
作为代理服务器。如下为对socks这一概念的学习整理
什么是socks
是一种OSI
模型下会话层的协议,位于表示层与传输层之间,作用是:
exchanges network packets between a client and server through a proxy server
出现原因
RFC 1928 这里解释的已经很清楚
The use of network firewalls, systems that effectively isolate an organizations internal network structure from an exterior network, such as the INTERNET is becoming increasingly popular. These firewall systems typically act as application-layer gateways between networks, usually offering controlled TELNET, FTP, and SMTP access. With the emergence of more sophisticated application layer protocols designed to facilitate global information discovery, there exists a need to provide a general framework for these protocols to transparently and securely traverse a firewall
由于工作在会话层,传输层在它下面,所以它的适应场景就要比HTTP
代理灵活,可以代理更多类型的应用数据,日常开发最常用的那些工作在应用层的协议就不在话下了
配置
socks的配置比较简单,可以简单(这是最简单的情况)分为不能访问外网的客户端服务器和可以访问外网代理服务器(这两者之间内网可联通)
代理服务器设置
通过SSH
在本地启动一个 SOCKS
代理服务器
ssh -f -N -D 0.0.0.0:1080 localhost
在这种设置下,客户端通过这个代理发送的请求,都会通过本地机器的网络接口转发出去。启动后可以验证
netstat -tuln | grep 1080
tcp 0 0 0.0.0.0:1080 0.0.0.0:* LISTEN
客户端设置
对于大多数的企业软件来说,其本身自带proxy
设置,此时填入我们代理服务器的IP和开启的端口(一般是1080)即可(当然,如果做的更加精细些,可以加用户密码认证,这里自行查找命令参数),如idea
亦或是Dbvisualizer
一个curl的例子
之前使用如下命令一直无法运行curl
(192.168.1.36是代理服务器IP)
curl --socks5 192.168.1.36:1080 http://www.baidu.com
查找原因是curl
默认走的当前机器DNS
解析,当前机器无法访问外网,自然行不通。需要额外增加--socks5-hostname
,通过 SOCKS
代理服务器处理 DNS
解析,确保即使本地网络无法访问,依然能够成功解析目标网站的域名
curl --socks5-hostname 192.168.1.36:1080 http://www.baidu.com
当时在验证代理服务器的可用性时,这个问题让我卡了很久。若遇到类似的情况,比如其他命令需要通过代理访问外部网络,可以参考这个方法(其他命令可能有专属的参数表示)来解决 DNS 解析的问题
参考
- https://zh.wikipedia.org/zh-sg/SOCKS
- https://datatracker.ietf.org/doc/html/rfc1928
- https://www.freecodecamp.org/chinese/news/osi-model-networking-layers/