| 本帖最後由 kingwilliam 於 2019-11-3 12:51 編輯 
 例201 和 例202 是讲解如 socks 或 http inbounds, 以下会解说 透明代理时 dokodemo, dns 和 http/https 或 非http/https的流程。
 
 以下coding 会原用 例201 再加入 routing dns, inbounds dns dokodemo 和 outbound dns 部份, 因原用 例201 所以留意 "domainStrategy": "AsIs"
 
 *** 例203 *** 会加入coding
 *複製代碼        "routing": {
                "rules": [
                        // dns
                        {
                                "type": "field",
                                "inboundTag": "dns-in",
                                "outboundTag": "dns-out"
                        }
                ]
        },
        "inbounds": [
                // dokodemo-door:53
                {
                        "protocol": "dokodemo-door",
                        "port": 53,
                        "tag": "dns-in",
                        "settings": {
                                "address": "114.114.114.114",
                                "port": 53,
                                "network": "udp,tcp"
                        }
                },
                // dokodemo-door:1088
                {
                        "protocol": "dokodemo-door",
                        "port": 1088,
                        "tag": "tproxy-in",
                        "sniffing": {
                                "enabled": true,
                                "destOverride": ["http", "tls"]
                        },
                        "settings": {
                                "network": "tcp,udp",
                                "followRedirect": true
                        }
                }
        ],
        "outbounds": [
                // dns
                {
                        "tag": "dns-out",
                        "protocol": "dns"
                },
        ],
*
 因coding太长, 所以由 例204 开始coding会适量简化, 简化後部份会用 ... 代替
 *
 *** 例204 *** (例201 + 例203)
 在讲解前有几点要留意複製代碼{
        "dns": {
                "servers": [
                        {
                                "address": "114.114.114.114",
                                "port": 53,
                                "domains": ["geosite:cn"]
                        },
                        "address": "8.8.8.8"
                ]
        },
        "routing": {
                // "domainStrategy": "AsIs",
                "rules": [
                        // direct-domain
                        {
                                "type": "field",
                                "domain": ["geosite:cn"],
                                "outboundTag": "direct"
                        },
                        // direct-ip
                        {
                                "type": "field",
                                "ip": ["geoip:cn","geoip:private"],
                                "outboundTag": "direct"
                        },
                        // dns
                        {
                                "type": "field",
                                "inboundTag": "dns-in",
                                "outboundTag": "dns-out"
                        }
                ]
        },
        "inbounds": [
                // socks:1080
                {
                        "tag": "socks-in",
                        "protocol": "socks"
                        ...
                },
                // dokodemo-door:53
                {
                        "protocol": "dokodemo-door",
                        "port": 53,
                        "tag": "dns-in",
                        "settings": {
                                "address": "114.114.114.114",
                                "port": 53,
                                "network": "udp,tcp"
                        }
                },
                // dokodemo-door:1088
                {
                        "protocol": "dokodemo-door",
                        "tag": "tproxy-in",
                        ...
                }
        ],
        "outbounds": [
                // default_out
                {
                        "tag": "default_out",
                        "protocol": "vmess",
                        "settings": {...},
                },
                //direct
                {
                        "tag": "direct",
                        "protocol": "freedom",
                        "settings": {}
                },
                // dns
                {
                        "tag": "dns-out",
                        "protocol": "dns"
                },
        ]
}
 
 
  inbounds dokodemo dns-in 有114.114.114.114, 但 dns server同时也有 114.114.114.114, 有需要吗? 答案:有需要, 因用途不同。
在inbounds 加入 dokodemo dns in 时, 最好同时在routing加入 dns 作拦截, 原因, 下面解说.
outbounds dns 只会拦截 A 和 AAAA record
请紧记 v2ray 流悜是 inbounds -> routing -> outbounds
 
 因透明代理除了会处理浏览器上网外,还要处理其他上网如FTP或电邮.
 
 以下会用 ftp 作例子 (有些ftp客户可用socks/http proxy, 但以下会用直连作例)
 
 
 
 如ftp要去 ftp.ibm.com***因ftp是要用ip去连接,所以ftp client会先问dns取IP地址***
 
