当前位置: 首页 > news >正文

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/
http://www.lryc.cn/news/482936.html

相关文章:

  • 【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
  • 蓝队技术学习
  • openpyxl处理Excel模板,带格式拷贝行和数据填入
  • 无法在带有 WHM/cPanel 的 Ubuntu 22.04 服务器上安装 PHP 7.x – 缺少软件包
  • 数据结构-递归函数的调用栈过程
  • 在 WPF 中,如何实现数据的双向绑定?
  • pyinstaller 打包 playwright -- 如何将浏览器打包到程序中
  • vue系列=状态管理=Pinia使用
  • [HarmonyOS]简单说一下鸿蒙架构
  • 【Python TensorFlow】进阶指南(续篇一)
  • 机器视觉和计算机视觉的区别
  • RDD 算子全面解析:从基础到进阶与面试要点
  • Vue.js动态组件使用
  • 智能合约在供应链金融中的应用
  • 【大数据技术基础 | 实验十】Hive实验:部署Hive
  • Golang常见编码
  • 搭建Spring gateway网关微服务
  • 性能测试|JMeter接口与性能测试项目
  • spring boot 难点解析及使用spring boot时的注意事项
  • 通过投毒Bingbot索引挖掘必应中的存储型XSS
  • STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55
  • 【Linux篇】面试——用户和组、文件类型、权限、进程
  • PET-文件包含
  • 实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新
  • PostgreSQL 修改字段类型但是存在视图依赖
  • 基于.NET 9实现实时进度条功能:前后端完整示例教程
  • 力扣 LeetCode 19. 删除链表的倒数第N个结点(Day2:链表)
  • 音频格式转换
  • npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系
  • 【Spring】Spring框架中有有哪些常见的设计模式