V2ray TProxy 透明代理的小技巧

1,其实一般的正常使用,无需把所有端口都代理进来。如果仅仅是网页翻墙,仅需将 80 443 加入代理即可。配置如下:


#新建路由表

sudo ip route add local default dev lo table 100
sudo ip rule add fwmark 1 lookup 100

#IPv4规则

sudo iptables -t mangle -N V2ray
sudo iptables -t mangle -A V2ray -d 10.0.0.0/8 -j RETURN
sudo iptables -t mangle -A V2ray -d 127.0.0.0/8 -j RETURN
sudo iptables -t mangle -A V2ray -d 169.254.0.0/16 -j RETURN
sudo iptables -t mangle -A V2ray -d 172.16.0.0/12 -j RETURN
sudo iptables -t mangle -A V2ray -d 192.168.2.0/24 -j RETURN
sudo iptables -t mangle -A V2ray -d 224.0.0.0/4 -j RETURN
sudo iptables -t mangle -A V2ray -d 240.0.0.0/4 -j RETURN
sudo iptables -t mangle -A V2ray -d 255.255.255.255/32 -j RETURN

#标记已抓包避免重新路由,造成回环

sudo iptables -t mangle -A V2ray -m mark --mark 0xff -j RETURN

#排除出口的 443 和 80 端口包,避免回环

sudo iptables -t mangle -A V2ray ! -o ppp0 -p tcp --dport 443 -j TPROXY --on-port 1888 --tproxy-mark 1
sudo iptables -t mangle -A V2ray ! -o ppp0 -p tcp --dport 80 -j TPROXY --on-port 1888 --tproxy-mark 1
sudo iptables -t mangle -A PREROUTING ! -i ppp0 -p tcp --dport 443 -j V2ray
sudo iptables -t mangle -A PREROUTING ! -i ppp0 -p tcp --dport 80 -j V2ray

#允许某些地址不被抓包直接通过

sudo iptables -A PREROUTING -d 你的服务器地址/32 -j RETURN
sudo iptables -A PREROUTING -d 192.168.3.0/24 -j RETURN
sudo iptables -A PREROUTING -d 192.168.2.0/24 -j RETURN
sudo iptables -A PREROUTING -d 10.0.0.0/8 -j RETURN
sudo iptables -A PREROUTING -p tcp -m tcp --dport 443 -j V2ray
sudo iptables -A PREROUTING -p tcp -m tcp --dport 80 -j V2ray

#IPv6规则,跟IPv4大部分一样,自行理解

ip -6 rule add fwmark 1 table 106
ip -6 route add local ::/0 dev lo table 106 

sudo ip6tables -t mangle -N V2ray6
sudo ip6tables -t mangle -A V2ray6 -d ::1/128 -j RETURN
sudo ip6tables -t mangle -A V2ray6 -d fe80::/10 -j RETURN
sudo ip6tables -t mangle -A V2ray6 -j RETURN -m mark --mark 0xff
sudo ip6tables -t mangle -A V2ray6 -p tcp ! -o ppp0 --dport 443 -j TPROXY --on-ip ::1 --on-port 1888 --tproxy-mark 1
sudo ip6tables -t mangle -A V2ray6 -p tcp ! -o ppp0 --dport 80 -j TPROXY --on-ip ::1 --on-port 1888 --tproxy-mark 1
sudo ip6tables -t mangle -A PREROUTING -p tcp ! -i ppp0 --dport 443 -j V2ray6
sudo ip6tables -t mangle -A PREROUTING -p tcp ! -i ppp0 --dport 80 -j V2ray6
#标记某些地址直接通过
sudo ip6tables -t mangle -D 你的服务器地址/本机器地址 -j RETURN

2,如果有其他端口,自行添加到 PREROUTING和 V2ray的链表里。虽然麻烦一点,但不会造成一些莫名问题。