优质SS/SSR/Trojan/Xray/V2Ray机场推荐 | IPLC/IEPL专线加速器梯子推荐 | 解锁奈飞Netflix/HBO/Hulu等国外流媒体
透明代理简单地说就是不让被代理的设备感觉到自己被代理了。简单地说就是,被代理的设备上不需要运行任何代理软件(比如Xray、V2RayNG等),当你连接上网络时,你的设备已经被代理了。
这也意味着,代理的软件运行在别的地方,比如运行在路由器中,通过路由器上网的设备就自动被代理了。
透明代理的实现目前主要有两种方式:
可用Windows/Linux(包括安卓)实现。因为实现过程比较简单,很少有教程,我这里简单描述一下。
Windows[3] [TUN/TAP] 绕过局域网
启动。控制面板
->网络和 Internet
->网络和共享中心
->更改适配器设置
,找到TAP-Windows Adapter
和Microsoft Wi-Fi Direct Virtual Adapter
。TAP-Windows Adapter
,属性
->共享
,勾选允许其他网络用户通过此计算机的 Internet 连接来连接
,在家庭网络连接
中选择Microsoft Wi-Fi Direct Virtual Adapter
的那个网络连接,点击确定。iptables与nftables实现透明代理的原理相同,下文统一使用iptables。
基于iptables的透明代理实现只能用于Linux系统(包括openwrt/安卓)。由于其比tun2socks更高效率以及适合在路由器中配置而广泛使用。
现存的三篇白话文透明代理教程其实讲的都是这种基于这种方案的透明代理实现,它们是:
新 V2Ray 白话文指南-透明代理、
新 V2Ray 白话文指南-透明代理(TPROXY)、
透明代理(TProxy)配置教程。其中第一篇是基于iptables-redirect模式,已经过时了,不建议使用,仅供参考。第二篇和第三篇讲的都是基于iptables-tproxy模式的透明代理实现。
Netfilter
来管理网络,Netfilter
模型如下:局域网设备通过路由器访问互联网的流量方向:
PREROUTING链->FORWARD链->POSTINGROUTING链
局域网设备访问路由器的流量(如登陆路由器web管理界面/ssh连接路由器/访问路由器的dns服务器等)方向:
PREROUTING链->INPUT链->网关本机
路由器访问互联网的流量方向:
网关本机->OUTPUT链->POSTINGROUTING链
通过使用iptables操控PREROUTING链
和OUTPUT链
的流量走向,转发到Xray,就可以代理局域网设备和网关本机。透明代理的难点就在于路由,所谓路由,就是区分哪些流量是直连的,哪些该被代理,所以我个人认为叫做
分流更加合适。
我们可以把路由由易到难分为以下几个阶段:
上面说的三篇教程,都是在第四阶段。所以新手直接阅读可能显得有点难懂。
比如,刷了OpenWRT的路由器
2. 在网关(路由器)准备好Xray可执行文件以及配置文件配置文件监听12345端口,开启tproxy:
{ "log": { "loglevel": "warning" }, "inbounds": [ { "port": 12345, "protocol": "dokodemo-door", "settings": { "network": "tcp,udp", "followRedirect": true }, "streamSettings": { "sockopt": { "tproxy": "tproxy" } } } ], "outbounds": [ { 你的服务器配置 } ] }
我们由易到难,不写routing,只写一个inbound一个outbound。
PREROUTING链
的流量,都转发到Xray中。运行Xray,执行以下指令:
ip rule add fwmark 1 table 100 ip route add local 0.0.0.0/0 dev lo table 100 iptables -t mangle -N XRAY iptables -t mangle -A XRAY -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A XRAY -p udp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A PREROUTING -j XRAY
当你输入完之后,如果你是使用ssh连接到网关上的,你会发现ssh的连接断开了(不用紧张,断电重启即可恢复),并且透明代理无法上网;如果你是的网关是虚拟机,你会发现网关本身也无法上网,并且Xray日志access_log中出现许多源地址为目标地址,目标地址为WAN_IP的请求。
理论上网关本机访问公网只会经过OUTPUT链
和POSTROUTING链
,为什么操控PREROUTING链
会导致网关无法上网呢?这是因为网络通讯往往是双向的,虽然网关访问公网IP不需要经过PREROUTING链
,但被访问的服务器向网关返回信息时要经过PREROUTING链
,且这部分被转发到Xray了,因此出现了日志中的反向请求。我们修改一下规则,源IP不是来自局域网的则返回。重启网关,运行Xray,执行以下指令:
ip rule add fwmark 1 table 100 ip route add local 0.0.0.0/0 dev lo table 100 iptables -t mangle -N XRAY #网关LAN_IP地址段,运行命令"ip address | grep -w "inet" | awk '{print $2}'"获得,是其中的一个 iptables -t mangle -A XRAY ! -s 网关LAN_IP地址段 -j RETURN iptables -t mangle -A XRAY -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A XRAY -p udp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A PREROUTING -j XRAY
然后你会发现,虽然ssh连接断开了,但是透明代理已经可用了。只要我们修改系统dns为公共dns,就能正常上网了(因为现在网关访问不了,所以dns设置为网关是不行的)。
至此,第一阶段就完成了。之所以无法访问网关,是因为代理规则代理了全部流量,包括访问网关的流量。试想在VPS上访问你本地的网关,肯定是访问不了的。
重启网关,运行Xray,执行以下指令:
ip rule add fwmark 1 table 100 ip route add local 0.0.0.0/0 dev lo table 100 iptables -t mangle -N XRAY #所有目标地址在网关所在网段的请求直连 #通过运行命令"ip address | grep -w "inet" | awk '{print $2}'"获得,一般来说有多个 iptables -t mangle -A XRAY -d 网关所在网段1 -j RETURN iptables -t mangle -A XRAY -d 网关所在网段2 -j RETURN ... iptables -t mangle -A XRAY -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A XRAY -p udp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A PREROUTING -j XRAY使用这条规则后,上一条规则
iptables -t mangle -A XRAY ! -s 网关LAN_IP地址段 -j RETURN
便成为了多余规则,可以删去。至此,第二阶段完成。网关已经可以访问,ssh不会断开。
我们平时用的DNS一般来自路由器,但这个iptables规则只代理了局域网中的设备,却没有代理网关本机,这样返回的DNS查询结果可能是错误的或者污染的。
iptables-tproxy不支持对OUTPUT链
操作,但是Netfilter
有个特性,在OUTPUT链
给包打标记为1
后相应的包会重路由到PREROUTING链
上。所以我们就给网关本机需要代理的请求在OUTPUT链
上标记1
即可。如果要代理网关本机发出的的全部请求,就会引入一个问题,Xray运行在网关,Xray向代理服务端发送请求,这个请求又被代理了,就形成了回环。
因此要代理网关本机,就要避免回环发生,即代理规则中规避Xray请求的流量。
常见的方法有三种:重启网关,运行Xray,执行以下指令:
#代理局域网设备 #继承上一个阶段的成果 ip rule add fwmark 1 table 100 ip route add local 0.0.0.0/0 dev lo table 100 iptables -t mangle -N XRAY iptables -t mangle -A XRAY -d 网关所在网段1 -j RETURN iptables -t mangle -A XRAY -d 网关所在网段2 -j RETURN ... iptables -t mangle -A XRAY -p tcp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A XRAY -p udp -j TPROXY --on-port 12345 --tproxy-mark 1 iptables -t mangle -A PREROUTING -j XRAY #代理网关本机 iptables -t mangle -N XRAY_MASK iptables -t mangle -A XRAY_MASK -d 网关所在网段1 -j RETURN iptables -t mangle -A XRAY_MASK -d 网关所在网段2 -j RETURN ... iptables -t mangle -A XRAY_MASK -d VPS公网ip/32 -j RETURN iptables -t mangle -A XRAY_MASK -j MARK --set-mark 1 iptables -t mangle -A OUTPUT ! -p icmp -j XRAY_MASK
但是这么配置有个缺点,如果使用CDN或者VPS很多的话,就不好写规则了。
三个白话文教程都是使用这种方法规避,自行参考,这里不再赘述。
这样就完成了第三阶段的代理,也就是平时说的全局代理。但是记得把网关的DNS服务器设置为国外的DNS服务器,否则可能依然返回被污染的结果。
其实,并不是所有人都需要实现第四阶段。全局代理对于大部分情况已经适用。
特别是对于旁路由而言。需要代理时,将网关调成旁路由的IP,不需要代理时,将网关换回主路由IP。
至于第四阶段的具体实现,那三篇白话文教程讲的都是。在理解了上面的内容后,再去看那三篇白话文教程,就比较容易理解了。
上面的规则只对ipv4生效,如果还想要代理ipv6请求,则使用ip6tables命令,用法与iptables基本相同。
PREROUTING链
规则中加一条iptables -t mangle -A XRAY ! -s 网关LAN_IP地址段 -j RETURN
,即在第一阶段使用、第二阶段被删除的指令。如果不写,WAN口中同网段的其它人可以将网关填写成你的WAN_IP,从而蹭你的透明代理用,还可能带来一定的危险性。手动配置 PC 的网络,将默认网关指向树莓派的地址即 192.168.1.22。此时 PC 应当能正常上网(由于还没设置代理,“正常”是指可以上国内的网站)
。实际上,Ubuntu、CentOS、debian等系统就算开启了IP转发,PC也不能正常上网,这是正常的。事实上只有OpenWRT能做到文中所描述的那样,据 @BioniCosmos点拨,这是由于一般的Linux系统没有Masquery规则。
,解决方法见
[透明代理]通过gid规避Xray流量-配置最大文件大开数&运行Xray客户端Windows Server下的路由器设置和翻墙教程速蛙云机场跑路之后,有哪些替代机场推荐?稳定靠谱机场推荐Firebird vs MySQLClash怎么修改混淆如何选择优质VPN软件:下载及使用Shadowrocket及同类工具的技巧与经验2024款腾势D9混合动力版:豪华科技,省油又安全奈飞合租指南v2ray服务器免费30天详细教程利用VMware进行端口映射Clash Linux版使用教程及常见问题解答如何选择最安全的VPN如何下载抖音?2022年最新免费Shadowrocket美区小火箭账号分享,免费获取共享ID什么是程序化广告?联通免流v2ray使用教程Flyingbird飞鸟机场——优质高速稳定机场推荐(优惠码💰💰) <span>FlyingBird机场</span>V2RayNG 新手教程指南︱安卓翻墙插件白月光机场2024国庆节限时优惠码便宜高性价比全IPLC专线机场推荐:TotoroCloud 龙猫云,原生IP解锁流媒体,解锁 Chatgpt,TiktokV2Ray客户端哪个好?SSRPlus,PassWall,OpenClash插件对比