本帖最後由 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纪录 |