type
status
date
slug
summary
tags
category
icon
password
- 转为ZJU Rule:https://zjurule.xyz/
- 一些学校网站不要走代理,不然访问不了
- 查看IP地址:https://browserleaks.com/ip(还会检测UDP)
Clash:https://clash.wiki/
V2Ray:https://www.v2ray.com/
sock5会代理TCP和UDP,HTTP只会代理HTTP协议
混合端口:sock+http
查看终端代理 ip 地址:
网络请求
域名 → IP
先检查浏览器和本地的DNS缓存,没有的话请求DNS服务器(本地会配置好DNS服务器的IP地址)
本地网段没有这个IP,就会发送给网关
同一局域网通信使用的是Mac地址
路由器的WAN有一个公网地址
需要做NAT(会记录映射关系),把内网源IP转换成公网IP
在公网上转发会不断地修改MAC地址
什么是长城防火墙
不仅审查目标IP、目标端口等等,也会审查数据包内的敏感词
防火墙是一个五层设备,可以直接看到里面的内容
- 直接不让数据包出国
- DNS污染:把你要来的IP改了
- TCP重置攻击:GFW的NAT把IP伪造成谷歌服务器的IP,然后给你回一个“滚蛋”,你就放弃连接了
什么是VPN
VPN是Virtual private network (虚拟专用网)
很多公司是有跨国业务的,甚至就算都在境内,也需要通过专门的通道来沟通,,我自己也在阿里字节用过公司的VPN,这些VPN是经过备案的。
99%的出国流量都是有必要的。
但是VPN协议的特征过于明显,所以会被GFW知晓,所以会被盯上,也就需要你备案才会放你走。
特征:先发包要求构建加密通道
什么是翻墙
只要是能躲开GFW的方式都是翻墙,VPN只是其中一种方法。
其他协议
最经典的就是shadowsock协议,但ss协议也会被GFW主动探测
翻墙方式
- Clash、小火箭都是墙内的ss服务器(手机上的软件),在墙内就完成对数据包的加密,然后发送到海外的服务器再解密,之后代为转发请求。
本地完成加密,无需请求建立加密通道。
- 虚拟网卡 tun/tap,完成硬件层面的模拟,从而代理整台设备的流量
- 上面的方式是软件,权限可能不够,所谓的系统代理,得先将流量给它们才能翻墙,对于一些系统层面的流量,他们可能代理不到。
那就需要软路由的方式了,整个设备的所有流量都发送到路由器上,进行加密,然后再传输。
- 但路由器毕竟算力不够,所以我们可以用一台设备来做中转,也就网关代理,在Clash中可以通过打开「允许局域网连接」来让这台设备变成网关代理。
- 代理服务器会过滤一些网络连接,只允许那些可以访问的通过。而网关却不做任何的过滤。
一般家里的路由器 = 路由器 + 交换机(网关,Gateway)+ DNS
光猫:数据链路,连着路由器
路由器通过PPPoE拨号获得公网IP
交换机到MAC,路由器到IP
Sock
socks是一种代理协议
互联网早期,企业内部网络为了保证安全性,都是置于防火墙之后,socks协议就是为了解决这个问题而诞生的。
虚拟设备
tun:三层,IP
tap:二层,MAC
绝不可能通过虚拟网卡向外界发送数据,外界数据也不可能直接发送到虚拟网卡上。能够直接收发外界数据的,只能是物理设备。
- 可以将数据传输到本机的另一个网卡(虚拟网卡或物理网卡)或其它虚拟设备(如虚拟交换机)上;
- 可以在用户空间运行一个可读写虚拟网卡的程序,该程序可将流经虚拟网卡的数据包进行处理,比如VPN 程序。
需要注意的是,用户空间的程序是无法对数据包做任何封装和解封操作的,所有的封装和解封都只能由内核的网络协议栈来完成。
VPN可以对数据再封装一层隧道IP层。
TUN应用
TAP应用
在虚拟机之间转发数据包
术语
VPS:Virtual private server (虚拟专用服务器)
IP是可以变化的
192.168.0.x 内网IP
127.0.0.1 localhost
NAT穿透
实际情况上,我们还处于运营商的大内网中,我们无法穿透他们的NAT,也就无法从外面访问内部的网络,往往需要通过其他有公网IP地址的服务器进行NAT穿透
todo:内网穿透
其他
IPV6 要2开头才是公网IP,fe开头还是内网
路由模式(IP层) vs 桥接模式(MAC层)
路由器会通过DHCP会内网设备分配内网IP、网关、DNS服务器等信息
系统代理一般是HTTP代理,基于TCP,所以UDP请求,不会走代理
- 查看UDP是否走代理了:https://browserleaks.com/ip
虽然sock5支持UDP代理,但浏览器不支持将UDP流量交给sock5
Linux翻墙
SS/SSR/V2ray等客户端,默认会监听一个socks5端口,例如1080,因此让Linux终端命令走代理的方法便是设置这两个环境变量:
设置好这两个环境变量后,许多软件,例如
curl
、wget
,默认会读取变量的值,发现设置了就走代理,因此可以访问外网。但并不是所有软件都遵循约定,例如
git
就不认这两个环境变量。git
有自己的一套,需要单独设置:如果不想软件走代理,unset这两个环境变量就可以了:
环境变量方式比较简单,但缺点也很明显:
- 环境变量设置是全局的(当前会话),设置后
wget
等命令都会走代理,不想经过代理只能先unset再运行,比较麻烦;
- 不少软件不认这两个环境变量,设置了也不起作用。
proxychains方案
本节以Ubuntu系统介绍使用
proxychains
克服环境变量方案的两个缺点,实现按需、所有软件都能走代理。首先安装
proxychains
:sudo apt install -y proxychains
。然后编辑
/etc/proxychains.conf
文件,在最后的[ProxyList]一节中增加代理设置,例如:接下来,所有希望走代理的命令,前面增加
proxychains
即可,例如:需要连外网的命令比较少,并且可以让所有软件都走代理,因此
proxychains
是推荐方式。- URL:/article/bcea86ad-c006-462c-b56e-8cf84d14e4ba
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!