Web Proxy

之前ssh如何设置转发的博客ssh-forward

我们了解到,其实ssh动态转发就是最简单的代理。

代理原理

  • 第一层:由你的流量发起段到代理软件的接入端,比如你的浏览器到你使用的Clash。
  • 第二层:由代理软件到远端服务器,比如由你使用的Clash到某香港的服务器。
  • 第三层:由远端服务器到目标服务器,比如由某香港的服务器到谷歌的服务器。

不管你使用什么代理软件,这些软件都会在本地监听一个端口来作为代理的接入端。比如Clash大多监听7890端口,v2rayNG默认监听10809端口。

通常情况下,使用Socks5代理或HTTP代理。区别在于HTTP代理只能够代理HTTP协议的流量,SOCKS5则支持代理几乎所有的TCP和UDP流量。所以在大部分场景下,代理软件监听的SOCKS5端口使用更多一些。

如何启用全局代理?

通过TAP/TUN

  • TAP模式其实就是在设备上利用技术手段安装一个虚拟的”网卡”,从而使得系统所有的流量都能经过代理软件。
  • 而TUN模式则和TAP模式异曲同工。TUN工作在更高的网络层,不需要虚拟的TAP设备,也能实现跟TAP类似的效果。不仅如此,TUN的性能也比TAP要好。目前,

测试代理

终端测试

1
curl -I google.hk

Q:为什么终端curl无法访问而浏览器却可以访问谷歌?

使用clash中遇到的一个问题。在系统代理模式下,浏览器访问谷歌好好的,bash不管是ping还是curl都无法访问Google。

浏览器运行的端口是随机的(只要系统允许的端口)

这里找到一个原因可能是终端没有正确配置代理。在bash里用env命令也没有显示出proxy有关的环境变量。但是为什么设置里可以看到clash已经配置了http,htps,socks的代理。

查找发现:在macOS系统中,代理设置通常不会直接存储在环境变量中,而是通过系统偏好设置中的网络配置进行管理。在macOS系统中,终端访问网络时不会自动使用系统配置文件中的代理设置,这是因为macOS的网络代理设置和终端程序的网络访问是分开管理的。

解决方案:

1
2
3
export http_proxy="http://127.0.0.1/8888"
export https_proxy="http://127.0.0.1/8888"
export socks_proxy="socks://127.0.0.1/8885"

Q:在终端运行程序下载文件,会不会使用系统代理呢?

系统代理设置通常只影响那些明确支持系统代理设置的应用程序,比如一些浏览器。但是,并不是所有的应用程序都会使用系统代理设置。有些应用程序可能有自己的代理设置,或者可能根本不支持代理。

  • 环境变量:如果设置了环境变量,Python程序可能会使用这些代理。
  • 代码中的代理设置:如果Python代码中显式设置了代理,那么它将使用这些设置。
  • 系统代理设置:通常不会直接影响Python程序,除非通过环境变量。
CC BY-NC-SA 4.0
Built with Hugo