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

V2ray Config.json配置文件解析

发现网上很多都被删除和下架了,其余的也是凌乱不堪(官网也是,作者很随性。)。故写下来作为回忆。
本非大神,作为一个初学者,仅供参考。

为了方便大家深入理解,我这里提供了配置文件供大家参考

ipv4 ipv6 V2ray透明代理配置文件.7z:

https://url64.ctfile.com/f/22136564-1019284627-e61972 (访问密码: 9280)

V2ray的设计思路,其实相当于一条网线。他没有明显客户端和服务端之分。
你可以通过(inbound,outbound)它把所有的节点连接起来,然后通过(routing)选择不同的出口出去。而区分的标记就是(tag)这个参数。
这个(tag)参数分为内置(tag)和外置(tag)。所以你设置的(tag)不要重复了。

到这里是不是有点像,路由器的QOS标记路由,先标记在路由。

基本思路如下,点对点的单线,配置文件服务端一般是如下格式

{
    ”log“:{},
    "inbound":{},#此为输入端。也就是对应客户端的(outbound)配置。
    "outbound":{}#此为输出端。也就是设置从客户端来的流量怎么出去。
}
注意的是语法,
1、不是配置最后一条,请加上英文逗号分割配置参数。哪怕是参数里的参数也遵循这个规则。
2、所有符号都是英文下输入。
3、注意括号配对问题。

点对点的单线,配置文件客户端一般是如下格式

{
    ”log“:{},
    "inbound":{},#此为输入端,用于接收本地网络数据包,可添加http、socks、透明代理,设置监听地址和端口等参数
    "outbound":{},#此为输出端,用于连接服务端,此参数保持跟服务端一致即可。
    "dns":{},#设置dns参数,比如DNS服务器地址,支持DOH TCP UDP。
    "routing"{},#设置分流规则,inbound过来的流量根据此规则选择直通还是代理。
}

本模板配置为TLS+Vmess+WS

如下是服务端配置,如果要用请去掉#和后面的解析

{
    "log" : 
      {
      "access": "/var/log/v2ray/access.log",#设置日志,如果是Windows请自行改变下日志路径
      "error": "/var/log/v2ray/error.log",
      "loglevel": "warning"
       },
    "inbound": 
   {
      "port": 7777,#设置监听本地端口
      "listen":"127.0.0.1",#设置监听地址
      "protocol": "vmess",#设置协议,可选还有VLess,Shadowsocks,Trojan,需要新版本支持
      "settings": 
               {
                  "clients": 
                  [
                    {
                     "id": "a9873f7b-fa38-4ddd-bda2-f7b19c02c9b4",#设置uuid,最好自己生成
                      "level": 1,
                      "alterId": 111
                     }   
                   ]
                },
        "streamSettings":
        { #此为底层传输配置
        "network":"ws",
        "wsSettings":
              {
               "path":"/web"
              }
         }
     },
     "outbound": 
     {
         "protocol": "freedom",#这里代表出站直接出即可,如果有其他转发需求,把上级的inbound在这里再输入一次
         "settings": {}
      },
          "outboundDetour": 
               [
                  {
                    "protocol": "blackhole",#黑洞路由,不需要的流量直接丢弃
                    "settings": {},
                    "tag": "blocked"
                   }
               ]
}

如下是客户端配置

