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的链表里。虽然麻烦一点,但不会造成一些莫名问题。