inbounds dns-in收到要求
routing dns 拦截dns-in 会跳到outbounds dns-out
outbounds dns-out 是不是要查A或AAAA记录? 如是就跳上 dns server
dns 域名是不是 geosite:cn 如是就用114.114.114.114
dns 如域名不付合上面条件,所以会用预设dns 即8.8.8.8查询
routing 会看8.8.8.8是不是geosite:cn
routing 再看8.8.8.8是不是geoip:cn 或 geoip:private
routing 最後在没有合适条件下离开routing
outbounds 因routing内没有付合8.8.8.8任何要求,所以outbounds会用第一设定 在例204即default_out 上网问8.8.8.8取ftp.ibm.com IP地址。
 ***这时ftp会收到由v2ray传回的IP地址***
 
 
inbounds tproxy-in接收要求
routing 会看 IP地址 是不是geosite:cn
routing 再看 IP地址 是不是geoip:cn 或 geoip:private
routing 最後在没有合适条件下离开routing
outbounds 因routing内没有付合 IP地址 任何要求,所以outbounds会用第一设定 在例204即default_out 上网
 
 例204 的流程如下:
 
 
 
 ftp client -> inbounds dns-in -> routing(1) -> dns-out -> dns server -> routing(2) -> outbounds(1)
ftp client -> inbounds tproxy-in -> routing(3) -> outbounds(2)
 
 
 
 以下会用 电邮客户端 作例子
 
 
 
 如电邮要寄去 @ibm.com 如电邮伺服器FQDN(即MX纪录)是 email.ibm.com***因 电邮 是要先取得MX纪录, 所以 电邮客户端 会先问dns取MX纪录***
 
inbounds dns-in收到要求
routing dns 拦截dns-in 会跳到outbounds dns-out
outbounds dns-out 是不是要查A或AAAA记录? 如是就跳上 dns server***但电邮是要先取得 MX记录 (留意不是取IP地址)
 
因不是查A或AAAA记录, 所以会原用dns-in 即接问114.114.114.114取MX纪录 (这时已直接离开v2ray)
 ***这时 电邮客户端 会收到由v2ray传回 email.ibm.com***
 
 
inbounds dns-in收到 电邮客户端 要求 email.ibm.com 的 IP地址
routing dns 拦截dns-in 会跳到outbounds dns-out
outbounds dns-out 是不是要查A或AAAA记录? 如是就跳上 dns server
dns 域名是不是 geosite:cn 如是就用114.114.114.114
dns 如域名不付合上面条件,所以会用预设dns 即8.8.8.8查询
routing 会看8.8.8.8是不是geosite:cn
routing 再看8.8.8.8是不是geoip:cn 或 geoip:private
routing 最後在没有合适条件下离开routing
outbounds 因routing内没有付合8.8.8.8任何要求,所以outbounds会用第一设定 在例204即default_out 上网问8.8.8.8取email.ibm.com IP地址。
 ***这时 电邮客户端 会收到由v2ray传回的IP地址***
 
 
inbounds tproxy-in接收要求
routing 会看 IP地址 是不是geosite:cn
routing 再看 IP地址 是不是geoip:cn 或 geoip:private
routing 最後在没有合适条件下离开routing
outbounds 因routing内没有付合 IP地址 任何要求,所以outbounds会用第一设定 在例204即default_out 上网
 
 例204 的流程如下:
 
 
 
 email client -> inbounds dns-in -> routing(1) -> dns-out
email client -> inbounds dns-in -> routing(2) -> dns server -> routing(3) -> outbounds(1)
email client -> inbounds tproxy-in -> routing(4) -> outbounds(2)
 
 在 电邮客户端 例子第5步骤 大家都看到 outbounds dns 如何处理不是查询A或AAAA纪录的方法, 就是直接用inbounds dns-in带来的伺服器地址问非A或AAAA纪录
 
 而dns server只会查询A或AAAA纪录
 |