{
  "log": 
        {
          "access": "/var/log/v2ray/Vaccess.log",#这里也是日志
          "error": "/var/log/v2ray/Verror.log",
          "loglevel": "warning"
        },
  "inbounds": 
        [      #此inbound是设置本地代理的,极为重要。
          {
            "tag": "socks",  #此设置socks代理
            "port": 1887,
            "listen": "0.0.0.0",
            "protocol": "socks",
            "sniffing": 
                 {
                  "enabled": true,
                  "destOverride": 
                        [
                           "http",
                            "tls"
                        ]
                  },
             "settings": 
                 {
                  "auth": "noauth",
                  "udp": true,
                  "allowTransparent": false
                 }
          },
          {
             "tag": "http",  #此设置http代理
             "port": 1889,
             "listen": "0.0.0.0",
             "protocol": "http",
             "sniffing": 
                 {
                   "enabled": true,
                   "destOverride": 
                           [
                              "http",
                               "tls"
                           ]
                 }
           },
           {
              "port": 1888,      #此设置为透明代理
              "listen":"0.0.0.0",
              "protocol": "dokodemo-door",
              "sniffing": 
                   {
                     "enabled": true,
                     "destOverride": 
                            ["http","tls"]
                    },
               "settings": 
                    {
                      "network": "tcp,udp",
                      "followredirect": true,
                      "allowTransparent": false
                     },
               "streamSettings":
                     {
                       "sockopt":
                            {
                              "tproxy":"redirect"
                             }
                     }
            },
            {
                 "listen":"127.0.0.1", #此为设置DNS代理,监听本地dns请求
                 "port":5353,
                 "protocol":"dokodemo-door",
                 "tag":"dns-in",
                 "settings":
                      {
                          "address":"8.8.8.8",
                          "port":53,
                          "network":"tcp,udp"
                      }
             }
         ],
  "outbounds": 
       [
           {
                "tag": "proxy",
                "protocol": "vmess",
                "settings": 
                     {
                        "vnext": 
                            [
                               {
                                  "address": "90.com",
                                  "port": 7777,
                                  "users": 
                                       [
                                         {
                                           "id": "a9873f7b-fa38-4ddd-bda2-f7b19c02c9b4",
                                           "alterId": 111,
                                           "email": "[email protected]",
                                           "security": "auto"
                                          }
                                        ]
                                 }
                              ]
                       },
                   "streamSettings": 
                        {
                           "network": "ws",
                           "security": "tls",
                           "tlsSettings":
                                    {
                                       "allowInsecure": false,
                                       "serverName": "90.com"
                                     },
                           "wsSettings":
                                    {
                                        "path": "/web",
                                        "headers": 
                                              {
                                                "Host": "90.com"
                                               }
                                     }
                           },
                      "mux":
                           {
                              "enabled": false,
                              "concurrency": -1
                           }
                      "tag": "direct",
                      "protocol": "freedom",
                      "settings": {}
                           },
                           {
                       "tag": "block",
                       "protocol": "blackhole",
                       "settings": {
                                 "response": {
                                             "type": "http"
                                             }
                                    }
                             },
                             {
                        "protocol": "dns",
                         "tag": "dns-out"
                              }
         ],
      "dns": {
                "servers": [
                            "https+local://1.1.1.1/dns-query",
                                        {
                                           "address":"https+local://223.5.5.5/dns-query",
                                           "domains":[
                                                       "geosite:cn"
                                                      ]
                                        }
                             ]
               },
    "routing": [
                   {
                    "type": "field",
                    "inboundTag": "dns-in",
                    "outboundTag": "dns-out"
                    },
                    {
                    "outboundTag": "block",
                    "domain": [
                              "geosite:category-ads-all"
                             ],
                    "enabled": true
                     },
                     {
                    "type": "field",
                    "outboundTag": "direct",
                    "domain": [
                                "geosite:cn"
                              ],
                     "enabled": true
                      },
                      {
                     "type": "field",
                     "outboundTag": "direct",
                     "ip": [
                              "geoip:private",
                              "geoip:cn"
                            ],
                     "enabled": true
                       },
                       {
                         "type": "field",
                         "ip":[
                                "8.8.8.8",
                                "1.1.1.1",
                                "104.0.0.0/8",
                                "142.0.0.0/8"
                               ],
                      "domains":[
                                "geosite:google",
                                "geosite:youtube",
                                ],
                      "outboundTag": "proxy",
                      "enabled": true
                        }
                 ]
         }
}

此配置文件,你可能看到很多 geoip、geosite等参数配置,这个预定义域名和ip列表,包含在你下载V2ray的geoip.dat与geosite.dat中。定义如下

  • category-ads:包含了常见的广告域名。
  • category-ads-all:包含了常见的广告域名,以及广告提供商的域名。
  • tld-cn:包含了 CNNIC 管理的用于中国大陆的顶级域名,如以 .cn.中国 结尾的域名。
  • tld-!cn:包含了非中国大陆使用的顶级域名,如以 .hk(香港)、.tw(台湾)、.jp(日本)、.sg(新加坡)、.us(美国).ca(加拿大)等结尾的域名。
  • geolocation-cn:包含了常见的大陆站点域名。
  • geolocation-!cn:包含了常见的非大陆站点域名,同时包含了 tld-!cn
  • cn:相当于 geolocation-cn 和 tld-cn 的合集。
  • apple:包含了 Apple 旗下绝大部分域名。
  • google:包含了 Google 旗下绝大部分域名。
  • microsoft:包含了 Microsoft 旗下绝大部分域名。
  • facebook:包含了 Facebook 旗下绝大部分域名。
  • twitter:包含了 Twitter 旗下绝大部分域名。
  • telegram:包含了 Telegram 旗下绝大部分域名。

为了方便大家深入理解,我这里提供了配置文件供大家参考

ipv4 ipv6 V2ray透明代理配置文件.7z:

https://url64.ctfile.com/f/22136564-1019284627-e61972 (访问密码: 9280)