代理技术

代理技术

代理协议工作在哪一层

Socks代理协议是一种工作在线路层的协议,HTTP代理协议是一种工作在应用层的协议。

基于虚拟设备TUN/TAP技术的“真”全局代理

SOCKS5工作在线路层,SOCKS协议位于传输层(TCP/UDP等)与应用层之间,所以能代理TCP和UDP的网络流量,对于之下的网络流量,就无能为力了

TUN2SOCKS使用tun网卡实现了更加底层的流量代理,这种全局代理不仅可以代理传输层流量,还可以代理其它所有应用程序的请求流量,比如代理游戏的流量,代理所有命令行工具的流量。

一般的代理软件的“全局代理”指的是不论访问的IP是哪的全部都走代理,但是这种代理软件使用的代理协议的工作层次是不够底层的,在cmd会发现无法ping通google(但是使用curl却能够获得google的html内容,这是因为ping走的是ICMP而curl走的是HTTP)。

image-20220525102729845

而像Netch等比较专业的代理软件则使用了tun2socks等虚拟网卡技术,在使用这种软件的全局代理时是可以在cmd中使用ping通google的。

image-20220525103044641

因此,像要使用pip、apt-get等需要在shell中访问外网的场景时,强烈推荐Netch等使用基于虚拟网卡的能够代理低层数据包的软件。

如何使得虚拟机的流量也走代理

场景:

  1. VMware Ubuntu虚拟机要使用apt等安装软件(显然我们不想搞什么换源)
  2. 开发板(例如PYNQ)上跑的Ubuntu要使用apt等安装软件(显然我们不想搞什么换源),且开发板是通过网线与PC连接的。

方法1:

首先在宿主机上打开代理,并且确定允许其他设备连入Socks5本地端口

之后在虚拟机终端中输入以下命令:

export ALL_PROXY=socks5://192.168.86.1:2801

注意更改IP和端口。

方法2:

注意:2022/10/19:在win10企业版21H2(内部版本19044.2130)、VMware Workstation16 Pro、Ubuntu 22.04 LTS上发现该方法失效

首先需要在宿主上运行起clash,并将clash进行如下设置。

image-20220724115525450

image-20220724122944605

VMware中将虚拟的网络适配器设置为NAT,取消虚拟机Ubuntu的手动DNS,设置为自动。

image-20220724120024200

image-20220724115856787

设置完毕,效果如下。

image-20220724120101155

image-20220724123536306

需要注意的是,这种方法设置下虽然宿主机和虚拟机均能ping通google,但是所显示的google的IP都是错误的(是一个保留IP地址),这应该与Clash TUN网卡的工作机制有关系。

image-20220724123639930

方法3:

在虚拟机里直接跑clash

待研究的内容

KCP

DNS Hijack(AioDNS)

合适的软件

Clash真香😄