代理技术
代理技术
代理协议工作在哪一层
Socks代理协议是一种工作在线路层的协议,HTTP代理协议是一种工作在应用层的协议。
基于虚拟设备TUN/TAP技术的“真”全局代理
SOCKS5工作在线路层,SOCKS协议位于传输层(TCP/UDP等)与应用层之间,所以能代理TCP和UDP的网络流量,对于之下的网络流量,就无能为力了。
TUN2SOCKS使用tun网卡实现了更加底层的流量代理,这种全局代理不仅可以代理传输层流量,还可以代理其它所有应用程序的请求流量,比如代理游戏的流量,代理所有命令行工具的流量。
一般的代理软件的“全局代理”指的是不论访问的IP是哪的全部都走代理,但是这种代理软件使用的代理协议的工作层次是不够底层的,在cmd会发现无法ping通google(但是使用curl却能够获得google的html内容,这是因为ping走的是ICMP而curl走的是HTTP)。
而像Netch等比较专业的代理软件则使用了tun2socks等虚拟网卡技术,在使用这种软件的全局代理时是可以在cmd中使用ping通google的。
因此,像要使用pip、apt-get等需要在shell中访问外网的场景时,强烈推荐Netch等使用基于虚拟网卡的能够代理低层数据包的软件。
如何使得虚拟机的流量也走代理
场景:
- VMware Ubuntu虚拟机要使用apt等安装软件(显然我们不想搞什么换源)
- 开发板(例如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进行如下设置。
VMware中将虚拟的网络适配器设置为NAT,取消虚拟机Ubuntu的手动DNS,设置为自动。
设置完毕,效果如下。
需要注意的是,这种方法设置下虽然宿主机和虚拟机均能ping通google,但是所显示的google的IP都是错误的(是一个保留IP地址),这应该与Clash TUN网卡的工作机制有关系。
方法3:
在虚拟机里直接跑clash
待研究的内容
KCP
DNS Hijack(AioDNS)
合适的软件
Clash真香😄